Маршруты не работают, переменные из контроллера отображаются как неопределенные - PullRequest
1 голос
/ 13 марта 2020

PostController

public function index()
{
  $posts=Post::all();
  return view('home')->with('posts', $posts);
}

web. php

Route::get('/', function () {
  return view('welcome');
});

Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
Route::resource('posts','PostController');

home

@foreach($posts as $post)
  <p>{{$post['content']}}</p>
@endforeach

Я получаю эту ошибку

Facade\Ignition\Exceptions\ViewException

Undefined variable: posts (View: C:\xampp\htdocs\lts\resources\views\home.blade.php)

$posts не определены

Сделайте переменную необязательной в шаблоне блейда. Замените {{ $posts }} на {{ $posts ?? '' }}

Спасибо за помощь всем, я смог это исправить, добавив

Route::get('/home', 'PostController@index');  

Мне бы очень хотелось узнать, почему эта проблема возникла в первую очередь Route:: resource('posts','PostController'); должен был справиться с этим.

Ответы [ 4 ]

4 голосов
/ 13 марта 2020

Попробуйте это вместо того, что вы дали за l oop

@foreach($posts as $post)
    {{ $post->content}}
@endforeach
2 голосов
/ 13 марта 2020

Есть два способа сделать это:

Первый:

Если вы хотите использовать HomeController для /home маршрута, добавьте следующий код в HomeController.

HomeController:

public function index()
{
    $posts=Post::all();
    return view('home')->with('posts', $posts);
}

Второй

Вы использовали resource метод в web.php, так что ваш ' URL-адрес PostController начинается с posts, но вы использовали /home. Поэтому измените свой маршрут следующим образом:

В web.php

Route::get('/home', 'PostController@index')->name('home');
Route::resource('posts','PostController');
1 голос
/ 13 марта 2020

Chnage в вашем контроллере

public function index()
    {
      $posts=Post::all();
     return view('home')->with('posts', $posts);
    }

изменение вашего клинка

@foreach($posts as $post)
    {{ $post['content'] }}
@endforeach
0 голосов
/ 13 марта 2020

Попробуйте заменить

return view('home')->with('posts', $posts);

на

return view('home', ['posts' => $posts]);

и

<p>{{$post['content']}}</p>

на

<p>{{ optional($post)->content }}</p>
...