Laravel 5 在Laravel 5中验证FormRequest中的数组
我使用Ajax将表单数据发送到资源控制器(Laravel5)。但是,我将此调用作为数组发送表单字段(无直接表单字段变量) 我已经用需要验证的规则设置了一个请求 然而,这种验证的默认行为是,它只查看请求对象内的直接字段变量。例如,如果我发送:input name=“firstname”,我只需设置Laravel 5 在Laravel 5中验证FormRequest中的数组,laravel-5,laravel-validation,Laravel 5,Laravel Validation,我使用Ajax将表单数据发送到资源控制器(Laravel5)。但是,我将此调用作为数组发送表单字段(无直接表单字段变量) 我已经用需要验证的规则设置了一个请求 然而,这种验证的默认行为是,它只查看请求对象内的直接字段变量。例如,如果我发送:input name=“firstname”,我只需设置 public function rules() { return [ 'firstname' => 'required|alpha|between:1,128' ]
public function rules()
{
return [
'firstname' => 'required|alpha|between:1,128'
];
}
但是现在,如何验证请求对象中的数组?例如,如果我发送input name=“nameArray['firstname']”会怎么样
因此,我要做的是在将请求对象发送到验证之前修改它。或者也许有更好的方法来处理这个问题。我知道可以在rules方法中循环对象,如下所示:
foreach($this->request->get('nameArray') as $key => $val)
{
}
但这没有帮助,因为Laravel的验证器将使用请求对象中设置的直接字段。所以我不能改变这一点。
我想从数组中取出各个表单字段,并将它们直接放回请求对象中,这样就可以用设置规则等相同的方法进行验证
顺便说一句,我使用这种验证方法,在资源控制器中调用Request方法,在本例中,我希望在其中存储输入
public function store(CreateStudentRequest $request)
{
}
我将创建一个中间件来清理请求对象
class SanitizeMiddleware
{
/**
* Run the request filter.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// here do the sanitation needed to
// make the request object work with the validator
}
}
我可能会在它自己的类上创建环卫方法,然后通过控制器注入它以保持代码干净
如果Javascript端对您来说更容易,您也可以在Javascript端进行清洁。事实上,中间件似乎可以完成这项工作。遇到了另一个方法,其中使用新的验证器方法扩展了类请求。然而,在我看来,中间件功能就是为了实现这一点 我最终创建的类如下所示
class SanitizeFormRequest
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(isset($request['ajaxData']))
{
$input = $request['ajaxData'];
foreach ($input as $key => $value) {
$request->merge([$key => $value]);
}
}
return $next($request);
}
}
我在kernel.php中将其注册为$routeMiddleware
并适用于相关路线
Route::group(array('middleware' => ['auth', 'form.request']), function(){
谢谢