当我在我的symfony2服务(twig扩展)中注入security.context时,会出现以下错误:
在非对象上调用成员函数getUser().....
class GeninnoShareboardExtension extends \Twig_Extension {
public function __construct(ContainerInterface $container, SecurityContext $context) {
$this->doctrine = $container->get('doctrine');
$this->context = $context;
}
public function getUser() {
return $this->context->getToken()->getUser();
}
........
}
Run Code Online (Sandbox Code Playgroud)
我的services.yml看起来像这样:
services:
geninno.twig.extension.dashboard:
class: Geninno\EDSBundle\Twig\Extension\GeninnoShareboardExtension
arguments:
container: "@service_container"
service: "@security.context"
tags:
- { name: twig.extension }
Run Code Online (Sandbox Code Playgroud)
用户已登录,我的防火墙设置如下:
access_control:
- { path: ^/secured/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/secured/create, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/secured/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: [IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED] }
Run Code Online (Sandbox Code Playgroud)
我通过在 SecurityContext 调用中添加 if 来解决这个问题。检查 GetToken() 是否返回对象(已验证)或字符串(匿名)
if (is_object($this->context->getToken()))
{
.... // getUser() etc.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4906 次 |
| 最近记录: |