错误:没有为控制器定义“_sonata_admin”


Error: There is no `_sonata_admin` defined for the controller

我按照文档添加了一个自定义路由。当我点击列表视图中的按钮时,我会得到错误:

没有为控制器***'UserController和当前路由resetPassword 定义_sonata_admin

文档: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调用(我们的应用程序在另一个点上会这样做)浏览到该路由,则该路由运行良好。但是,当我尝试单击列表视图中的按钮时,我得到了主题错误,该按钮是在UserAdmin的configureListFields()中生成的。我不知道其他默认操作是如何将代码放入请求中的,它们看起来和这个一样。当我在谷歌上搜索错误时,我发现其他一些人在问这个问题,但我的管理员似乎配置正确,这是我能找到的唯一答案——而且它似乎已经过时了,因为现在的论点似乎顺序不同。

提前感谢你们能提供的任何帮助。

这是唯一的想法,没有经过测试——也许你必须让控制器动作与路由名称(而不是模式字符串)相对应:password_reset->passwordResetAction

无需@Route("/User/{userId}/resetPassword/", name="resetPassword")因为它以前在configureRoutes函数中定义过。