Symfony2 控制器 post 初始化回调?

Symfony2 controller post initialization callback?

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

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

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

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

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

控制器 class 为:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

final class ImportController extends Controller
{
  private $importer;

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

使用服务将避免监听器的东西,并为您提供更简洁的方法。