如何以编程方式提供Symfony路由参数?

问题描述

在这条Symfony路线中

/**
 * @Route("/board/{board}/card/{card}",name="card_show",methods={"GET"},options={})
 */
public function show(Board $board,Card $card): Response
{
    $card->getLane()->getBoard(); // Board instance
    // ...
}

由于{board}中已有参数,如何以编程方式添加{card}参数?现在,在生成显示动作的链接时,我总是需要添加两个参数。

经过研究,我发现了可以提供我所需功能的RoutingAutoBundle(https://symfony.com/doc/master/cmf/bundles/routing_auto/introduction.html#usage),但Symfony 5不再可用。

谢谢。

解决方法

好的,经过一番调查,我发现this question 导致我想到这个helpful answer

我的控制器操作(带有margin-left: 0注释)如下:

@Route

方法签名中只有一个参数(/** * @Route("/board/{board}/card/{card}",name="card_show",methods={"GET"}) */ public function show(Card $card): Response { } ),而路由中只有两个参数。

这是在树枝中调用路线的方法:

$card

由于自定义路由器,不需要path("card_show",{card: card.id}) 参数。

自定义路由器的外观如下:

board

现在,通过注入和使用卡存储库以编程方式提供缺少的参数<?php // src/Routing/CustomCardRouter.php namespace App\Routing; use App\Repository\CardRepository; use Symfony\Component\Routing\RouterInterface; class CustomCardRouter implements RouterInterface { private $router; private $cardRepository; public function __construct(RouterInterface $router,CardRepository $cardRepository) { $this->router = $router; $this->cardRepository = $cardRepository; } public function generate($name,$parameters = [],$referenceType = self::ABSOLUTE_PATH) { if ($name === 'card_show') { $card = $this->cardRepository->findOneBy(['id' => $parameters['card']]); if ($card) { $parameters['board'] = $card->getLane()->getBoard()->getId(); } } return $this->router->generate($name,$parameters,$referenceType); } public function setContext(\Symfony\Component\Routing\RequestContext $context) { $this->router->setContext($context); } public function getContext() { return $this->router->getContext(); } public function getRouteCollection() { return $this->router->getRouteCollection(); } public function match($pathinfo) { return $this->router->match($pathinfo); } } 。要启用自定义路由器,您需要在services.yaml中对其进行注册:

board

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...