【发布时间】:2020-10-20 07:09:29
【问题描述】:
我有一个扩展 ResourceController 的自定义控制器,我正在尝试创建一个自定义操作 public function redeemAction(Request $request): Response
namespace App\Controller;
use Sylius\Bundle\ResourceBundle\Controller\ResourceController;
class OrderPointsController extends ResourceController
{
public function redeemAction(Request $request): Response {
}
}
这是我在 sylius_shop.yaml 中的路线
app_shop_account_redeem_points:
path: /account/points/redeem
methods: [POST]
defaults:
_controller: app.controller.order_points:redeemAction
还有resource.yaml:
sylius_resource:
resources:
app.order_points:
classes:
model: App\Entity\Order\OrderPoints
repository: App\Repository\OrderPointsRepository
当我通过 POST 访问路由时,我收到此错误:
URI“/account/points/redeem”的控制器不可调用: 类上的预期方法“redeemaction” “Sylius\Bundle\ResourceBundle\Controller\ResourceController”,你有没有 意思是“createAction”、“deleteAction”、“indexAction”?
我知道资源控制器应该执行 CRUD 操作,但一些核心 Sylius 文件也调用自定义操作:
sylius_shop_cart_summary:
path: /
methods: [GET]
defaults:
_controller: sylius.controller.order:summaryAction
_sylius:
template: "@SyliusShop/Cart/summary.html.twig"
form: Sylius\Bundle\OrderBundle\Form\Type\CartType
.
namespace Sylius\Bundle\OrderBundle\Controller;
class OrderController extends ResourceController
{
public function summaryAction(Request $request): Response
{
$configuration = $this->requestConfigurationFactory->create($this->metadata, $request);
$cart = $this->getCurrentCart();
if (null !== $cart->getId()) {
$cart = $this->getOrderRepository()->findCartById($cart->getId());
}
if (!$configuration->isHtmlRequest()) {
return $this->viewHandler->handle($configuration, View::create($cart));
}
$form = $this->resourceFormFactory->create($configuration, $cart);
$view = View::create()
->setTemplate($configuration->getTemplate('summary.html'))
->setData([
'cart' => $cart,
'form' => $form->createView(),
])
;
return $this->viewHandler->handle($configuration, $view);
}
...
}
有没有办法在扩展资源控制器的自定义控制器中调用除预定义 CRUD 操作之外的其他操作?
【问题讨论】: