Symfony2控制器发布初始化回调?

时间:2015-10-03 15:05:00

标签: php symfony callback controller lifecycle

我有一个控制器,它在许多处理路径的函数中调用$this->get('app.service.myservice')的服务。

我没有系统地获取该服务,而是想知道是否有一种方式可以通知控制器和服务已经创建。我在控制器的生命周期中寻找某种回调。

然后我会获取服务一次并将其存储在带有控制器的变量中。

1 个答案:

答案 0 :(得分:1)

路线调度员在处理的每个阶段发出一系列事件。事件没有过多记录,但您可以检查调度代码以及:

http://symfony.com/doc/current/reference/events.html

您想要侦听kernel.controller事件:

http://symfony.com/doc/current/reference/events.html#kernel-controller

这里讨论听众:

http://symfony.com/doc/current/cookbook/event_dispatcher/event_listener.html

话虽如此,如果您只想在某些控制器中注入特定服务,那么请考虑将控制器定义为服务,如下所述:

http://symfony.com/doc/current/cookbook/controller/service.html

您的服务定义可能如下所示:

cerad_project_tournament_import_controller:
  class: Cerad\ProjectTournament\Import\ImportController
  calls: [[setContainer, ['@service_container']]]
  arguments:
    - '@cerad_project_tournament_importer_excel'

路线为:

project_tournament_import:
  path:     /import
  methods:  [GET,POST]
  defaults:
    _controller: cerad_project_tournament_import_controller:importAction

控制器类:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

final class ImportController extends Controller
{
  private $importer;

  public function __construct(ImporterExcel $importer)
  {
    $this->importer = $importer;
  }

使用服务将避免监听器的内容,并为您提供更清晰的方法。