Переопределить действие пакета - PullRequest
4 голосов
/ 05 января 2012

У меня есть проект с symfony 2, и я использую SonataAdminBundle для моего бэкэнда. Как я могу переопределить dashboardAction() для расширения их возможностей?

1 Ответ

8 голосов
/ 05 января 2012

Конфигурацию маршрутизации для этого администратора сонаты можно найти в

// 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', который содержит контроллер, который должен расширять действия dashboard. Затем попробуйте следующее:

  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:
     pattern:  /dashboard
     defaults: { _controller: MyAdminBundle:Core:dashboard }
  1. Откройте файл конфигурации маршрутизации приложения и добавьте следующее после конфигурации sonata, чтобы оно переопределило его
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

Отказ от ответственности просто чтобы вы знали, что я не использовал это в проекте. Я просто проверяю это локально, и это сработало. Возможно, это не лучшее решение!

Надеюсь, это поможет

...