[英]laravel post -> controller
我不明白為什么下面的代碼不起作用:
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'; 線。
您能幫我解決一下嗎?
基本上,您不能使用對象類型$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()]);
你的問題就在這里
if ($errorsss == null)
$errorsss = 'none';
如果$errorsss
是一個空數組,則$errorsss == null
將返回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()]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.