Caleb Oki
Caleb Oki

Reputation: 675

Validating multiple checkboxes laravel 5.2

I am trying to validate checkboxes in my Laravel application. The HTML name and values of the checkbox are generated from my database and I am doing a loop to display all the boxes. How do I do a validation rule so that at least one box is checked or required? These are the relevant view code from my blade file and the method from my controller.

//Snippet from create-user.blade.php
<div class='form-group'>
    @foreach ($roles as $role) //$role variable gets its data from the db
    {{ Form::label('role', $role->display_name) }}
    {{ Form::checkbox($role->name, $role->id) }}
    @endforeach
</div>

//Snippet from UserController.php
public function addUser(Request $request)
{

    $this->validate($request, [
        'name'=>'required|max:120|alpha_dash',
        'email'=>'required|email|unique:users',
        $role->name =>'required', //This line results in 'Undefined variable: role'
        'password'=>'required|min:4',
        'password_confirmation'=>'required|min:4']
    );
    $email = $request['email'];
    $name = $request['name'];
    $password = bcrypt($request['password']);
    $user = new User();
    $user->email = $email;
    $user->name = $name;
    $user->password = $password;
    $user->save();

    return redirect()->route('account');
}

What do I pass in place of $role->name in the validation array? Thanks

Upvotes: 3

Views: 11611

Answers (1)

Giedrius Kiršys
Giedrius Kiršys

Reputation: 5314

Instead of creating checkbox with name of role, better create checkbox with static name like roles[]. I modified your code, have a look. Also added roles attach to user (I assuming You already have roles relationship in User model).

//Snippet from create-user.blade.php
<div class='form-group'>
    @foreach ($roles as $role) //$role variable gets its data from the db
    {{ Form::label('roles', $role->display_name) }}
    {{ Form::checkbox('roles[]', $role->id) }}
    @endforeach
</div>

//Snippet from UserController.php
public function addUser(Request $request)
{
    $this->validate($request, [
            'name'                  => 'required|max:120|alpha_dash',
            'email'                 => 'required|email|unique:users',
            'roles'                 => 'required',
            'password'              => 'required|min:4',
            'password_confirmation' => 'required|min:4'
        ]
    );
    $email          = $request['email'];
    $name           = $request['name'];
    $password       = bcrypt($request['password']);
    $user           = new User();
    $user->email    = $email;
    $user->name     = $name;
    $user->password = $password;
    $user->save();

    //attach roles
    $user->roles()->sync($request->input('roles',[]));

    return redirect()->route('account');
}

Upvotes: 2

Related Questions