在控制器Symfony中排除字符串url



我希望我的控制器可以为所有东西工作,除了url 'abc'。

/**
* @Route(path="/api/{url}", name="test", requirements={"url"=".+"})
*/
public function index(string $url)
{
...
}

我如何转换一个正则表达式url"url"=".+",使它会去每个人除了'abc'?

路由参数

requirements选项定义要路由的PHP正则表达式参数必须匹配,整个路由才能匹配。

在您的例子中,您希望允许除特定字符串之外的所有内容。

如果您不希望url参数包含字符串abc,请使用^((?!abc).)*$的正则表达式。

注意abcdedabc将不工作。

所以你的路线是

/**
* @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+: