Переопределение контроллера ресурсов

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

Я создал свой собственный маршрут создания в методе класса configRoutes класса администратора. Я хочу вызвать наш контроллер ресурсов (который будет использоваться для обработки всех объектов продукта) методами 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',
)
)
);
}

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

введите описание изображения здесь

Мой 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,

Пакет ресурсов называет сервисы на основе вашего имени ресурса (app.backend.product) но именование генерируется как …

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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]