Laravel 检查 POST 请求是否有字段留空的方法是什么?
What is the Laravel way to check if the POST Request has a field left empty?
要求是更新用户角色。角色可以为空(留空)、一个或多个,如表单字段 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 表单的字段值已提交为空(此处未选中)或视图中是否没有此类字段表格?
是否有 eloquent* 方法 Laravel 到 find/list 从 Request
对象提交的表单?
[PS: 尝试另一个隐藏字段或做一些前端 jQuery 将不被赞赏]
您可以使用 laravel 请求方法 has()
或 filled()
,has
检查参数是否存在,filled
检查参数是否存在 和填充:
if ($request->has('roles')) {
//
}
或
if ($request->filled('roles')) {
//
}
检查 Laravel documentation 以获取有关从请求对象检索输入的更多详细信息。
编辑
由于您使用的是 Laravel 5.2,因此适用以下规则:
has()
方法检查参数是否存在 和 已填充。
exists()
方法检查参数是否存在。
查看存储库 the code 了解更多信息。
为此你有 validations,似乎你需要 roles
字段为 required
和 exists
(映射到某个 table )
你只需要通过 artisan 命令制作验证器并将其注入控制器方法,查看文档。
例如:
php artisan make:request MyCustomRequest
然后你应该有一个请求文件:App\Http\Requests
您需要如上所述设置验证规则:
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class MyCustomRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'rules' =>'required|exists:tour_roles_table,id'
];
}
}
然后你可以用你想要的方法注入它:
class UserController extends Controller {
[...]
public function update(MyCustomRequest $req)
{
[...]
//at this point validation was successfull, by default Laravel will redirect back with error messages, which can be customized in your request object
}
[...]
}
您需要在应用程序的设计中确定此问题。
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[]
字段?您应该有一个标记,告诉您的应用程序此表单没有 roles[]
字段。
比如,当普通用户更新 his/her 个人资料时使用此表单,he/she 将无法更新 his/her 角色。
因为你的问题确实是表单的默认行为,正如这个问题中所回答的:Submit an HTML form with empty checkboxes
因此,没有具有角色字段的表单和具有的表单会有不同的流程角色字段。
要添加到您的实施中,您可以像这样检索角色字段:
$roles = $request->input('roles', []);
之后你可以直接使用sync
你模型的关系方法。
$user->roles()->sync($roles);
尝试 if(empty())
$check = request::get('roles');
if(empty($checkbox)){
//if checkbox have a empty value do ...
}else{
//if checkbox have not empty value do ..
}
有关详细信息,请单击 http://php.net/manual/en/function.empty.php
要求是更新用户角色。角色可以为空(留空)、一个或多个,如表单字段 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 表单的字段值已提交为空(此处未选中)或视图中是否没有此类字段表格?
是否有 eloquent* 方法 Laravel 到 find/list 从 Request
对象提交的表单?
[PS: 尝试另一个隐藏字段或做一些前端 jQuery 将不被赞赏]
您可以使用 laravel 请求方法 has()
或 filled()
,has
检查参数是否存在,filled
检查参数是否存在 和填充:
if ($request->has('roles')) {
//
}
或
if ($request->filled('roles')) {
//
}
检查 Laravel documentation 以获取有关从请求对象检索输入的更多详细信息。
编辑
由于您使用的是 Laravel 5.2,因此适用以下规则:
has()
方法检查参数是否存在 和 已填充。exists()
方法检查参数是否存在。
查看存储库 the code 了解更多信息。
为此你有 validations,似乎你需要 roles
字段为 required
和 exists
(映射到某个 table )
你只需要通过 artisan 命令制作验证器并将其注入控制器方法,查看文档。
例如:
php artisan make:request MyCustomRequest
然后你应该有一个请求文件:App\Http\Requests
您需要如上所述设置验证规则:
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class MyCustomRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'rules' =>'required|exists:tour_roles_table,id'
];
}
}
然后你可以用你想要的方法注入它:
class UserController extends Controller {
[...]
public function update(MyCustomRequest $req)
{
[...]
//at this point validation was successfull, by default Laravel will redirect back with error messages, which can be customized in your request object
}
[...]
}
您需要在应用程序的设计中确定此问题。
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[]
字段?您应该有一个标记,告诉您的应用程序此表单没有 roles[]
字段。
比如,当普通用户更新 his/her 个人资料时使用此表单,he/she 将无法更新 his/her 角色。
因为你的问题确实是表单的默认行为,正如这个问题中所回答的:Submit an HTML form with empty checkboxes
因此,没有具有角色字段的表单和具有的表单会有不同的流程角色字段。
要添加到您的实施中,您可以像这样检索角色字段:
$roles = $request->input('roles', []);
之后你可以直接使用sync
你模型的关系方法。
$user->roles()->sync($roles);
尝试 if(empty())
$check = request::get('roles');
if(empty($checkbox)){
//if checkbox have a empty value do ...
}else{
//if checkbox have not empty value do ..
}
有关详细信息,请单击 http://php.net/manual/en/function.empty.php