2017-04-26 15 views
1

私はパラメータを取得する多くのメソッドを持つコントローラを持っています。そして、私は(私が渡すパラメータに応じて)対応していくらかのデータを受け取ることを期待しています。私はシンフォニーの@QueryParamを使用して、その中のいくつかが必要であるために入力値を検証しようとしています。FOSRestBundle Queryparamが渡されない場合の戻り値

あり必要であり、その渡されない場合、私はのようなものを返したいより1つの渡されたパラメータが、最初の1、sponsorId、よりかもしれ「ERROR:idが設定されていない」は現在私が使用していない

@それは私がパラメータを取得しない場合、私はちょうど、エラーメッセージを返す、シンプルで

public function getSponsorById(Request $request) 
{ 
    if(!$args['sponsorId']) { 
    return 'ERROR: id is not set'; 
    } 

    ..... 
    $sponsor = ..... 
    return $sponsor; 
} 

:QueryParamと私はこのようなものを使用します。 しかし、@QueryParamとどのように連携させるには?検証に失敗した場合、特定の値を返すにはどうすればよいですか?あなたはsymfonyのParamFetcherクラスを使用して手動でそれを行うことができます。この場合

/** 
* @QueryParam(name="sponsorId", default="", strict=true) 
*/ 
public function getSponsorById(Request $request) 
{ 
    ..... 
    $sponsor = ..... 
    return $sponsor; 
} 

答えて

1

。お使いのコントローラ入力引数で

ParamFetcher $ paramFetcherを追加します。

use FOS\RestBundle\Request\ParamFetcher; 

... 

/** 
* @QueryParam(name="sponsorId", default="", strict=true) 
*/ 
public function getSponsorById(Request $request, ParamFetcher $paramFetcher) 
{ 
    $sponsorId = $paramFetcher->get('sponsorId'); 

    // Logic to validate $sponsorId and give it default value if not valid. 
} 

また、あなたの入力を検証任意のPHPの正規表現パターンとrequirementsnullableパラメータを使用し、有効でない場合はエラーを与えることができます。このような:

use FOS\RestBundle\Request\ParamFetcher; 

... 

/** 
* @QueryParam(name="sponsorId", nullable=true, default="", requirements="\d+", strict=true) 
*/ 
public function getSponsorById(Request $request, ParamFetcher $paramFetcher) 
{ 
    $sponsorId = $paramFetcher->get('sponsorId'); 
    // Your code. 
} 

正規表現が入力に一致していないセットとして真、strict場合、RestBundleがエラーをスローし、strictが偽だった場合、正規表現が入力に一致していないとき、パラメータは単にスキップ。

関連する問題