Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel 5 - Validate Multiple Request

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)

like image 597
Charles Follet Avatar asked May 25 '15 17:05

Charles Follet


1 Answers

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']
like image 140
lukasgeiter Avatar answered Oct 05 '22 01:10

lukasgeiter