【问题标题】:Object values not being passed未传递对象值
【发布时间】:2019-07-23 22:44:48
【问题描述】:

我正在使用 Laravel 5.6,但在将数据传递到我的刀片文件时遇到问题。

博客控制器:

namespace App\Http\Controllers;

use App\Mail\Practice;
use App\Mail\Mailable;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Post;
use Session;

class BlogController extends Controller
{
  public function getSingle($slug){
    // Fetch from the DB based on Slug --first stops after one, get pulls everything
  $post = Post::where('slug', '=', $slug)->first();
  print_r($slug);

  // return the view and pass in the post object
  return view('blog.single')->withPost($post);

 }
}

single.blade.php:

@extends('main')

@section('title', "| $post->title")

@section('content')


  <div class="row">
   <div class="col-md-8 col-md-offset-2">
    <h1>{{ $post->title}}</h1>
    <p>{{ $post->body }}</p>
</div>


@停止

我在数据库(MySQL)中验证了名称和拼写。如果我dd($slug)print_r($slug) 结果是正确的。

但是,如果我这样做但使用 $title$body 它会返回错误

试图获取非对象的属性(查看:/Users/jesseburger/myproject/resources/views/blog/single.blade.php)

我已经能够通过使用print_r($post) 来验证它是否拉了一个空数组,但不知道为什么。

print_r($post) 产生:

Illuminate\Database\Eloquent\Collection 对象 ([items:protected] => Array ())

当前路线:

Route::get('blog/{slug}', [
    'as' => 'blog.single', 
    'uses' => 'BlogController@getSingle'
])->where('slug', '[\w\d\-\_]+');

【问题讨论】:

  • withPost 真的是 Laravel 中的一个函数吗?也许试试return view('blog.single')-&gt;with('post', $post);,或return view('blog.single', ['post' =&gt; $post]);
  • 你真的应该实现一些在没有找到帖子时处理的东西。那么你甚至不需要 print_r,你就会知道有一个帖子。
  • 我已经尝试了这两个建议,但它仍然拉一个空数组

标签: mysql laravel controller laravel-blade


【解决方案1】:

您的return语句不正确,您需要更改此行:

return view('blog.single')->withPost($post);

对此,它应该可以解决您的问题。

return view('blog.single')->with('post', $post);

【讨论】:

  • 它回击“此集合实例上不存在属性 [title]。”实施 withPost 到 with('post', $post)
  • 你能用print_r($post);查看你视图中$post的内容吗
  • 它只是加载一个空页面
  • Illuminate\Database\Eloquent\Collection Object ([items:protected] => Array ()) 这就是它的反击
  • 尝试:Post::where('slug', $slug)-&gt;first(); 而不是 Post::where('slug', '=', $slug)-&gt;first();
【解决方案2】:

首先,您正在调试您的 slug 而不是您的帖子。尝试调试您的帖子以查看是否找到它。您收到该错误是因为该帖子根本不存在。如果不存在则中止。

if(!$post){
    abort(404);
}

【讨论】:

    猜你喜欢
    • 2019-12-02
    • 2013-08-18
    • 2013-08-20
    • 2021-04-01
    • 2018-07-20
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多