Сообщение laravel -> контроллер

Я не могу понять, почему этот код ниже не работает:

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'; линия.

Можете ли вы помочь мне, пожалуйста, как это исправить?

Можете ли вы предоставить print_r вашего массива сообщений.

Jaya Vishwakarma 12.04.2018 01:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
44
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

По сути, вы не можете использовать объектный тип $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()]);
}

Другие вопросы по теме