在symfony的控制器

时间:2016-06-13 09:41:22

标签: symfony

我有一个处理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请求。

3 个答案:

答案 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 ..
}