Php Symfony 2.0路由通配符是否已消毒?
…还是我必须按以下方式对其进行消毒Php Symfony 2.0路由通配符是否已消毒?,php,symfony,Php,Symfony,…还是我必须按以下方式对其进行消毒 class RelationshipController extends Controller { ... public function deleteAction($objectId) { $objectId = filter_var($objectId, FILTER_SANITIZE_NUMBER_INT) ... 默认情况下,Symfony路由器通过以下正则表达式匹配路由参数:[^/]+。所以
class RelationshipController extends Controller
{
...
public function deleteAction($objectId)
{
$objectId = filter_var($objectId, FILTER_SANITIZE_NUMBER_INT)
...
默认情况下,Symfony路由器通过以下正则表达式匹配路由参数:
[^/]+
。所以除了/
之外的任何东西都是允许的
如果要确保$objectId
是一个整数,应定义如下路由:
my_route:
path: /my/route/{objectId}
defaults: { _controller: MyBundle:Controller:myAction }
requirements:
objectId: \d+
这样,您的$objectId
将始终是整数的字符串表示形式,因为如果Symfony与route不匹配,它将不匹配route
因此,这将与您的控制器匹配:
GET /my/route/234
这将抛出未找到的404:
GET /my/route/asd
默认情况下,Symfony路由器通过以下正则表达式匹配路由参数:
[^/]+
。所以除了/
之外的任何东西都是允许的
如果要确保$objectId
是一个整数,应定义如下路由:
my_route:
path: /my/route/{objectId}
defaults: { _controller: MyBundle:Controller:myAction }
requirements:
objectId: \d+
这样,您的$objectId
将始终是整数的字符串表示形式,因为如果Symfony与route不匹配,它将不匹配route
因此,这将与您的控制器匹配:
GET /my/route/234
这将抛出未找到的404:
GET /my/route/asd
路由点过滤器(您在YAML配置中定义-特别是[0-9]
)是为了避免自己进行过滤。所以这取决于,如果你要求路由器只匹配数字,你不必这样做。否则它将作为一个字符串进行匹配,因此需要手动执行该操作。路由点过滤器(您在YAML配置中定义的-具体地说是[0-9]
)是为了避免自己进行过滤。所以这取决于,如果你要求路由器只匹配数字,你不必这样做。否则它将作为字符串进行匹配,因此需要手动进行匹配