Laravel 5 - Validate Multiple Request

2020-06-01 08:10发布

问题:

is it possible, in Laravel 5, to validate multiple Requests in order to insert related models after a form submission?
I know how to validate multiple Model by using Validators but I want to do it with the Request Class.

Laravel 4 :

$validateUser = Validator::make(Input::all(), User::$rules);
$validateRole = Validator::make(Input::all(), Role::$rules);

if ($validateUser->fails() || $validateRole->fails()){
    $validationMessages = array_merge_recursive(
        $validateUser->messages()->toArray(),
        $validateRole->messages()->toArray()
    );
}

Laravel 5 :

Request one

class CreateUserRequest extends Request {

    public function rules()
    {
        //
    }
}

Request two

class CreateRoleRequest extends Request {

    public function rules()
    {
        //
    }
}

Controller Model call :

public function store(CreateUserRequest $request, CreateRoleRequest $request2)
{
    //
}

How can I validate the User input values and the Role input values using the Request approach? (and have a specific feedback if validation fails)

回答1:

First, using multiple form request classes works perfectly fine.


Now of course you can't just have two forms in one. However what you can do to separate your data, is to use the array syntax for field names:

<input type="text" name="user[name]" />
<!-- and later -->
<input type="text" name="role[name]" />

In your validation rules you can then use the dot syntax to reference either the user name or the role name:

public function rules(){
    return [
        'role.name' => 'required'
    ];
}

And for creating the two models, just use this to get all the attributes for user and role:

$request->input('user'); // returns an array like ['name' => 'foo', 'other-user-field' => 'bar']
$request->input('role'); // returns an array like ['name' => 'baz', 'other-role-field' => 'boom']