如何在kernel.controller
事件中设置的控制器中访问对象?
我有一个onKernelController
方法在控制器之前运行,我需要在onKernelController
中设置的控制器中的一些数据。
答案 0 :(得分:2)
您可以使用依赖注入来解决此问题:
1)将您的对象/类转换为服务并将其注入侦听器。
services:
your_object:
class: Your\Namespace\YourObjectClass
your_listener:
class: Your\Namespace\YourListener
arguments: [ @your_object ]
tags:
- { name: kernel.controller, event: kernel.request, method: onKernelController }
2)在注入的对象上设置一些属性(也可以是对象)
听众类
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
class YourListener
{
protected $object;
public function __construct($object)
{
$this->object = $object;
}
public function onKernelController(FilterControllerEvent $event)
{
// ...
$object->setProperty('some_property_value');
}
}
3.。)在容器感知控制器内获取属性(或将控制器转换为服务并注入@your_object
)
<强>控制器强>
use Symfony\Component\DependencyInjection\ContainerAware;
// or: use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class SomeController extends ContainerAware // or: extends Controller
{
public function someAction()
{
$property = $this->container->get('your_object')->getProperty;
// $property => 'some_property_value'
}