对象值未传递

时间:2019-03-01 21:17:16

标签: mysql laravel controller laravel-blade

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

BlogController:     

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>


    @stop

我在数据库(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\-\_]+');

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

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

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