我是 Symfony 的新手。我正在嘗試創建動態通用路由,它將根據部分 url 選擇所需的控制器。我在檔案中發現有可以在路由模式中使用的特殊引數 {_controller},但找不到任何使用示例。
// config/routes.yaml
api:
path: /api/{_controller}
因此,例如對于路線,/api/product我希望 ProductController 被啟動。但結果我收到錯誤“ URI 的控制器“/api/product”不可呼叫:控制器“產品”既不作為服務存在,也不作為類存在。 “
有人可以幫我理解 {_controller] 引數的作業原理嗎?或者也許有更好的方法來指定可以動態選擇控制器而不在 routes.yaml 中列出控制器名稱的通用路由。
提前致謝
uj5u.com熱心網友回復:
這并不是我認為你正在嘗試做的最干凈的方法。如果我假設你想/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并不方便,您應該將路由定義為控制器本身中的指令。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/453307.html
