Переопределить sylius`s customerController - PullRequest
0 голосов
/ 15 октября 2018

Я нахожу базу sylius.controller.customer на Sylius\Bundle\ResourceBundle\Controller\ResourceController, мне нужно расширить этот класс, когда я посмотрел на https://docs.sylius.com/en/1.2/customization/controller.html, чтобы создать CustomerController.php в src \ AppBundle и добавить его действия вapp / config / config.yml, когда открываю мой проект в браузере, получаю эту ошибку: Cannot autowire service "AppBundle\Controller\CustomerController": argument "$metadata" of method "Sylius\Bundle\ResourceBundle\Controller\ResourceController::__construct()" references interface "Sylius\Component\Resource\Metadata\MetadataInterface" but no such service exists. Did you create a class that implements this interface?. Что со мной?

AppBundle\Controller:

namespace AppBundle\Controller;

use Sylius\Bundle\ResourceBundle\Controller\ResourceController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Sylius\Component\Resource\ResourceActions;


class CustomerController extends ResourceController
{
    public function createAction(Request $request): Response
    {
    $configuration = $this->requestConfigurationFactory->create($this->metadata, $request);

    $this->isGrantedOr403($configuration, ResourceActions::CREATE);
    $customer = $this->newResourceFactory->create($configuration, $this->factory);

    $form = $this->resourceFormFactory->create($configuration, $customer);

    if ($request->isMethod('POST') && $form->handleRequest($request)->isValid()) {
        $newResource = $form->getData();

        $event = $this->eventDispatcher->dispatchPreEvent(ResourceActions::CREATE, $configuration, $newResource);

        if ($event->isStopped() && !$configuration->isHtmlRequest()) {
            throw new HttpException($event->getErrorCode(), $event->getMessage());
        }
        if ($event->isStopped()) {
            $this->flashHelper->addFlashFromEvent($configuration, $event);

            if ($event->hasResponse()) {
                return $event->getResponse();
            }

            return $this->redirectHandler->redirectToIndex($configuration, $newResource);
        }

        if ($configuration->hasStateMachine()) {
            $this->stateMachine->apply($configuration, $newResource);
        }

        $this->repository->add($newResource);
        $postEvent = $this->eventDispatcher->dispatchPostEvent(ResourceActions::CREATE, $configuration, $newResource);

        if (!$configuration->isHtmlRequest()) {
            return $this->viewHandler->handle($configuration, View::create($newResource, Response::HTTP_CREATED));
        }

        $this->flashHelper->addSuccessFlash($configuration, ResourceActions::CREATE, $newResource);

        if ($postEvent->hasResponse()) {
            return $postEvent->getResponse();
        }

        return $this->redirectHandler->redirectToResource($configuration, $newResource);
    }

    if (!$configuration->isHtmlRequest()) {
        return $this->viewHandler->handle($configuration, View::create($form, Response::HTTP_BAD_REQUEST));
    }

    $initializeEvent = $this->eventDispatcher->dispatchInitializeEvent(ResourceActions::CREATE, $configuration, $customer);
    if ($initializeEvent->hasResponse()) {
        return $initializeEvent->getResponse();
    }

    $view = View::create()
        ->setData([
            'configuration' => $configuration,
            'metadata' => $this->metadata,
            'resource' => $customer,
            $this->metadata->getName() => $customer,
            'form' => $form->createView(),
        ])
        ->setTemplate($configuration->getTemplate(ResourceActions::CREATE . '.html'))
       ;

       return $this->viewHandler->handle($configuration, $view);
   }

}

app\config\config.yml:

sylius_customer:
   resources:
    customer:
        classes:
            controller: AppBundle\Controller\CustomerController
...