【问题标题】:Routes are not working, variable from controller are coming up as undefined路由不起作用,来自控制器的变量未定义
【发布时间】:2020-06-25 07:30:08
【问题描述】:

后控制器

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'); 引起的。

【问题讨论】:

  • 您确定从Posts 表中获取变量吗?
  • 所以通过添加这个 Route::get('/home', 'PostController@index');在 Route::resource('posts','PostController');索引功能似乎正在工作。这不应该用 Route::resource('posts','PostController');
  • 在哪里你得到这个错误? PostController@index 显示 home.bladeHomeController@index 也是如此。您的HomeController 中是否设置了$posts
  • homecontroller 里面什么都没有
  • @HaseebAhmed 哪个控制器用于检索帖子? PostController 或 HomeController。

标签: php laravel routing laravel-routing


【解决方案1】:

试试这个,而不是你给的 for 循环

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

【讨论】:

    【解决方案2】:

    尝试替换

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

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

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

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

    【讨论】:

    • 你能确认你正在点击这个控制器吗? public function index() { dd('预期的控制器正在执行'); $posts=发布::all();返回视图('home')->with('posts', $posts); }
    【解决方案3】:

    在你的控制器中改变

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

    换刀

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

    【讨论】:

    • {{ $post['content'] }} 改变这个。
    • 当“$posts 未定义”时会有什么帮助?
    • return view('home')-&gt;with('posts', $posts);
    • {{ $post['content'] }} 或 {{ $post->content }}
    【解决方案4】:

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

    第一个:

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

    家庭控制器:

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

    第二个

    您在web.php 中使用了resource 方法,因此您的“PostController” URL 以posts 开头,但您使用了/home。 所以像这样改变你的路线:

    web.php

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

    【讨论】:

    • @HaseebAhmed 您使用了哪种方法?第一个或第二个。
    • 看起来这是个问题,在主页上检索帖子是个坏主意?
    • @HaseebAhmed 你说得对,第二种方法更准确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2012-06-19
    相关资源
    最近更新 更多