Hello World!
我有一个小问题,我不知道如何解决。我尝试了一些东西,但没有任何效果。错误看起来像这样:
未定义变量:发布(查看:../ 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);
}
这是视图代码的一部分:
<!-- Main Content -->
<div class="container" id="load-data">
<div class="row">
<div class="col-lg-8 col-md-10 mx-auto">
@foreach($posts as $post)
<div class="post-preview">
<a href="{{ url('blog/posts/'.$post->slug) }}" role="button">
<h2 class="post-title">
{{ $post->title }}
</h2>
<h3 class="post-subtitle">
{{ $post->desc }}
</h3>
</a>
<p class="post-meta">Posted on {{ date('F j, Y', strtotime($post->created_at)) }}</p>
</div>
<hr> @endforeach
</div>
</div>
</div>
还有路线:
Route::prefix('/blog/posts')->group(function () {
Route::get('/', 'BlogController@index')->name('posts'); });
谢谢您的回答!
答案 0 :(得分:1)
Laravel有两种主要的方式将数据(变量)从Controller发送到View。如他们的文档(https://laravel.com/docs/5.8/views)所述,第一种方法是将和链接到视图功能。
return view('blog.posts.post')->with('post', $post);
您可以根据需要随意链接和,但是如果您需要向视图发送大量变量,这并不是很干净。如@ Ben96所指出的,更受欢迎的方法是使用PHP的 compact 函数(https://www.php.net/manual/en/function.compact.php)作为 view 函数的第二个参数。 compact 本质上是将一串变量名及其键和值转换为一个关联数组,从而可以在视图中使用它们。