创建一个空集合在Laravel中引发错误

问题描述

我正在将集合返回到视图,并且该集合并不总是满的。但是我认为我正在从该集合访问一个值。如果给定的集合为空,则会崩溃。

所以我的想法是,如果集合为空,则用这样的键和空值在我自己中填充它。

控制器:

if ($collection->isEmpty()) {
    $collection->put('key1',"");
    $collection->put('key2',"");
    $collection->put('key3',"");
}else{

刀片:

<input type="text" class="form-control" name="key1" value="{{$collection->key1}}">

但是它一直在给我这个错误

属性[key1]在此集合实例上不存在。 (查看:C:\ xampp \ htdocs \ Laravel ...

如果我使用dd($collection) put会得到

Collection {#510 ▼
  #items: array:3 [▼
    "key1" => ""
    "key2" => ""
    "key3" => ""
  ]
}
带有dd()

$collection['key1'];甚至都不会掉进死区。

解决方法

您不能直接在集合对象上访问集合键。

相反,您必须使用如下数组访问语法:

$collection['key1']

或通过使用get这样的方法:

$collection->get('key1')

get方法的优点是,如果键未定义,则不会引发错误。 相反,它将返回默认值。通常,它是null,但是可以使用函数的第二个参数来覆盖它:

$collection->get('key1','default')

假设您使用的是PHP 7或更高版本,则可以使用Null coalescing operator实现类似的功能,

$collection['key1'] ?? 'default'

有关更多信息,请查看文档:{​​{3}}

,

Collection基本上是数组的包装器,因此您需要使用数组访问来获取基础值:

$collection['key1']

此外,不要过度使用集合。是的,它们可以通过复杂的数组操作提供很多帮助,但是它们也带来了开销。如果仅使用它来设置或访问键,请考虑使用基本数组或对象。