Проблема Laravel 8 с @include и переменными из контроллера

#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, но это не работает для меня, я получаю сайт без каких-либо данных