Laravel 更改变量名称时显示未定义的变量

Laravel 更改变量名称时显示未定义的变量,laravel,Laravel,在我的控制器页面中,我试图将所有数据从模式返回到视图。我将所有数据保存在一个变量中,并将其传递到视图页面。当我将变量名保留为$post时,我得到错误: Undefined variable: post (View: C:\xampp\htdocs\laravel\lsapp\resources\views\posts\index.blade.php) 控制器页 // PostController.php <?php namespace App\Http\Controllers; use

在我的控制器页面中,我试图将所有数据从模式返回到视图。我将所有数据保存在一个变量中,并将其传递到视图页面。当我将变量名保留为
$post
时,我得到错误:

Undefined variable: post (View: C:\xampp\htdocs\laravel\lsapp\resources\views\posts\index.blade.php)
控制器页

// PostController.php
<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Post;

class PostController extends Controller
{
    public function index()
    {
        $post = Post::all();   
        return view('posts.index')-> with('posts', $post);
    }
    //remaining code blocks

因为使用('variableName',$variable')传递
的方法,在视图中可以使用
$variableName
变量

更换控制器

 return view('posts.index')-> with('posts', $posts);
 return view('posts.index')-> with('post', $posts);
和视图

@if(count($posts) > 1)
@if(count($post) > 1)
或者您可以更改控制器

 return view('posts.index')-> with('posts', $posts);
 return view('posts.index')-> with('post', $posts);
和视图

@if(count($posts) > 1)
@if(count($post) > 1)

当您将变量作为
$posts
发送至此处查看时:

return view('posts.index')->with('posts', $post);
在视图中使用
@if(count($post)>1)
posts.index

如果要使用
$post
作为视图中的变量,请将其作为
->发送,并带有('post',$post)

如果您转到

/vendor/laravel/framework/src/illumb/View/View.php

你会发现这个方法。在这个类中,您可以清楚地看到这些值与要渲染的视图相关联

public function with($key, $value = null)
{
    if (is_array($key)) {
        $this->data = array_merge($this->data, $key);
    } else {
        $this->data[$key] = $value;
    }

    return $this;
}
如果你不想使用这个,这里有一个替代方案

    return view('posts.index', compact('posts'));

这是
$posts
不是
$post
所以使用
@if(count($posts)>1)
@C2486这就是我要问的,为什么我不能使用变量名作为
$post
?然后使用
->和('post',$post)谢谢你的回复。但这不是我的问题,我想知道为什么我不能使用变量名作为
$post
或任何其他变量名。因为使用('variableName',$variable'
传递
的方法,并且鉴于您可以使用
$variableName
变量如果不清楚您想说什么,请再次检查变量名
->('posts',$post);
他将它作为'posts'发送到视图中