2015-04-07 3 views
1

У меня есть приложение Symfony, которое использует Sonata в качестве базового администратора и платформу Sylius для управления продуктом.Переопределение контроллера ресурсов

Я создал свой собственный маршрут создания в методе configureRoutes класса admin. Я хочу вызвать наш контроллер ресурсов (который будет использоваться для обработки всех объектов продукта) CRUD-методов из сонаты.

Вот мой метод configureRoutes до сих пор:

protected function configureRoutes(RouteCollection $collection) 
    { 
     $collection->add('create', 'create', array(
       '_controller' => 'AppBundle:Backend/Resource:createAction', 
       '_sylius' => array(
        'template' => 'AppBundle:Product/Backend/Form:CreateProduct.html.twig', 
        'redirect' => 'sylius_backend_product_show', 
       ) 
      ) 
     ); 
    } 

Но я получаю следующее сообщение об ошибке:

enter image description here

Мой resourceController расширяет контроллер sylius ресурс:

namespace AppBundle\Controller\Backend; 

use Sylius\Bundle\ResourceBundle\Controller\ResourceController as BaseController; 
use Symfony\Component\HttpFoundation\Request; 

/** 
* Class ResourceController 
* @package AppBundle\Controller\Backend 
*/ 
class ResourceController extends BaseController 
{ 
    /** 
    * @param Request $request 
    * 
    * @return RedirectResponse|Response 
    */ 
    public function createAction(Request $request) 
    { 
     // Custom view logic 
     return parent::createAction($request); 
    } 
} 

Мое приложение/config.yml:

sylius_product: 
    driver: doctrine/orm 
    classes: 
     product: 
      model: AppBundle\Entity\Product 
      controller: AppBundle\Controller\Backend\ResourceController 
      form: 
       default: AppBundle\Form\Type\ProductType 
      translatable: 
       targetEntity: AppBundle\Entity\ProductTranslation 
     product_translation: 
      model: AppBundle\Entity\ProductTranslation 

sylius_resource: 
    resources: 
     app.backend.product: 
      driver: doctrine/orm 
      object_manager: default 
      classes: 
       controller: AppBundle\Controller\Backend\ResourceController 
       model: AppBundle\Entity\Product 

Как удовлетворить аргументы конструктора?

+1

Контроллеры Sylius - это службы, поэтому их следует вызывать в формате 'sylius.controller.product: createAction', а не' Sylius: Product: create'. – qooplmao

+0

Добавьте это как ответ мой человек :) – Kal

+0

Из любопытства, из того, что вы можете видеть, можете ли вы сделать то же самое, что и для контроллера ресурсов, чтобы его можно было назвать 'sylius.controller.resource'. – Kal

ответ

1

Контроллеры Sylius - это услуги, поэтому их следует называть в формате sylius.controller.product:createAction, а не Sylius:Product:create.

об именах пакета ресурсов услуг на основе вашего имени ресурса (app.backend.product), но именование генерируется как ...

list($prefix, $resourceName) = explode('.', $name); 

... это означает, что ваш префикс будет app и имя ресурса станет backend (products даже не включен в именование). Поскольку выход действий контроллеров ресурсов контролируется информацией о маршрутизации, на самом деле нет необходимости иметь конкретный контроллер backend. Если какие-либо действия необходимы только для бэкэнд-маршрутов, вы всегда можете создать createBackendAction, хотя, как я уже упоминал, это, вероятно, не нужно.

Смежные вопросы