Symfony 2.0路由通配符是否已消毒?

Pat*_*awa 0 php symfony

...或者我必须如下消毒它们吗?

class RelationshipController extends Controller
{
    ...

    public function deleteAction($objectId)
    {
        $objectId = filter_var($objectId, FILTER_SANITIZE_NUMBER_INT)
        ...
Run Code Online (Sandbox Code Playgroud)

Igo*_*vić 6

默认情况下,Symfony Router通过以下正则表达式匹配路由参数:[^/]+.所以除了/允许之外的任何事

如果你想确保$objectId是一个整数,你应该定义一个这样的路由:

my_route:
    path: /my/route/{objectId}
    defaults: { _controller: MyBundle:Controller:myAction }
    requirements:
        objectId: \d+
Run Code Online (Sandbox Code Playgroud)

这样,您$objectId将始终是整数的字符串表示形式,因为如果不是,Symfony将不匹配路由.

所以这将匹配您的控制器:

GET /my/route/234
Run Code Online (Sandbox Code Playgroud)

这将抛出404未找到:

GET /my/route/asd
Run Code Online (Sandbox Code Playgroud)