【问题标题】:Validating multiple checkboxes laravel 5.2验证多个复选框laravel 5.2
【发布时间】:2016-07-27 01:10:48
【问题描述】:

我正在尝试验证我的 Laravel 应用程序中的复选框。复选框的 HTML 名称和值是从我的数据库生成的,我正在循环显示所有框。如何执行验证规则,以便至少选中或需要一个框?这些是我的刀片文件中的相关视图代码和我的控制器中的方法。

//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-&gt;name? 谢谢

【问题讨论】:

  • 尝试通过Log::error() 方法查看$request-&gt;all() 的输出...您将看到根据您的复选框名称,数组中将有多个项目..您需要循环该数组并分别验证每个字段。

标签: php validation laravel checkbox laravel-5.2


【解决方案1】:

与其创建具有角色名称的复选框,不如创建具有静态名称的复选框,例如roles[]。我修改了你的代码,看看。还添加了附加到用户的角色(我假设您已经在User 模型中拥有roles 关系)。

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

【讨论】:

  • 感谢它部分工作的答案。现在,即使我在提交表单后只选择了一个复选框,也会自动选中两个复选框。有没有办法解决这个问题?
  • 抱歉,在脚本中留下了一个小错误:{{ Form::checkbox('roles', $role-&gt;id) }} 应该是 {{ Form::checkbox('roles[]', $role-&gt;id) }}。然后,如果角色 ID 为控制器,您将发布数组,它应该可以按您的意愿工作。
猜你喜欢
  • 2016-09-17
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多