是否可以使用isEmpty()
方法验证空字段的输入?我有一个validate($request)
,它有一个要填充的多个表单。我还有其他形式,并不是完全必需的。
控制器:
$this->validate($request,
[
'title' => 'required|regex:/(^[A-Za-z0-9 ]+$)+/|max:255',
'content' => 'required',
'category' => 'required',
'approver' => 'required',
'recipient' => 'required',
]);
$document = new Document();
$user = Auth::user();
//Request in the form
$document->title = $request->title;
$document->content = $request->content;
$document->category_id = $request->category;
$document->save();
foreach($request->recipient as $recipientId)
{
$document->sentToUsers()->sync([ $recipientId => ['sender_id' => $user->id]],false );
}
我有一个表单名称department
,不需要填写。我正在尝试检查它是否为空它会将其插入数据库。如果空了就什么都不会发生。
if(!$request->department->isEmpty())
{
foreach($request->department as $departmentId)
{
foreach(Department::find($departmentId)->users()->get() as $user1) //find the users belonging to the current department
{
$document->sentToUsers()->sync([ $user1->id => ['sender_id' => $user->id]],false );
}
}
}
else
{
}
答案 0 :(得分:2)
执行$request->field
将为您提供该字段的值,无论是字符串,数组,数字还是其他任何内容。你可以使用PHP的empty
函数在做某事之前检查它是否为空:
if (!empty($request->department)) {
// ...
}
答案 1 :(得分:1)
您始终可以使用empty()
:
if(!empty($request->department))
我猜isEmpty()
是for collection only而您正在检查Request
对象的属性:
如果集合为空,则isEmpty方法返回true;除此以外, 返回false
答案 2 :(得分:1)
正如其他答案所述,您所指的isEmpty
方法适用于集合,而您正在检查属性值。
但是,我想添加一个关于使用empty
的非常重要的注释。
在PHP中,empty
构造在语义上与!isset($thing) || !$thing
相同,因此empty($thing)
和!isset($thing) || !$thing
都会给出相同的结果。 isset
构造仅用于确定变量是否不是null
而不触发任何未定义变量错误的使用。将其与布尔真值检查相结合,得到empty
。
但这可能并不总是你所追求的。例如,在PHP中,对象在真值表中始终 true 。但是,真值表中的整数0
和空字符串""
,甚至空Array
等内容都被视为 false 。这就是为什么在您决定使用哪个之前检查truth table始终很重要。
因此,例如,零长度字符串对您来说可能是空的,但如果期望是用户提交了值isset($_POST['thing']) === true
,则它可能不为空,但是作为空字符串。< / p>
您还应该考虑<input type="checkbox">
之类的内容,如果未选中浏览器,则浏览器根本不会发送该值。或者通过HTTP,所有值最初都是字符串。因此,您可能希望使用filter_var("false", FILTER_VALIDATE_BOOLEAN)
之类的过滤器,将字符串"false"
(不会评估为empty
)转换为布尔值{{ 1}}(,)。