Ошибка: для контроллера не определен `_sonata_admin`

Я следовал документации по добавлению пользовательского маршрута. Когда я нажимаю кнопку в представлении списка, я получаю сообщение об ошибке:

Для контроллера ***\UserController не определен _sonata_admin и текущий маршрут resetPassword

Документы: http://sonata-project.org/bundles/admin/master/doc/reference/routing.html

Моя служба администратора определяется следующим образом:

sonata.admin.user:
    class: ****\Admin\UserAdmin #User Admin
    tags:
        - { name: sonata.admin, model_manager: cems_model_manager, manager_type: orm, group: core, label: "Users" }
    arguments:
        - ~
        - models\User #User Model
        - '****Bundle:User' #User Controller
    calls:
        - [ setTranslationDomain, [****Bundle]]

Я добавил свой маршрут в свой UserAdmin

  protected function configureRoutes(RouteCollection $collection)
  {
      parent::configureRoutes($collection);
      $collection->add('password_reset', $this->getRouterIdParameter() . '/resetPassword/');
  }

И создал собственный контроллер и действие.

  <?php

  namespace ****\Controller;

  use Sonata\AdminBundle\Controller\CRUDController;
  use Symfony\Component\Routing\Annotation\Route;
  use Symfony\Component\HttpFoundation\Request;

  class UserController extends CRUDController
  {

      /**
       * @Route("/User/{userId}/resetPassword/", name="resetPassword")
       */
      public function resetPasswordAction(Request $request, $userId)
      {
          // code here 
      } 
  }

Маршрут работает нормально, если я просматриваю его вручную или через вызов ajax, что наше приложение делает в другой точке. Но когда я пытаюсь нажать кнопку в представлении списка, которое создается в configureListFields() в UserAdmin, я получаю сообщение об ошибке. Я не могу понять, как какие-либо другие действия по умолчанию помещают код в запрос, они выглядят так же, как это. Я нашел несколько других людей, задающих этот вопрос, когда я гуглил ошибку, но мой администратор, похоже, настроен правильно, и это был единственный ответ, который я смог найти, и он кажется устаревшим, поскольку аргументы теперь кажутся в другом порядке.

Заранее спасибо за любую помощь, которую вы, ребята, можете предоставить.


person Jessica    schedule 29.11.2013    source источник
comment
У меня не было такой ситуации, но все та же ошибка, и мне помог переход к параметру маршрута: $this-›router-›generate('statements', ['_sonata_admin' =› 'vop_policy.policy_admin'])   -  person Darius.V    schedule 12.05.2020


Ответы (2)


Это единственная идея, не проверенная - возможно, у вас должно быть действие контроллера, соответствующее имени маршрута (а не строке шаблона): password_reset -> passwordResetAction

person Petr Slavicek    schedule 29.11.2013
comment
Да, решение было связано с изменением имени и настроек маршрута. Я понял это с помощью группы Google Sonata Devs: groups.google .com/d/msg/sonata-devs/8GK0kpa2cik/5UCE_eLMixoJ - person Jessica; 05.12.2013

Нет необходимости в @Route("/User/{userId}/resetPassword/", name="resetPassword"), поскольку он определен ранее в функции configureRoutes.

person Saman Mohamadi    schedule 24.03.2015