6

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();
    }

    ........
}

私の services.yml は次のようになります。

services:
  geninno.twig.extension.dashboard:
    class: Geninno\EDSBundle\Twig\Extension\GeninnoShareboardExtension
    arguments:
      container: "@service_container"
      service: "@security.context"
    tags:
     - { name: twig.extension }

ユーザーがログインしており、ファイアウォールのセットアップは次のようになっています。

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] }
4

3 に答える 3

2

試してみてください

services:
  geninno.twig.extension.dashboard:
    class: Geninno\EDSBundle\Twig\Extension\GeninnoShareboardExtension
    arguments: [@service_container, @security.context]
    tags:
     - { name: twig.extension }
于 2013-04-05T15:02:11.130 に答える
1

エラーが発生しているページはファイアウォールの背後にありますか? そうでない場合は、セキュリティ トークンにアクセスできません。ページをファイアウォールの背後に置き、認証されていないユーザーに公開する必要があります。

このようなものは、認証されていないユーザーにページを開くためのトリックを行う必要がありますが、それでもファイアウォール内に保持します (security.yml)

access_control:
  - { path: /lost_password, roles: IS_AUTHENTICATED_ANONYMOUSLY}
于 2013-04-05T16:19:36.403 に答える