Symfony 路由器 {_controller} 参数

血清学

我是 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章