php - 在控制器 Symfony 中排除字符串 url
问题描述
我希望我的控制器适用于除 url 'abc' 之外的所有内容。
/**
* @Route(path="/api/{url}", name="test", requirements={"url"=".+"})
*/
public function index(string $url)
{
...
}
如何转换正则表达式 url"url"=".+"
以便它可以发送给除“abc”之外的所有人?
解决方案
requirements 选项定义了路由参数必须匹配才能匹配整个路由的PHP 正则表达式。
在您的情况下,您希望允许除特定字符串之外的所有内容。
^((?!abc).)*$
如果您不希望您的 url 参数包含字符串,只需使用常规正则表达式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(?!abc\b)\w+
:
/**
* @Route(path="/api/{url}", name="test", requirements={"url"="\b(?!abc\b)\w+"})
*/
public function index(string $url)
{
//allow foo
//allow bar
//block abc
//allow fooabc
//allow barabc
}
请注意,您还可以添加更多单词\b(?!foo|bar\b)\w+
:
推荐阅读
- json - 离子 Json 嵌套
- linux - MacOS /dev/null 权限被拒绝
- angular - 角度 4 选择框和禁用按钮
- image - 图片不在 Flatlist 中渲染,但在打开 modal 时出现
- amazon-web-services - 创建多个 AWS EBS 卷并使用 Terraform 将其附加到实例
- c - 做'&&'和'||' 位于运算符优先级的同一行还是在不同的行?
- node.js - 如何将 Windows 证书存储中的证书添加到节点发布请求
- java - 使用 Tanuki Service Wrapper 包装 Spring Boot 应用程序
- vbscript - 测试完全自动化 - 等待对象加载的问题
- php - PHP将sql查询存储在数组中,使用数组索引访问每一列