在kernel.controller事件中设置的控制器中访问对象

时间:2013-11-26 07:55:27

标签: symfony

如何在kernel.controller事件中设置的控制器中访问对象?

我有一个onKernelController方法在控制器之前运行,我需要在onKernelController中设置的控制器中的一些数据。

1 个答案:

答案 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'
    }