Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 使在kernel.controller事件中设置的控制器中的对象可访问_Symfony - Fatal编程技术网

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

Symfony 使在kernel.controller事件中设置的控制器中的对象可访问,symfony,Symfony,如何在kernel.controller事件中设置的控制器中访问对象 我有一个onKernelController方法,它在controller之前运行,我需要在onKernelController中设置的控制器中的一些数据。您可以使用依赖项注入来解决此问题: 1) 将对象/类转换为服务并将其注入侦听器 services: your_object: class: Your\Namespace\YourObjectClass your_listener:

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


我有一个
onKernelController
方法,它在controller之前运行,我需要在
onKernelController
中设置的控制器中的一些数据。您可以使用依赖项注入来解决此问题:

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.)在容器感知控制器中获取属性(或者将控制器也转换为服务,并将
@您的_对象注入

控制器

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

它不应该是
参数:[@your\u object]
而不是
参数:[@your\u service]
@
是什么意思?没错,我修正了:)
@您的\u对象
意味着注入服务
您的\u对象
,而
%some\u name%
会注入参数
some\u name
,而
some\u name
只会注入字符串
some\u name
。足够清楚吗?感谢编辑Roman-我将
您的\u服务
更改为
我的\u对象
,使其更加明显,并且忘记更改引用:)编码愉快!