2017-04-26 65 views
1

我有一個控制器與許多方法,我傳遞給參數。我希望收到一些數據作爲迴應(取決於我通過的參數)。我正在嘗試使用symphony的@QueryParam來驗證傳入的值,因爲它們中的一些是必需的。FOSRestBundle QueryParam返回值,如果不通過

可能有超過1個參數通過,但第一位的,sponsorId,是必要的,如果不通過我想返回類似「錯誤:ID沒有設定」

目前我不使用@ QueryParam和我使用這樣的事情:

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

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

這很簡單,我只是返回錯誤信息,如果我沒有得到參數。 但我如何使它與@QueryParam一起工作?如果驗證失敗,我怎麼說它返回一個特定的值?

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

回答

1

在這種情況下,您可以通過使用symfony ParamFetcher類來手動完成。

在您的控制器的輸入參數添加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. 
} 

您也可以使用requirementsnullable參數與驗證您輸入的任何PHP正則表達式,如果沒有有效的給錯誤。像這樣:

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是假的,當正則表達式不匹配輸入,參數只是跳過。