Не удалось создать URL-адрес для "page slug" после создания пользователя
У меня странная проблема. Я установил и настроил 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:
Благодаря Марко Юринчичу я узнал, что у меня есть эти строки в моей конфигурации
sonata_user:
impersonating:
route: page_slug
parameters: { path: / }
Однако это не похоже на маршрут, и фактически нет маршрутов с именем page_slug вообще. Предполагается ли, что у него должно быть название маршрута "page_slug"?
3 answers
У меня та же проблема. Что я сделал, так это поиск page_slug в моем проекте, и я обнаружил, что page_slug используется в моей конфигурации.yml в разделе sonata_user
impersonating:
route: page_slug
parameters: { path: / }
Мне все еще нужно посмотреть, влияет ли это на что-то еще (я немного новичок в Symfony, поэтому я не на 100% уверен, что это не используется где-то еще:))
Комментируя (или просто удаляя) это исправило мою проблему, и теперь я могу видеть список пользователей на панели администратора.
Надеюсь, что это помогает.
РЕДАКТИРОВАТЬ: Я нашел ответ. В этой ссылке объясняется значение олицетворения: https://github.com/sonata-project/SonataUserBundle/issues/174
Удалить сломанную конфигурацию
В вашем случае, если вы не будете использовать олицетворение, вам следует просто удалить строки из конфигурации:
impersonating:
route: page_slug
parameters: { path: / }
Настройка олицетворения
(Пусть это найдут путешественники Google)
В противном случае вам необходимо настроить олицетворение:
1. Пользователь должен иметь роль ROLE_ALLOWED_TO_SWITCH
. Я настроил администратора на эту роль:
# 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) Настройка SonataUserBundle - замените my_home_route
именем маршрута, которое будет открыто после нажатия ссылки для переключения пользователя:
# app/config/config.yml
sonata_user:
impersonating:
route: my_home_route
Ручное переключение пользователей
Чтобы вручную переключить пользователя, добавьте строку в конец URL-адреса: ?_switch_user=username
. Измените username
на реальное имя пользователя.
Я видел на подходе на веб-сайте (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
Проблема решена. Однако я не знаю последствий такого поступка...