php – 检查POST请求是否有空字段的Laravel方法是什么?

要求是更新用户角色.角色可以为空(留空),一个或多个,如表单字段roles []中所提供.

这是视图形式:

@foreach ($roles as $role)
  <div class="checkbox">
     <label><input name="roles[]" type="checkbox" value="{{$role->id}}" {{ $user->roles->contains($role->id) ? 'checked' : '' }}>{{$role->name}}</label>
  </div>
@endforeach

UserController :: update()中的条件是:

if ($request->roles) {
    // update user roles
}

除了一个案例,一切正常.有时用户必须没有任何角色.

if($request-> roles),isset($request-> roles)和!empty($request-> roles)..都给出了相同的老式回复(null,”,true / flase ).

案例:当分配了一个或多个角色时:

  +request: ParameterBag {#41 ▼
    #parameters: array:6 [▼
      "_method" => "PUT"
      "_token" => "a8oIPQFBMbhjanikX8v83qeOcfRE0N4UKTcTQDig"
      "name" => "New User Name"
      "email" => "newuser@testserver.asap"
      "password" => ""
      "roles" => array:2 [▼
        0 => "2"
        1 => "3"
      ]
    ]
  }

案例:当没有分配角色或需要删除(分离)先前分配的角色时:

  +request: ParameterBag {#41 ▼
    #parameters: array:5 [▼
      "_method" => "PUT"
      "_token" => "a8oIPQFBMbhjanikX8v83qeOcfRE0N4UKTcTQDig"
      "name" => "New User Name"
      "email" => "newuser@testserver.asap"
      "password" => ""
    ]
  }

所以问题(要求)是:

如何区分HTML Post表单的字段值是否已提交为空(在此处未选中)或视图表单中是否存在此类字段?
在Laravel中是否有一种雄辩的方法来从Request对象中查找/列出表单文件?

[PS:尝试另一个隐藏的领域或做一些前端jQuery将不被赞赏]

解决方法:

您需要在应用程序的设计中识别此问题.

How to differentiate when the field value of an HTML Post form has been submitted as empty(unchecked here) or if there was no such a field in the view form? Is there an eloquent* way in Laravel to find/list the form fileds from the Request object?

该形式何时不应该有角色[]字段?您应该有一个标记,告诉您的应用程序该表单没有roles []字段.

类似的是,当普通用户更新他/她的个人资料时使用此表单时,他/她将无法更新他/她的角色.

因为您的问题确实是表单的默认行为,如本问题所述:Submit an HTML form with empty checkboxes

因此,对于没有角色字段和具有角色字段的表单的不同过程的表单,将存在不同的过程.

要添加到您的实现,您可以检索角色字段,如下所示:

$roles = $request->input('roles', []);

之后,您可以使用同步到模型的关系方法.

$user->roles()->sync($roles);
上一篇:PHP之post请求


下一篇:使用 HttpWebRequest 类做 POST 请求没有应反