路由不起作用,来自控制器的变量未定义

时间:2020-03-13 09:21:39

标签: php laravel routing laravel-routing

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');

@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 个答案:

答案 0 :(得分:2)

有两种方法可以做到这一点:

第一个:

如果要将HomeController用于/home路由,请在HomeController中添加以下代码。

HomeController:

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

第二个

您在resource中使用了web.php方法,因此您的'PostController'URL从posts开始,但是您已经使用了/home。 因此,请像这样更改您的路线:

web.php

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

答案 1 :(得分:1)

在您的控制器中按下

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

更换刀片

@foreach($posts as $post)
    {{ $post['content'] }}
@endforeach

答案 2 :(得分:0)

尝试使用此方法,而不是为循环赋予的功能

@foreach($posts as $post)
    {{ $post->content}}
@endforeach

答案 3 :(得分:0)

尝试更换

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

使用

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

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

<p>{{ optional($post)->content }}</p>
相关问题