覆盖捆绑操作

时间:2012-01-04 21:18:51

标签: php symfony sonata-admin

我有一个symfony 2的项目,我的后端使用SonataAdminBundle。如何覆盖dashboardAction()以扩展它们以获得更多功能?

1 个答案:

答案 0 :(得分:8)

此奏鸣曲管理员的路由配置可在

中找到
// vendor/bundles/Sonata/AdminBundle/Resources/config/routing/sonata_admin.xml
    <route id="sonata_admin_dashboard" pattern="/dashboard">
        <default key="_controller">SonataAdminBundle:Core:dashboard</default>
    </route>

假设您有一个名为“My / AdminBundle”的软件包,其中包含应扩展dashboardActions的控制器。然后尝试以下方法:

  1. 在/My/AdminBundle/Controller/CoreController.php中创建一个控制器

    namespace My\AdminBundle\Controller;
    
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
    use Symfony\Component\HttpFoundation\Response;
    use Sonata\AdminBundle\Controller\CoreController as BaseCoreContBroller;
    
    class CoreController extends BaseCoreContBroller
    {
    
        public function dashboardAction()
        {
            // your custom code
    
            // call parent method
            parent::dashboardAction();
        }
    }
    
  2. 打开位于/My/AdminBundle/Resources/config/routing.yml的捆绑路由配置文件(您可能有不同的配置格式,例如xml)

  3. sonata_admin_dashboard:
         pattern:  /dashboard
         defaults: { _controller: MyAdminBundle:Core:dashboard }
    
    1. 打开应用程序路由配置文件,并在sonata配置之后添加以下内容,以便它将覆盖它
    2. admin:
          resource: '@SonataAdminBundle/Resources/config/routing/sonata_admin.xml'
          prefix: /admin
      
      _sonata_admin:
          resource: .
          type: sonata_admin
          prefix: /admin
      
      MyAdminBundle:
          resource: "@MyAdminBundle/Resources/config/routing.yml"
          prefix:   /admin
      

      免责声明只是让您知道我没有在项目中使用过此功能。我只是在本地检查它,它工作。这可能不是最佳解决方案!

      希望这有帮助