我有一个来自post请求的多维数组。它看起来像这样:$request['bags'][1]['fruits']
。有时,此值不存在,因此返回Undefined Index错误。
$model->fruits = $request['bags'][1]['fruits'];
如果我在控制器中使用isset guard,可以:
$model->fruits = isset($request['bags'][1]['fruits'];) ? $request['bags'][1]['fruits'] : '';
$model->save();
现在,我想将它包装在一个函数中,这样我就可以使用nullable($fruits)
之类的东西来完成这项工作。
现在,我尝试将其包装在辅助方法中;所以我创建了Helper.php并在里面添加了这个方法:
function nullable($value) {
return (isset($value)) ? $value : '';
}
但是在我的控制器中,当我调用nullable()
时,它会抛出Undefined Index错误。
nullable($request['bags'][1]['fruits']); // Undefined Index
isset($request['bags'][1]['fruits']) ? $request['bags'][1]['fruits'] : ''; // works
答案 0 :(得分:3)
您遇到的问题是,一旦请求未定义的索引,就会抛出 Undefined Index Notice 。只要您在使用nullable($request['bags'][1]['fruits'])
调用辅助函数时想要访问密钥后面的值,就会发生这种情况。值提取然后发送到函数。
您可以做的是使用PHP中的null coalesce operator ??
。
$model->fruits = $request['bags'][1]['fruits'] ?? '';
如果您真的想要创建自己的辅助函数,则需要以某种方式进行,因为当参数转移到函数时不会访问该字段。
这可以通过从您想要访问的密钥中扩展数组来实现。
function nullable(array $array, ...$keys) {
$current = $array;
foreach($keys as $key) {
if (!isset($current[$key])) {
return NULL;
}
$current = $current[$key];
}
return $current;
}
然后拨打nullable($request, 'bags', 1, 'fruits');
答案 1 :(得分:0)
您可以使用condition? true : false :
意思是:
$model->fruits = $request['bags'][1]['fruits'] ? $request['bags'][1]['fruits'] : '';
或者:
$model->fruits = $request['bags'][1]['fruits'] ?? '';