php - 在 Sylius 的 ResourceController 中创建自定义操作
问题描述
我有一个自定义控制器扩展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”的控制器不可调用:类“Sylius\Bundle\ResourceBundle\Controller\ResourceController”上的预期方法“redeemAction”,您的意思是“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 操作?
解决方案
我在 resource.yaml 中缺少控制器:
sylius_resource:
resources:
app.order_points:
classes:
model: App\Entity\Order\OrderPoints
repository: App\Repository\OrderPointsRepository
controller: App\Controller\OrderPointsController
推荐阅读
- selenium - 等到 CustomKeywords 中的操作完成后再继续,Katalon Studio
- javascript - 如何用 HTML 和 CSS 分离 2 个 flex 块?
- react-native - 无法识别的令牌'<'反应原生
- reactjs - React 从 Prop 获取函数结果
- roblox - 如何在 Roblox 中制作一个给你积分的块
- javascript - 谷歌脚本中是否有现有方法来检查 A1 符号是否在第二个 A1 符号的范围内
- sql - 检查结果中的双精度,如果没有,则删除另一个表中的行
- for-loop - 使用 for /F 循环进行 CPU 查询的批处理文件
- go - AWS Lambda Go 函数在通过 API GW 调用时未获取请求正文
- c# - 动态添加点击事件不起作用