为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
ABOUTYOU 2021-05-06 14:13:06
当我创建一个新的帖子并点击提交时,帖子数据会验证并持久保存到数据库中,但在返回视图中会出现Undefined variable: posts (View:/Users/charles/Desktop/Development/fiestas/resources/views/backend/posts/index.blade.php)错误。因此,它说它是未定义的,但是当我清除页面并访问我的索引页面时,帖子按预期显示,没有错误。我从Rails移了过来,现在在Laravel还是很绿的。任何帮助是极大的赞赏。App / Models / Post.php<?phpnamespace App\Models;use Illuminate\Database\Eloquent\Model;class Post extends Model{    protected $guarded = [];}app / Http / Controllers / Backend / PostController.php<?phpnamespace 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');    }}
查看完整描述

2 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您的索引方法是正确的-它获取$posts变量并将其压缩到返回视图中。

但是,当您存储新帖子时,您只是在存储它,而是通过不带集合的store()方法的return语句调用同一页面视图:

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

您尚未$postsstore()方法中向视图发送集合变量,并且您的视图期望该变量在那里,因此出现错误。要修复您的store()方法,请抓住这些帖子并压缩:

$posts = Post::all();
return view('backend.posts.index', compact('posts'));


查看完整回答
反对 回复 2021-05-28
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

一种方法是在存储帖子后进行重定向。因为视图需要$posts。如果仅返回视图,它将显示错误。因此,我们可以重定向到索引函数以$posts在视图中检索并加载它。


 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 redirect()->route('index');

}


查看完整回答
反对 回复 2021-05-28
  • 2 回答
  • 0 关注
  • 139 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信