覆盖捆绑操作


Override bundle action

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

此sonata管理员的路由配置可以在中找到

// 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)

sonata_admin_dashboard:模式:/仪表板默认值:{_controller:MyAdminBundle:Core:仪表板}
  1. 打开应用程序路由配置文件,并在sonata配置之后添加以下内容,以便覆盖它
管理员:resource:'@SonataAdminBundle/Resources/config/routing/sona_admin.xml'前缀:/admin_sonata_admin:资源:。类型:sonata_admin前缀:/adminMyAdminBundle:resource:"@MyAdminBundle/Resources/config/routing.yml"前缀:/admin

免责声明只是为了让你知道我没有在项目中使用过这个。我只是在当地检查了一下,结果有效。这可能不是最好的解决方案!

希望这能帮助