2016-04-06 4 views
1

Я пытаюсь проверить флажки в моем приложении Laravel. Имя HTML и значения этого флажка генерируются из моей базы данных, и я делаю цикл, чтобы отображать все поля. Как сделать правило проверки, чтобы по крайней мере один флажок был установлен или требуется? Это соответствующий код представления из моего файла клика и метод из моего контроллера.Проверка нескольких флажков laravel 5.2

//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'); 
} 

Что мне передать вместо $role->name в массиве проверки? Thanks

+0

Try, чтобы увидеть выход '$ request-> все()' 'с помощью Log :: Ошибка()' метод ... вы увидите, что на основании ваших имен CheckBox будет несколько пунктов в array..you нужно закодировать этот массив и проверить каждое поле отдельно. – Rash

ответ

0

Вместо создания флажка с именем роли лучше создать флажок со статическим именем, например roles[]. Я изменил ваш код, посмотрю. Также добавлены роли для пользователя (я предполагаю, что у вас уже есть roles отношение в модели User).

//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'); 
} 
+0

Спасибо, что ответ сработал частично. Теперь оба флажка проверяются автоматически, даже когда я выбираю только один, после отправки формы. Есть ли способ обойти это? –

+0

Извините, оставил небольшую ошибку в скрипте: '{{Form :: checkbox ('role', $ role-> id)}}' должен быть '{{Form :: checkbox ('role []', $ role- > id)}} '. Затем вы будете выставлять массив, если роли ids для контроллера, и он должен работать так, как вы хотите. –

Смежные вопросы