2017-02-08 134 views
0

我现在有几个验证规则如下:Laravel验证

\Route::post("/logError", "[email protected]"); 

//In LogController 
public function logError(Request $request) { 
    $rules = [ 
     "name" => "required", 
     "message" => "required", 
     "level" => "in:info,debug,error" 
    ]; 

    $this->validate($request,$rules); 
    // Log the message or do whatever 
}); 

这工作正常输入,比如

[ "name"=>"Not found", "message" => "Element not found", "level" => "error" ] 
[ "name"=>"Not found", "message" => "Element not found" ]` 

但是它抛出像

[ "name"=>"Not found", "message" => "Element not found", "level" => "randomgibberish" ] 
为输入异常

我的问题是,因为“级别”是可选的,是否有内置的方式来验证输入,并删除opt从它不是有效的元素,而不是抛出一个验证异常?如果不是,我将不得不重写控制器验证方法来实现这一点?

+0

忽略无效输入是一个滑坡。考虑客户端的错字,发送'错误'级别。抑制水平可以使错误隐藏多年,使维护复杂化。如果仍然是你的意图,输入卫生设施不应与验证相结合。我会将规则和getValidationErrors()的结果传递给sanitiser,并在那里修改请求。 –

+0

@AlexBlex我想问题是消毒输入和验证输入纠缠在我脑海中(可能是因为PHP中的filter_var'可以同时执行这两个操作)。我会试着从我的头上解开它们(然后我的代码)。 – apokryfos

回答

1

验证程序不会修改请求输入数据,您需要在控制器中创建某种中间件或函数来检查输入参数,并将它们与您希望Laravel检查的中间件或函数进行比较。

所以,是的,我认为你需要扩展验证方法,或者尝试一个只有这样的辅助函数。