#php #laravel
Вопрос:
Когда я пытаюсь включить домашнюю страницу из Pages/home, переменные из контроллера не передаются, и у меня возникает эта ошибка
$data_news не определен, Сделайте переменную необязательной в шаблоне блейда. Замените {{ $data_news }} на {{ $data_news ?? » }}
, но когда я возвращаюсь на домашнюю страницу просмотра, я вижу все данные
Контроллер
public function pages()
{
$data_news = DB::table('post')
->orderBy('id', 'DESC')
->limit(6)
->get()
->toArray();
return view('Pages.home', compact('data_news'));
}
Маршрут
Route::get('/home', 'NewsController@pages', function () {
return view('Pages/home');
});
Основной файл, в который включена домашняя страница
<body>
@include('Pages/home')
Комментарии:
1. Почему вы добавляете
@include
в поле зрения ? если вы хотите передать данные в другой блейд :@include('Pages/home' , ['data_news' => $data_news])
и изменить маршрут наRoute::get('/home', [AppHttpControllersNewsController::class, 'pages'])
2. Не работает на меня
Ответ №1:
Вы не должны определять функцию закрытия, когда указываете на контроллер в своем маршруте. Измените это, как показано ниже:
Route::get('/home', 'NewsController@pages');
Примечание для laravel 8: Вы должны поместить полное пространство имен вашего класса контроллера в свои маршруты, так как оно не определено в том RouteServiceProvider
виде, в каком оно было в laravel ниже версии 8.
Route::get('/home', [AppHttpControllersNewsController::class, 'pages']);
Передача параметра непосредственно в представление
Вы можете воспользоваться преимуществами view composer, как это описано здесь:
public function pages()
{
$data_news = DB::table('post')
->orderBy('id', 'DESC')
->limit(6)
->get()
->toArray();
View::composer('Pages.home',function (IlluminateViewView $view) use($data_news) {
$view->with('data_news', $data_news);
});
return view('Pages.home', compact('data_news'));
}
Комментарии:
1. В чем ваша проблема? У вас есть какая-то конкретная ошибка?
2. Да, смотрите вверх $data_news является переменной от контроллера, и когда я включаю домашнюю страницу в файл главной страницы, у меня возникает исключение ошибки $data_news не определен
3. Я поставил полное пространство имен.
<?php use IlluminateSupportFacadesRoute; use AppHttpControllersNewsController; Route::get('/', function () { return view('Templates/weball'); }); Route::get('/home', 'NewsController@pages');
4. Я также добавил view composer, измените
@include('Pages/home')
на@include('Pages.home')
5. Результат тот же, теперь я пытаюсь использовать @yield, но это не работает для меня, я получаю сайт без каких-либо данных