Laravel: Как мне отправить форму и остаться в том же представлении?

У меня есть в Laravel представление, в котором уже включены циклы foreach. Внизу страницы небольшая форма. Теперь я хочу отправить эту форму, чтобы сохранить данные в базе данных.

В то же время я хочу остаться в том же виде. Если я ввожу ту же страницу в форму, я получаю сообщение об ошибке. Если я хочу вернуться к представлению через контроллер, я также получаю сообщение об ошибке.

При этой ошибке больше не работает вывод данных в цикле, который ранее был передан другим контроллером. - Что я могу сделать?

Undefined variable: data (View: /srv/users/smartfinance/apps/smartfinance/public/laravel/resources/views/home.blade.php)

  <?php $__currentLoopData = $data; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $d): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>

Я надеюсь, что вы понимаете мою проблему и можете дать мне подсказку, как ее решить.

Это два контроллера:

class checkDataController extends Controller
{
    public function data()
    {
        $data = DB::table('test')->where('booking_date', '=', $today)->get();
        return view('home', compact("data"));
    }
}

class AddContractController extends Controller
{
    public function addNewData(Request $request)
    {
        $bez = $request->bez;
        return view('home');
    }
}

Можете ли вы показать нам код вашего контроллера, который вы используете в настоящее время? Лучше всего подходит для обоих методов: тот, который отображает ваше представление, и тот, который обрабатывает отправку формы.

Namoshek 09.03.2019 22:07

Я интегрировал контроллеры в текст.

David Simon 09.03.2019 22:25
Стоит ли изучать 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 и хотите разрабатывать...
1
2
5 056
3

Ответы 3

Ваша ошибка в том, что вы пытаетесь отобразить одно и то же представление двумя разными методами контроллера. Обычно представление используется только одним методом контроллера. Другие методы могут перенаправлять на этот метод, чтобы (повторно) отображать одно и то же представление. Таким образом, логика получения данных для представления требуется только в одном месте.

class CheckDataController extends Controller
{
    // route 'check.data'
    public function data()
    {
        $data = DB::table('test')->where('booking_date', '=', $today)->get();
        return view('home', compact("data"));
    }
}

class AddContractController extends Controller
{
    // route 'contract.create'
    public function addNewData(Request $request)
    {
        Contract::create($request->input()); // unsafe, only for demonstration...

        return redirect()->route('check.data');
    }
}

Как видите, вместо return view('home') мы возвращаем redirect()->route('check.data'). Это перенаправит пользователя на другой контроллер с заданным маршрутом. Конечно, это означает, что вы на самом деле выполняете два метода контроллера в одно действие пользователя, но это обычная практика.

Дополнительную информацию о перенаправлениях можно найти в файле официальная документация.

Совет для вас, мой друг, не возвращайте представление из метода публикации.

Я предполагаю, что метод addNewData() — это метод, исходящий из почтового маршрута. поэтому, когда вы возвращаете представление после метода публикации, вы не предоставляете данные для своей страницы. поэтому laravel выдает ошибку и жалуется на отсутствующую переменную. так что вы должны сделать, это перенаправить на маршрут, который просматривает страницу. Таким образом, ваш метод будет выглядеть примерно так:

public function addNewData(Request $request)
    {
        $bez = $request->bez;
        return redirect('YOUR ROUTE TO VIEW THE PAGE (URL)');
    }

Обычно это делается путем перенаправления обратно на ту же страницу, с которой вы отправили. Вот как это будет выглядеть в вашем контроллере:

public function addNewData(Request $request)
{
    $bez = $request->bez;
    return back();
}

Для лучшего взаимодействия с пользователем вы также должны добавить сообщение в представление с формой:

@if (session('status'))
    <div class = "alert alert-success" role = "alert">
        {{ session('status') }}
    </div>
@endif

И внесите одно небольшое изменение в свой контроллер:

return back()->with('status', "Successfully submitted {$bez}!");

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