在我的控制器页面中,我试图从模式返回所有数据以进行查看。我将所有数据保留在变量中,并传递到视图页面。当我将变量名保留为$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
答案 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'));