创建帖子后,Laravel 5.8中的“未定义变量:帖子”

当我创建一个新的帖子并点击提交时,帖子数据会验证并持久保存到数据库中,但在返回视图中会出现Undefined variable: posts (View:/Users/charles/Desktop/Development/fiestas/resources/views/backend/posts/index.blade.php)错误。


因此,它说它是未定义的,但是当我清除页面并访问我的索引页面时,帖子按预期显示,没有错误。我从Rails移了过来,现在在Laravel还是很绿的。任何帮助是极大的赞赏。


App / Models / Post.php


<?php


namespace App\Models;

use Illuminate\Database\Eloquent\Model;


class Post extends Model

{

    protected $guarded = [];


}

app / Http / Controllers / Backend / PostController.php


<?php


namespace App\Http\Controllers\Backend;


use App\Http\Controllers\Controller;

use Illuminate\Support\Facades\Auth;

use Illuminate\Http\Request;

use App\Models\Post;


class PostController extends Controller

{


    public function index(Post $post)

    {

        $posts = Post::all();

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

    }


    public function create()

    {

        return view('backend.posts.create');

    }


    ...


    public function store(Request $request)

    {

        $rules = [

            'title' => ['required', 'min:3'],

            'body' => ['required', 'min:5']

        ];

        $request->validate($rules);

        $user_id = Auth::id();

        $post = new Post();

        $post->user_id = $user_id;

        $post->title = request('title');

        $post->body = request('body');

        $post->save();


        return view('backend.posts.index');

    }

}


ABOUTYOU
浏览 140回答 2
2回答

杨__羊羊

您的索引方法是正确的-它获取$posts变量并将其压缩到返回视图中。但是,当您存储新帖子时,您只是在存储它,而是通过不带集合的store()方法的return语句调用同一页面视图:return&nbsp;view('backend.posts.index');您尚未$posts从store()方法中向视图发送集合变量,并且您的视图期望该变量在那里,因此出现错误。要修复您的store()方法,请抓住这些帖子并压缩:$posts&nbsp;=&nbsp;Post::all(); return&nbsp;view('backend.posts.index',&nbsp;compact('posts'));

Cats萌萌

一种方法是在存储帖子后进行重定向。因为视图需要$posts。如果仅返回视图,它将显示错误。因此,我们可以重定向到索引函数以$posts在视图中检索并加载它。&nbsp;public function store(Request $request){&nbsp; &nbsp; $rules = [&nbsp; &nbsp; &nbsp; &nbsp; 'title' => ['required', 'min:3'],&nbsp; &nbsp; &nbsp; &nbsp; 'body' => ['required', 'min:5']&nbsp; &nbsp; ];&nbsp; &nbsp; $request->validate($rules);&nbsp; &nbsp; $user_id = Auth::id();&nbsp; &nbsp; $post = new Post();&nbsp; &nbsp; $post->user_id = $user_id;&nbsp; &nbsp; $post->title = request('title');&nbsp; &nbsp; $post->body = request('body');&nbsp; &nbsp; $post->save();&nbsp; &nbsp; return redirect()->route('index');}
打开App,查看更多内容
随时随地看视频慕课网APP