【问题标题】:Create custom action in ResourceController in Sylius在 Sylius 的 ResourceController 中创建自定义操作
【发布时间】: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 操作之外的其他操作?

【问题讨论】:

    标签: php symfony sylius


    【解决方案1】:

    我在 resource.yaml 中缺少控制器:

    sylius_resource:
        resources:
            app.order_points:
                classes:
                    model: App\Entity\Order\OrderPoints
                    repository: App\Repository\OrderPointsRepository
                    controller: App\Controller\OrderPointsController
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多