创建用户后,无法为“page_slug”生成URL

时间:2013-10-14 04:31:28

标签: php symfony fosuserbundle sonata-admin sonata-user-bundle

我有一个奇怪的问题。我安装并配置了SonataUserBundle以与FosUserBundle和SonataAdminBundle一起使用。安装没有任何问题,一切似乎都完美,除非我通过sonataUserBundle网页创建另一个用户。一旦我创建了用户(并且在我查看数据库时创建了它),我就再也看不到用户列表了。当我单击以返回用户列表时,出现以下错误:

An exception has been thrown during the rendering of a template ("Unable to generate a URL for the named route "page_slug" as such route does not exist.") in "SonataAdminBundle:CRUD:list.html.twig".

如果我从数据库中删除用户,只有一个用户,那么我可以访问用户列表。

我完全不知道如何进一步解决这个问题......

编辑1:

我发现,感谢MarkoJurinčič,我的配置中有这些行

sonata_user:

    impersonating:
        route:                page_slug
        parameters:           { path: / }

然而,这看起来并不像路线,实际上没有名为page_slug的路线。是否应该有路线名称“page_slug”?

3 个答案:

答案 0 :(得分:5)

我遇到了同样的问题。我做的是在我的项目中搜索page_slug,我发现page_slug用在我的config.yml下sonata_user

impersonating:
  route: page_slug
  parameters: { path: / }  

我仍然需要看一看是否会影响其他内容(我对Symfony不熟悉,所以我不能100%确定这不会在其他地方使用:))

评论(或仅删除)此修复我的问题,现在我可以在管理员dahsboard中看到用户列表。

希望它有所帮助。

编辑: 我找到了答案。在此链接中解释了冒充的含义: https://github.com/sonata-project/SonataUserBundle/issues/174

答案 1 :(得分:5)

删除损坏的配置

在您的情况下,如果您不使用模拟,则应该从配置中删除行:

impersonating:
  route:                page_slug
  parameters:           { path: / }

配置模拟

(可由google wanderers发现)

否则您需要配置模拟:
1.用户需要具有角色ROLE_ALLOWED_TO_SWITCH。我将admin配置为具有此角色:

# app/config/security.yml  
security:  
  role_hierarchy:  
    ROLE_ADMIN:  [ROLE_USER, ROLE_ALLOWED_TO_SWITCH]

2。允许用户在防火墙中切换:

# app/config/security.yml      
firewalls:
  main:
    switch_user: true

3。 (如果您需要Sonata Admin用户列表中的链接)安装SonataUserBundle - 在单击链接切换用户后,将my_home_route替换为要打开的路径名称:

# app/config/config.yml
sonata_user:
  impersonating:
    route:  my_home_route

手动用户切换

要手动将用户添加字符串切换到url end:?_switch_user=username。将username更改为真实用户名。

答案 2 :(得分:2)

我在网站上看到了一种方法(http://www.laurent-masforne.com/memo/surcharger-sonatauserbundle-notamment-useradmin/)并评论了这些内容:

/*if ($this->isGranted('ROLE_ALLOWED_TO_SWITCH')) {
            $listMapper
                ->add('impersonating', 'string', array('template' => 'SonataUserBundle:Admin:Field/impersonating.html.twig'))
            ;
        }*/
vendor\sonata-project\user-bundle\Sonata\UserBundle\Admin\Model\ApplicationUserAdmin

中的

解决了这个问题。但是,我不知道这样做的影响......