Php 为什么我经常会犯这样的错误?

Php 为什么我经常会犯这样的错误?,php,laravel,variables,laravel-blade,Php,Laravel,Variables,Laravel Blade,你好,世界 我有一个小问题,我不知道如何解决它。我试过一些东西,但没有效果。错误如下所示: 未定义变量:post(视图:../resources/views/blog/posts/index.blade.php) 这是我在控制器中的代码: <?php public function index() { $posts = Post::orderBy('created_at','ASC')->paginate(15); return view('blog.posts.i

你好,世界

我有一个小问题,我不知道如何解决它。我试过一些东西,但没有效果。错误如下所示:

未定义变量:post(视图:../resources/views/blog/posts/index.blade.php)

这是我在控制器中的代码:

<?php

public function index() {
    $posts = Post::orderBy('created_at','ASC')->paginate(15);
    return view('blog.posts.index')->withPosts($posts);
}

public function post($slug) {

    // Fetch from the database based on slug.
    $post = Post::where('slug', '=', $slug)->first();

    // Return the view and pass the post object.
    return view('blog.posts.post')->withPost($post);
}

Laravel有两种主要的方式将数据(变量)从控制器发送到视图。第一种方法,如他们的文档()中所述,是将链接到view函数

return view('blog.posts.post')->with('post', $post);

您可以使用
链接,但如果您需要向视图发送大量变量,这并不十分干净。正如@Ben96所指出的,更为普遍接受的方法是使用PHP的compact函数()作为view函数的第二个参数compact本质上是将一个变量名字符串转换为一个带有键和值的关联数组,从而允许在视图中使用它们。

除非您试图在
foreach
之外使用
$post
,否则您不应该得到该错误,假设这是抛出错误的代码,在控制器
返回视图('blog.posts.index',compact('posts')中更改它@lagbox你是对的。我在
foreach()
之外使用了
$post
。如果循环运行(有需要迭代的记录),将有一个
$post
变量可用,因为循环定义了它,但是如果没有记录(没有需要迭代的内容),将永远不会定义
$post
变量。。。最好不要直接依赖于在循环外部为foreach定义的变量