针对表单提交的Symfony URL参数验证

时间:2014-07-25 22:53:04

标签: php symfony

当我创建表单时,我正在设置上面的URL,并希望在用户提交表单时收到相同的URL。现在,如何在我的控制器中检查上面的URL是否完整?有坏人搞砸网址!例如虽然期待21我可能会意外地得到69!

FORM

<form
action="/local/sym/web/app_dev.php/brands/independent/update/process/21"
name="brands"
method="post">

ROUTER条目:

pattern:  /brands/independent/update/process/{id_from_url}

CONTROLLER方法

public function processAction(Request $request, $id_from_url)
{
   if ($id_from_url != ?????)
   {
       exit('You are a bad guy!');
   }
}

1 个答案:

答案 0 :(得分:0)

第一种方式

routing.yml

store_product_brands:
    pattern:  /brands/independent/update/process/{id}
    defaults: { _controller: StoreBundle:Products:brand }
    methods:  [POST]
    requirements:
        id: \d+

通过这种方式,如果您输入以下内容,Symfony会抛出异常:

/brands/independent/update/process/not_a_number

No route found for "POST /brands/independent/update/not_a_number"

第二种方式

在您的控制器中

public function processAction(Request $request, $id)
{
   if (!is_numeric($id))
   {
       throw $this->createNotFoundException('Brand does not exists.');
   }

   $brand = $this->getDoctrine()
            ->getRepository('StoreBundle:Brands')
            ->findOneById($id);

   if (!$brand) 
   {
        throw $this->createNotFoundException('Brand does not exists.');
   }

   // ..
}

通过这种方式,您可以更好地控制要向用户显示的内容

您还必须customize your error pages