Я не могу понять, почему этот код ниже не работает:
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.
Я получаю: "Недопустимое смещение строки" email ""
Что относится к $ 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 == null вернет истину, если $errorsss - пустой массив.
Итак, что происходит: в одной итерации вашего цикла 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()]);
}
Можете ли вы предоставить print_r вашего массива сообщений.