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

时间:2018-07-04 06:50:33

标签: 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 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

查看页面代码

@extends('layouts.app')

@section('content')
<h1>this is index page.</h1>
@if(count($post) > 1)
    <h2>testing</h2>

@else
    <p>No Data</p>
@endif

@endsection

当我将变量名更改为$ posts时,它可以正常工作。为什么我必须保持与发布第一个参数相同的变量名?

return view('posts.index')-> with('posts', $posts);  // it works fine

3 个答案:

答案 0 :(得分:5)

由于使用了方法,因此您传递了with('variableName', $variable'),并且在视图中可以使用$variableName变量

更改您的控制器

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

然后查看

@if(count($posts) > 1)

或者您可以更改控制器

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

然后查看

@if(count($post) > 1)

答案 1 :(得分:4)

在发送变量以在此处以$posts的形式查看:

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

在视图 posts.index 中使用@if(count($post) > 1)

如果您要使用$post作为变量,请以->with('post', $post);的形式发送

答案 2 :(得分:3)

如果您转到

  

/vendor/laravel/framework/src/Illuminate/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'));