我有一个控制器,它在许多处理路径的函数中调用$this->get('app.service.myservice')
的服务。
我没有系统地获取该服务,而是想知道是否有一种方式可以通知控制器和服务已经创建。我在控制器的生命周期中寻找某种回调。
然后我会获取服务一次并将其存储在带有控制器的变量中。
答案 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;
}
使用服务将避免监听器的内容,并为您提供更清晰的方法。