Значения объекта не передаются - PullRequest
0 голосов
/ 02 марта 2019

Я использую 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.) Если I dd($slug) или print_r($slug), результаты верны.

Однако, если я делаю то же самое, но использую $title или $body, возвращается ошибка

Попытка получить свойство необъекта (View: / Users / jesseburger/myproject/resources/views/blog/single.blade.php)

Мне удалось проверить, что он извлекает пустой массив, используя print_r($post), но не могу понять, почему.

print_r($post) выход:

Подсветка \ База данных \ Eloquent \ Collection Object ([items: protected] => Array ())

Текущий маршрут:

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

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Сначала вы отлаживаете свой слаг, а не свой пост.Попробуйте отладить свой пост, чтобы увидеть, был ли он найден.Вы получаете эту ошибку, потому что сообщение не существует вообще.Прервать, если он не существует.

if(!$post){
    abort(404);
}
0 голосов
/ 02 марта 2019

Ваше заявление о возврате неверно, вам нужно изменить эту строку:

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

К этому, это должно решить вашу проблему.

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