我希望我的控制器可以为所有东西工作,除了url 'abc'。
/**
* @Route(path="/api/{url}", name="test", requirements={"url"=".+"})
*/
public function index(string $url)
{
...
}
我如何转换一个正则表达式url"url"=".+"
,使它会去每个人除了'abc'?
路由参数
requirements选项定义要路由的PHP正则表达式参数必须匹配,整个路由才能匹配。
在您的例子中,您希望允许除特定字符串之外的所有内容。
如果您不希望url参数包含字符串abc
,请使用^((?!abc).)*$
的正则表达式。
注意
abcde
或dabc
将不工作。
所以你的路线是
/**
* @Route(path="/api/{url}", name="test", requirements={"url"="^((?!abc).)*$*"})
*/
public function index(string $url)
{
//allow foo
//allow bar
//block abc
//block fooabc
//block barabc
}
如果你想允许字符串包含abc,那么改变你的正则表达式为b(?!abcb)w+
:
/**
* @Route(path="/api/{url}", name="test", requirements={"url"="b(?!abcb)w+"})
*/
public function index(string $url)
{
//allow foo
//allow bar
//block abc
//allow fooabc
//allow barabc
}
注意,您还可以添加更多的单词b(?!foo|barb)w+
: