Я использую 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);
}
}
одиночный.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, он вернет ошибку
Trying to get property of non-object (View: /Users/jesseburger/myproject/resources/views/blog/single.blade.php)
Я смог проверить, что он извлекает пустой массив с помощью print_r($post), но не могу понять, почему.
print_r($post) получается:
Illuminate\Database\Eloquent\Collection Object ( [items:protected] => Array ( ) )
Текущий маршрут:
Route::get('blog/{slug}', [
'as' => 'blog.single',
'uses' => 'BlogController@getSingle'
])->where('slug', '[\w\d\-\_]+');
Вы действительно должны реализовать что-то, что обрабатывает, когда сообщение не найдено. Тогда вам даже не нужно было бы print_r, вы бы знали, что есть Post.
Я попробовал оба предложения, но все еще тянет пустой массив






Ваш оператор возврата неверен, вам нужно изменить эту строку:
return view('blog.single')->withPost($post);
Для этого он должен решить вашу проблему.
return view('blog.single')->with('post', $post);
его ответ «Свойство [название] не существует в этом экземпляре коллекции». после реализации withPost в with('post', $post)
Можете ли вы проверить содержимое $post в вашем представлении с помощью print_r($post);
это просто загрузка пустой страницы
Illuminate\Database\Eloquent\Collection Object ( [items:protected] => Array ( ) ) Это то, что его отбрасывает
Попробуйте: Post::where('slug', $slug)->first(); вместо Post::where('slug', '=', $slug)->first();
загружается совершенно пустая страница
Как вы вызываете функцию?
Я могу print_r($slug), но если я попытаюсь вытащить $title или $body, это выдаст неопределенную ошибку
А вы уверены, что есть запись, соответствующая запросу?
в лезвии я называю это в двух местах. первый в @section('title', "| $post->title") Второй в теле с использованием {{ $post->title }}
Да, у меня есть две записи со слагами в моей БД, и я могу вызвать их в другом месте, только не с этого контроллера.
Вы получаете слаг из URL-адреса?
Добавляйте свои маршруты в пост
Вот мой маршрут: Route::get('blog/{slug}', ['as' => 'blog.single', 'uses' => 'BlogController@getSingle'])->where('slug', '[\w\d\-_]+');
Я следую руководству DevMarketer по созданию блога с помощью Laravel, и это видео 24 в этой серии. Просто чтобы вы знали, откуда я
Не знаю как, но он решил начать работать! Я ненавижу, когда это происходит, потому что я не могу увидеть ошибку и, следовательно, не могу научиться ее предотвращать...
Странно, ха-ха, добро пожаловать в мир программирования :). Рад, что у тебя получилось.
Сначала вы отлаживаете свой слаг, а не свой пост. Попробуйте отладить свой пост, чтобы увидеть, был ли он найден. Вы получаете эту ошибку, потому что сообщения вообще не существует. Прервать, если он не существует.
if (!$post){
abort(404);
}
Является ли
withPostфункцией в Laravel? Может попробоватьreturn view('blog.single')->with('post', $post);илиreturn view('blog.single', ['post' => $post]);.