isEmpty()方法是否适用于$ request?

时间:2016-08-20 15:53:06

标签: php laravel laravel-5.2

是否可以使用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
{

}

3 个答案:

答案 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}}()。