提问人:senty 提问时间:4/20/2018 最后编辑:senty 更新时间:4/20/2018 访问量:305
未定义的索引 - isset guard 不适用于帮助程序
Undefined Index - isset guard doesn't work with helper
问:
我有一个来自发布请求的多维数组。它看起来像这样: .有时,此值不存在,因此会返回未定义索引错误。$request['bags'][1]['fruits']
$model->fruits = $request['bags'][1]['fruits'];
如果我在控制器中使用 isset 保护,它可以工作:
$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()
nullable($request['bags'][1]['fruits']); // Undefined Index
isset($request['bags'][1]['fruits']) ? $request['bags'][1]['fruits'] : ''; // works
答:
您遇到的问题是,一旦请求未定义的索引,就会引发未定义的索引通知。只要您想在使用 调用帮助程序函数时访问键后面的值,就会发生这种情况。提取该值,然后将其发送到函数。nullable($request['bags'][1]['fruits'])
相反,您可以做的是在 PHP 中使用 null 合并运算符。??
$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');
评论
你能用吗condition? true : false :
方法:
$model->fruits = $request['bags'][1]['fruits'] ? $request['bags'][1]['fruits'] : '';
或:
$model->fruits = $request['bags'][1]['fruits'] ?? '';
评论
?:
评论
Request
$request->input('bags.1.fruits', '')
''
$request->get
array_get