我有一个处理GET请求的控制器。我需要为GET请求设置需求参数,例如:' http://localhost/site/main?id=10&sort=asc
我的控制器类
class IndexController extends Controller {
` /**
* @Route
* (
* "/site/main",
* name="main"
* )
*
* @Method("GET")
*/
public function mainAction(Request $request)
{
return new Response('', 200);
}
}
我怎么能这样做?
UPD:我需要设置URL参数的要求,比如 id:" \ d +", 排序:" \ w +" 等等。 与symfony相同,允许使用POST请求。
答案 0 :(得分:3)
您可以在" @ Route"中指定要求。这样的注释:
class IndexController extends Controller {
` /**
* @Route
* (
* "/site/main",
* name="main",
* requirements={
* "id": "\d+",
* "sort": "\w+"
* })
* )
*
* @Method("GET")
*/
public function mainAction(Request $request)
{
return new Response('', 200);
}
}
答案 1 :(得分:0)
@Method就是您所需要的http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/routing.html#route-method
如果您尝试在POST时使用此路线,则会有404
答案 2 :(得分:0)
我无法理解你的问题。 但是,如果你需要的是为GET方法参数设置一个过滤机制,因为它已经可以使用路由需求用于URL,我认为在路由组件中没有准备好使用这个工具,如注释{{ 3}}。
我必须自己做这种工作并使用它。我希望它也能帮助你
public function indexAction(Request $request)
{
// Parameter names used in the current request
$current_request_params=array_keys($request->query->all());
// $ALLOWED_INDEX_PARAMS should be declared as Class static property array and hold names of the query parameters you want to allow for this method/action
$unallowed_request_params=array_diff($current_request_params,PersonController::$ALLOWED_INDEX_PARAMS);
if (!empty($unallowed_request_params))
{
$result=array("error"=>sprintf("Unknown parameters: %s. PLease check the API documentation for more details.",implode($unallowed_request_params,", ")));
$jsonRsp=$this->get("serializer")->serialize($result,"json");
return new Response($jsonRsp,Response::HTTP_BAD_REQUEST,array("Content-Type"=>"application/json"));
}
// We are sure all parameters are correct, process the query job ..
}