2014-04-28 27 views
1

我想覆盖Monolog处理程序BrowserConsoleHandler来自定义一些操作,但我的自定义静态方法显然不被调用。 我红色的静态类,继承类应使用静态::相反自我::调用类方法,但即使通过临时修改基类:我的子方法没有被调用,超级方法被调用。重写单引号处理程序

我创建了自定义的处理器

namespace MyBundle\Monolog; 
use Monolog\Handler\BrowserConsoleHandler as BaseBrowserConsoleHandler; 
class BrowserConsoleHandler extends BaseBrowserConsoleHandler { 
    public static function generateScript(){ 
      // my custom operation that is not called :[ 
    } 
... 

然后我将我的自定义处理程序作为服务config.yml

services: 
    browser_console_logger: 
     class: Symfony\Bridge\Monolog\Logger 
     arguments: [special] 
     calls: 
      - [pushHandler, [@browser_console_handler]] 
    browser_console_handler: 
     class: MyBundle\Monolog\BrowserConsoleHandler 

然后我用我的记录:

$logger = $this->get('browser_console_logger'); 
    $logger->info('hello console : ', [ 
     'foo' => 'bar' 
    ]); 

我让我的日志在浏览器控制台,但我的子方法尚未被称为... 我在德v env和我的缓存清楚。 我不是很symfony(还;-)的实验,我在这个红色的一些东西,但它似乎我缺少的东西上的方式...

回答

0

好的我发现:在基类Monolog \ Handler \ BrowserConsoleHandler,它来自于方法链的调用方式,并在我的情况,generateScript()send(),whitch在我改变self::generateScriptstatic::generateScript. 但这是不够的,送(称呼)是由

register_shutdown_function(array('Monolog\Handler\BrowserConsoleHandler', 'send')); 
称为

所以类的上下文是基础的,我们必须将类名更改为get_called_class() 然后上下文是我的子类,最后我必须在基类中修改所有privateprotected,我认为如果基本静态类是要继承的,它应该是这样工作的。所以它依赖于Monolog团队,我会注意到他们。