Laravel 5 在Laravel 5中验证FormRequest中的数组

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' ]

我使用Ajax将表单数据发送到资源控制器(Laravel5)。但是,我将此调用作为数组发送表单字段(无直接表单字段变量)

我已经用需要验证的规则设置了一个请求

然而,这种验证的默认行为是,它只查看请求对象内的直接字段变量。例如,如果我发送:input name=“firstname”,我只需设置

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(){
谢谢