在插件中扩展symfony任务

时间:2011-03-02 18:08:24

标签: plugins symfony1 listener task

我正在使用symfony 1.4中的插件,并希望为另一个插件中的任务添加一个侦听器。当用户执行php symfony doctrine:build时,我希望我的插件能够运行自己的任务。我在哪里/如何注册听众?我对http://www.symfony-project.org/gentle-introduction/1_4/en/17-Extending-Symfony

没有任何成功

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为没有合适的事件(比如缓存清除)。

我的建议是接受它需要两个任务,或者如果你经常使用构建,创建一个包装器任务先调用一个然后调用另一个 - doctrine:build是如何执行此操作的一个很好的例子。或者bash / batch脚本!

答案 1 :(得分:1)

实际上,您可以将代码挂钩到任何symfony任务。看看sfBaseTask :: doRun方法。执行任何任务时,会发出2个事件:command.pre_command和command.post_command。

创建一个类来存储代码,例如:

class toolkitEvents
{
  static public function commandPostEventHook(sfEvent $event)
  {
    $task = $event->getSubject();
    if ($task->getFullName() === 'doctrine:build')
    { 
     //do stuff or call another task
    }
}

并在初始化插件时将此方法连接到调度程序:

class yourPluginConfiguration extends sfPluginConfiguration
{
  public function initialize()
  {
    $this->dispatcher->connect('command.post_command', array('toolkitEvents', 'commandPostEventHook'));  
  }