我是 Symfony 的新手。我正在尝试创建动态通用路由,它将根据部分 url 选择所需的控制器。我在文档中发现有可以在路由模式中使用的特殊参数 {_controller},但找不到任何使用示例。
// config/routes.yaml
api:
path: /api/{_controller}
因此,例如对于路线,/api/product
我希望 ProductController 被启动。但结果我收到错误“ URI 的控制器“/api/product”不可调用:控制器“产品”既不作为服务存在,也不作为类存在。 “
有人可以帮我理解 {_controller] 参数的工作原理吗?或者也许有更好的方法来指定可以动态选择控制器而不在 routes.yaml 中列出控制器名称的通用路由。
提前致谢
这并不是我认为你正在尝试做的最干净的方法。如果我假设你想/api/product/
在你的产品控制器中指出方法是正确的,那么这样的事情更像是“symfonyish”
// src/Controller/ProductController.php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/api/product", name="product_")
*/
class ProductController extends AbstractController
{
/**
* @Route("/", name="index")
* --Resolves to /api/product/
*/
public function index(): Response
{
// ...
}
/**
* @Route("/list", name="list")
* --Resolves to /api/product/list
*/
public function list(): Response
{
// ...
}
/**
* @Route("/{productID}", name="get")
* --Resolves to /api/product/{productID}
*/
public function get(string $productID): Response
{
// $productID contains the string from the url
// ...
}
}
请注意,这实际上只是触及了 Symfony 路由的表面。methods={"POST"}
您还可以在路由指令上指定诸如此类的内容;因此,您可以根据请求的类型让相同的路径做不同的事情(例如,您可以有一条路线/product/{productID}
,该路线是GET
该请求中的产品,但会根据请求更新产品PATCH
。
无论如何,这里的要点是,将所有路由都定义在其中routes.yml
并不方便,您应该将路由定义为控制器本身中的指令。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句