【问题标题】:Trying to get property 'id' of non-object in Laravel 8试图在 Laravel 8 中获取非对象的属性“id”
【发布时间】:2021-03-27 05:40:57
【问题描述】:

我有一页帖子。我添加了一个编辑图标,这样当我单击它时,它应该会显示编辑页面。但是,当我单击时,它会显示错误。

刀片/形状

<form method="POST" action="{{ route('post.update', 
    ['id'=>$post->id]) }}" enctype="multipart/form-data">
    @csrf

路线

Route::get('post/edit/{id}', 'PostController@edit')
    ->name('post.edit');

以下是 PostController 内部的edit() 方法。

public function edit($id)
{
    $post = Post::find($id);

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

【问题讨论】:

  • 您确定$post 不为空吗?尝试使用 findOrFail() 而不是 find(),如果该 ID 未返回记录,则会出现 404。您可以在控制器中使用 dd($post) 或在视图中使用 @dd($post) 来查看实际传入的内容。

标签: laravel http-status-code-404 laravel-8


【解决方案1】:

如果您传递的 id 不存在,请尝试使用 findOrFail 抛出 404。

public function edit($id)
{
    $post = Post::findOrFail($id);
    return view('posts.edit')->with('post', $post);
}

或者在路由中绑定模型

Route::get('post/edit/{post}', 'PostController@edit')->name('post.edit');
public function edit(Post $post)
{
    return view('posts.edit', compact('post'));
}

【讨论】:

  • 我刚刚尝试了您的解决方案,但我得到了 404 |未找到,就像$post 为空,但我有 2 个帖子,因为我有一个名为 index 的视图,它显示了我登录的用户的所有帖子,然后我单击编辑图标并显示404,所以我认为我的索引视图有问题
  • 如果在控制器中添加dd(Post::get()); 会发生什么?两个帖子都收到了吗?他们的身份证呢?
  • 我在index() 方法中添加了dd(Post::get());,我得到了两个带有ID的帖子这是它的数组中的帖子元素之一:#attributes: array:9 [▼ "id" =&gt; 8 "user_id" =&gt; 1 "title" =&gt; "streets" "content" =&gt; "blablablablablablablablablablablablablabla" "photo" =&gt; "uploads/posts/1608063920bg-prgm-wall_1.jpg" "slug" =&gt; "streets" "deleted_at" =&gt; null "created_at" =&gt; "2020-12-15 20:25:20" "updated_at" =&gt; "2020-12-15 20:25:20" ]
  • 这些 id 和你在 url 中结尾的一样吗?
  • 是的,它看起来像这样:http://127.0.0.1:8000/post/edit/id?9 我认为 url 应该是这样的:http://127.0.0.1:8000/post/edit/9
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 2020-06-26
  • 2018-07-03
  • 2021-06-04
  • 1970-01-01
  • 2019-03-27
  • 2020-10-21
相关资源
最近更新 更多