У меня есть в 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');
}
}
Я интегрировал контроллеры в текст.






Ваша ошибка в том, что вы пытаетесь отобразить одно и то же представление двумя разными методами контроллера. Обычно представление используется только одним методом контроллера. Другие методы могут перенаправлять на этот метод, чтобы (повторно) отображать одно и то же представление. Таким образом, логика получения данных для представления требуется только в одном месте.
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}!");
Можете ли вы показать нам код вашего контроллера, который вы используете в настоящее время? Лучше всего подходит для обоих методов: тот, который отображает ваше представление, и тот, который обрабатывает отправку формы.