我无法理解为什么以下代码无效:
public function subscribe(Request $request){
$errorsss = [];
foreach ($request->input() as $key => $input){
if ($key === 'name') {
if (empty($request[$key]))
$errorsss['name'] = 'Msg 1';
}elseif($key === 'address'){
if (empty($request[$key]))
$errorsss['address'] = 'Msg 2';
}elseif($key === 'email'){
if (!filter_var($request[$key], FILTER_VALIDATE_EMAIL))
$errorsss['email'] = 'Msg 3';
}
if ($errorsss == null)
$errorsss = 'none';
}
return view('welcome', ['errorsss' => $errorsss, 'request' => $request->input()]);
这只是简单的表单提交,检查POST输入。
我得到:"非法字符串偏移'电子邮件'"
其中涉及$ errorsss [' email'] =' Msg 3&#39 ;;线。
你可以帮我解决一下吗?
答案 0 :(得分:0)
基本上你不能将对象类型$request
用作数组,如$request[$key]
您只需使用$input
代替
public function subscribe(Request $request){
$errorsss = [];
foreach ($request->input() as $key => $input){
if ($key === 'name') {
if (empty($input))
$errorsss['name'] = 'Msg 1';
}elseif($key === 'address'){
if (empty($input))
$errorsss['address'] = 'Msg 2';
}elseif($key === 'email'){
if (!filter_var($input, FILTER_VALIDATE_EMAIL))
$errorsss['email'] = 'Msg 3';
}
if ($errorsss == null)
$errorsss = 'none';
}
return view('welcome', ['errorsss' => $errorsss, 'request' => $request->input()]);
答案 1 :(得分:0)
你的问题在
行if ($errorsss == null)
$errorsss = 'none';
如果$errorsss == null
是一个空数组, $errorsss
将返回true。
所以会发生的是,在foreach
循环的一次迭代中,它会到达此行并用字符串替换$errorsss
。因此,下次迭代时,您尝试为$errorsss['email']
分配一些值。但是$erorrsss
此时是一个字符串(不再是您期望的数组),因此您会收到此错误。
快速浏览一下,最简单的解决方案就是删除该行。
或者将其移到foreach
语句之外,如下所示:
public function subscribe(Request $request) {
$errorsss = [];
foreach ($request->input() as $key => $input){
if ($key === 'name') {
if (empty($input))
$errorsss['name'] = 'Msg 1';
} elseif($key === 'address') {
if (empty($input))
$errorsss['address'] = 'Msg 2';
} elseif($key === 'email') {
if (!filter_var($input, FILTER_VALIDATE_EMAIL))
$errorsss['email'] = 'Msg 3';
}
}
if ($errorsss == null)
$errorsss = 'none';
return view('welcome', ['errorsss' => $errorsss, 'request' => $request->input()]);
}