【问题标题】:Symfony routing with params with specific structure带有特定结构参数的 Symfony 路由
【发布时间】:2020-01-14 11:05:15
【问题描述】:
symfony中可以这样声明路由吗
/somestuff/{query}
query 的结构在哪里
string-with-minus-id000001
我希望能够将第一部分作为控制器中的属性,将第二部分作为 id。将路线定义为
/somestuff/{name}-id{id}
没用
【问题讨论】:
-
-
-
-
您当然可以使用正则表达式来验证 string-with-minus-id000001 但我认为没有任何东西可以为您解析它。即使parameter conversion 功能也可能无济于事。您可能可以使用请求控制器侦听器进行解析并将名称和 id 注入请求对象。然后是用于生成 url 的类似内容。我想即使客户错了,他们也必须永远是对的。
标签:
php
regex
symfony
routing
【解决方案1】:
如果结构总是这样
/somestuff/{name}-id{id}
获取 name 和 id 的通用方法是
/**
* @Route("/somestuff/{slug}")
*/
public function someAction(Request $request, $slug)
{
$reversed = strrev($slug);
$paramArray = explode('-', $reversed, 1); // limit
$id = strrev($paramArray[0]);
$name = strrev($paramArray[1]);
// rest of code
}
【解决方案2】:
我在注释中找到了一种方法,这是答案:
@Route(
"/somestuff/{name}-id{id}",
methods={"GET"} ,
name="route_name",
defaults={"name"=""},
requirements={"name"=".*?", "id"="\d+"}
)