【发布时间】:2020-07-20 14:07:46
【问题描述】:
我正在一个名为 Sylius 的框架中做一个 API,它使用 symfony 框架作为基础。 解决 API 逻辑的 API 控制器类目前无法识别我
我有一个带有各自声明的控制器:
<?php
declare(strict_types=1);
namespace EasyCommerce\ShopApiPlugin\Controller\Order;
use EasyCommerce\ShopApiPlugin\Factory\ValidationErrorViewFactoryInterface;
use EasyCommerce\ShopApiPlugin\Request\Order\CustomerOrderCancellationRequest;
use FOS\RestBundle\View\View;
use FOS\RestBundle\View\ViewHandlerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface;
final class CustomerOrderCancellationAction
{
/** @var ViewHandlerInterface */
private $viewHandler;
/** @var MessageBusInterface */
private $bus;
/** @var ValidatorInterface */
private $validator;
/** @var ValidationErrorViewFactoryInterface */
private $validationErrorViewFactory;
public function __construct(
ViewHandlerInterface $viewHandler,
MessageBusInterface $bus,
ValidatorInterface $validator,
ValidationErrorViewFactoryInterface $validationErrorViewFactory
) {
$this->viewHandler = $viewHandler;
$this->bus = $bus;
$this->validator = $validator;
$this->validationErrorViewFactory = $validationErrorViewFactory;
}
public function __invoke(Request $request): Response
{
$pickupRequest = new CustomerOrderCancellationRequest($request);
$validationResults = $this->validator->validate($pickupRequest);
if (0 === count($validationResults)) {
$this->bus->dispatch($pickupRequest->getCommand());
return $this->viewHandler->handle(View::create(null, Response::HTTP_NO_CONTENT));
}
return $this->viewHandler->handle(View::create($this->validationErrorViewFactory->create($validationResults), Response::HTTP_BAD_REQUEST));
}
}
控制器声明如下:
<service id="sylius.shop_api_plugin.controller.order.customer_order_cancellation_action"
class="EasyCommerce\ShopApiPlugin\Controller\Order\CustomerOrderCancellationAction"
>
<argument type="service" id="fos_rest.view_handler" />
<argument type="service" id="sylius_shop_api_plugin.command_bus" />
<argument type="service" id="validator" />
<argument type="service" id="sylius.shop_api_plugin.factory.validation_error_view_factory" />
</service>
我通过以下方式声明路由:
sylius_shop_api_customer_order_cancellation:
path: /orders/{tokenValue}/cancellation
methods: [PUT]
defaults:
_controller: sylius.shop_api_plugin.controller.order.customer_order_cancellation_action
它返回以下错误:
{
"code": 500,
"message": "Attempted to load class \"CustomerOrderCancellationAction\" from namespace \"EasyCommerce\\ShopApiPlugin\\Controller\\Order\".\nDid you forget a \"use\" statement for another namespace?"
}
为了测试路由是否配置正确,我将它指向另一个控制器并且它可以工作。问题出在您创建的控制器上。
【问题讨论】:
-
该代码在项目中的位置以及如何自动加载其类?
-
我可以用 composer dump-autoload 来解决它。谢谢
标签: php api rest symfony sylius