树枝扩展中的Symfony依赖注入

周杰伦

好的,我试图创建依赖于其他服务(security.context)的树枝扩展,但遇到了一些麻烦。因此,这是我的服务声明:

acme.twig.user_extension:
        class: Acme\BaseBundle\Twig\UserExtension
        arguments: ["@security.context"]
        tags:
            - { name: twig.extension }

这是我的课

// acme/basebundle/twig/userextension.php

namespace Acme\BaseBundle\Twig;

use Symfony\Component\Security\Core\SecurityContext;
use Acme\UserBundle\Entity\User;

class UserExtension extends \Twig_Extension
{

    protected $context;

    public function __construct(SecurityContext $context){
        $this->context = $context;
    }

    public function getFunctions()
    {
        return array(
            'getAbcData' => new \Twig_SimpleFunction('getAbcData', $this->getAbcData()),
        );
    }

    public function getAbcData()
    {
        if ( !is_object($user = $this->context->getToken()->getUser()) || !$user instanceof User){ return null; }
        return array(
            'data_array'   => $user->getData(),
        );
    }

    public function getName()
    {
        return 'user_extension';
    }
}

最后,我有一个错误:

FatalErrorException: Error: Call to a member function getUser() on a non-object in \src\Acme\BaseBundle\Twig\UserExtension.php line 27

我猜想security.context服务尚未初始化,然后出现错误。任何人都可以告诉,有没有办法手动加载服务,或者有更好的解决方案?非常感谢。


我使用Symfony 2.5。*

UPD:

我也在symfony文档中找到了此通知

请记住,Twig Extensions不是延迟加载的。这意味着,如果有任何服务(或本例中的Twig扩展)依赖于请求服务,则您更有可能获得CircularReferenceException或ScopeWideningInjectionException。有关更多信息,请查看如何使用示波器。其实,我不知道该如何纠正。

克韦茨

在构造Twig_SimpleFilter时正在调用 $this->getAbcData()但是您必须传递一个callable作为参数。

public function getFunctions() {
    return array (
        'getAbcData' => new \Twig_SimpleFunction( 'getAbcData', array( $this, 'getAbcData' ))
    );
}

狮子座也是对的。getToken()在尝试之前,您应该先检查是否正在返回对象getToken()->getUser()

您还可以在twig:中将用户作为参数传递给函数{{ getAbcData(app.user) }}这样,该功能更加通用,可以用于任何用户,而不仅仅是当前登录的用户。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Symfony 中的依赖注入

来自分类Dev

Symfony 中的依赖注入

来自分类Dev

Symfony 从扩展类设置依赖注入

来自分类Dev

在Symfony 3中使用注入的服务注册自定义树枝扩展名会导致错误

来自分类Dev

如何使用Symfony访问树枝扩展中的全局服务功能?

来自分类Dev

扩展类的依赖注入?

来自分类Dev

注入树枝变量symfony2

来自分类Dev

symfony php模板扩展了树枝模板

来自分类Dev

Symfony2创建树枝扩展

来自分类Dev

Symfony2创建树枝扩展

来自分类Dev

是否可以在依赖项注入中动态扩展服务?

来自分类Dev

在symfony中避免依赖注入中的容器字符串

来自分类Dev

Unity 扩展依赖注入容器

来自分类Dev

Symfony 2依赖注入到Controller构造中

来自分类Dev

Symfony2无法在依赖注入中实例化接口

来自分类Dev

Symfony 2依赖注入到Controller构造中

来自分类Dev

无服务的树枝扩展中的Symfony2呼叫控制器操作

来自分类Dev

如何仅在某些页面上从Symfony中的基础扩展中排除部分树枝?

来自分类Dev

通过XML的Symfony依赖注入

来自分类Dev

Symfony依赖注入注入类的新实例

来自分类Dev

数据映射器模式中具有Symfony依赖注入组件的循环依赖

来自分类Dev

属性中的依赖注入

来自分类Dev

Django中的依赖注入

来自分类Dev

Laravel中的依赖注入

来自分类Dev

PHP中的依赖注入?

来自分类Dev

PHP中的依赖注入?

来自分类Dev

Arduino中的依赖注入

来自分类Dev

子类中的依赖注入

来自分类Dev

如何覆盖树枝扩展中的模板块?