尽管有否定断言,但用否定环视定义的路由与路由匹配
route defined with negative lookaround matches the route despite the negative assertion
我们想打开一个 DELETE
端点,允许调用所有正整数,但不能调用 id 1(也就是不能删除元素 1)
通常打开一个允许正整数的端点我这样配置路由
delete_elements:
path: /elements/{id}
methods: ["DELETE"]
controller: app.elements_delete
requirements:
id: '\d+'
对于这种情况,我尝试将正则表达式更改为不允许数字 1 的正则表达式
delete_elements:
path: /elements/{id}
methods: ["DELETE"]
controller: app.elements_delete
requirements:
id: /^(?!(?:1)$)\d+/
但是当我修改需求并调用端点时,响应是端点不存在。
"No route found for "DELETE /elements/59": Method Not Allowed (Allow: GET, PUT)"
那个正则表达式有什么问题?禁止某些值的正确方法是什么?
试试:
id: '^(?!1/?$)\d+'
问题是路由被重定向到 Symfony 中以 /
结尾的 URL。所以你原来的否定前瞻不起作用,因为它正在寻找 1
后跟“字符串结尾”($
)。
通过将 /?
添加到正则表达式,您表示负前瞻可以是 1$
或 1/$
虽然这可行,但我的建议是在应用程序级别处理此问题,并且 return 当有人试图删除他们不允许删除的内容时出现 403,而不是 return 404 这意味着不同的东西。
我们想打开一个 DELETE
端点,允许调用所有正整数,但不能调用 id 1(也就是不能删除元素 1)
通常打开一个允许正整数的端点我这样配置路由
delete_elements:
path: /elements/{id}
methods: ["DELETE"]
controller: app.elements_delete
requirements:
id: '\d+'
对于这种情况,我尝试将正则表达式更改为不允许数字 1 的正则表达式
delete_elements:
path: /elements/{id}
methods: ["DELETE"]
controller: app.elements_delete
requirements:
id: /^(?!(?:1)$)\d+/
但是当我修改需求并调用端点时,响应是端点不存在。
"No route found for "DELETE /elements/59": Method Not Allowed (Allow: GET, PUT)"
那个正则表达式有什么问题?禁止某些值的正确方法是什么?
试试:
id: '^(?!1/?$)\d+'
问题是路由被重定向到 Symfony 中以 /
结尾的 URL。所以你原来的否定前瞻不起作用,因为它正在寻找 1
后跟“字符串结尾”($
)。
通过将 /?
添加到正则表达式,您表示负前瞻可以是 1$
或 1/$
虽然这可行,但我的建议是在应用程序级别处理此问题,并且 return 当有人试图删除他们不允许删除的内容时出现 403,而不是 return 404 这意味着不同的东西。