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;
}
使用服务将避免监听器的东西,并为您提供更简洁的方法。
我有一个控制器在许多处理路由的函数中使用 $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;
}
使用服务将避免监听器的东西,并为您提供更简洁的方法。