доступ к содержимому базы данных на других страницах в laravel

Я получаю сообщение об ошибке:

Попытка получить свойство не-объекта

Я делаю var_dump($page), и он возвращает NULL.

Я пытаюсь следовать точно так же, как я уже сделал в проекте для сообщений, где я могу сделать {{ $post->title }}, но для страниц я получаю эту ошибку, и я не понимаю, почему (я понимаю смысл ошибки, но в контексте Я не знаю, почему это не работает для страниц, но работает для сообщений. Страница загружается, если я не пытаюсь извлечь какой-либо контент из базы данных. Я действительно не знаю, что мне не хватает.

Контроллер страниц:

namespace App\Http\Controllers;

use App\Page;
use Illuminate\Http\Request;

class PagesController extends Controller
{
    public function show($slug)
    {
        $page = Page::findBySlug($slug);
        return view('page.show', ['page' => $page]);
    }
}

Модель страницы

namespace App;

use Illuminate\Database\Eloquent\Model;

class Page extends Model
{
    public static function findBySlug($slug)
    {
        return static::where('slug', $slug)->first();
    }
}

просмотры/страница/show.blade.php

@extends('layouts.index')

@section('title', '-' . $page->title)
@section('header')
<?php //var_dump($page) ?>

<!-- Page Header -->
<header class="masthead" style="background-image: url('')">
    <div class="overlay"></div>
    <div class="container">
        <div class="row">
            <div class="col-lg-8 col-md-10 mx-auto">
                <div class="page-heading">
                    <span class="subheading">This is what I do.</span>
                </div>
            </div>
        </div>
    </div>
</header>

@stop

@section('content')

<!-- Main Content -->

    <div class="container">
        <div class="row">
            <div class="col-lg-8 col-md-10 mx-auto">
                {!! $page->body !!}
            </div>
        </div>
    </div>


@stop

маршруты:

Route::get('/', 'TrainController@index');

Route::get('/post/{slug}', 'TrainController@show');
Route::get('{slug}', 'PagesController@show');


Route::group(['prefix' => 'admin'], function () {
    Voyager::routes();
});

представления/макеты/index.blade.php:

<!DOCTYPE html>
<html lang="en">

  <head>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="">

    <title>{{ setting('site.title') }}</title>

    <!-- Bootstrap core CSS -->
    <link href="/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">

    <!-- Custom fonts for this template -->
    <link href="/vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
    <link href='https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic' rel='stylesheet' type='text/css'>
    <link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>

    <!-- Custom styles for this template -->
    <link href="/css/clean-blog.min.css" rel="stylesheet">
    <link href="/css/traintesting.css" rel="stylesheet">

  </head>

  <body>

    @include('partials.nav')
    @yield('header')


    <!-- Main Content -->
    <div class="container">
        @yield('content')
    </div>

    <hr>
    @include('partials.footer')
    <!-- Bootstrap core JavaScript -->
    <script src="/vendor/jquery/jquery.min.js"></script>
    <script src="/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>

    <!-- Custom scripts for this template -->
    <script src="/js/clean-blog.min.js"></script>

  </body>

</html>

база данных: введите здесь описание изображения введите описание изображения здесь Код для сообщений, которые работают:

Почтовая модель:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    public function author()
    {
        return $this->belongsTo(User::class,'author_id');
    }

    public static function findBySlug($slug)
    {
        return static::where('slug', $slug)->first();
    }
}

Контроллер:

namespace App\Http\Controllers;

use App\Post;
use Illuminate\Http\Request;

class TrainController extends Controller
{
    public function index()
    {
        $posts = Post::simplePaginate(2);
        return view('index', ['posts' => $posts]);
    }

    public function show($slug)
    {
        $post = Post::findBySlug($slug);
        return view('post.show',['post'=>$post]);
    }
}

views/partials/post.blade.php (используется в индексе, чтобы щелкнуть по нему, чтобы опубликовать подробности)

<div class="post-preview">
    <a href="/post/{{ $post->slug }}">
        <h2 class="post-title">
            {{ $post->title }}
        </h2>
        <h3 class="post-subtitle">
            {{ $post->excerpt }}
        </h3>
    </a>
    <p class="post-meta">Posted by
        <a href="#">{{ $post->author->name }}</a>
        on {{ $post->created_at->format('l d F, Y') }}</p>
</div>
<hr>

просмотры/сообщение/show.blade.php:

@extends('layouts.index')

@section('title', '-' . $post->title)

@section('header')
<!-- Page Header -->
<header class="masthead" style="background-image: url('/storage/{{ $post->image }}')">

    <div class="overlay"></div>
    <div class="container">
        <div class="row">
            <div class="col-lg-8 col-md-10 mx-auto">
                <div class="post-heading">
                    <h1>{{ $post->title }}</h1>
                    <h2 class="subheading">{{ $post->sub_title }}</h2>
                    <span class="meta">Posted by
                <a href="#">{{ $post->author->name }}</a>
                {{ $post->created_at->format('l d F, Y') }}</span>
                </div>
            </div>
        </div>
    </div>
</header>
@stop

@section('content')


<!-- Post Content -->
<article>
    <div class="container">
        <div class="row">
            <div class="col-lg-8 col-md-10 mx-auto">
              {!! $post->body !!}
            </div>
        </div>
    </div>
</article>

<hr>


@stop

person Dan    schedule 10.04.2018    source источник
comment
Каков результат $page = Page::findBySlug($slug); ? Вы получаете $page?   -  person Nirali    schedule 10.04.2018
comment
Ошибка кажется довольно понятной. Вы пытаетесь получить доступ к свойству переменной, которая не является объектом. Скорее всего, вы возвращаете null, когда ожидаете вернуть объект, пытаясь получить доступ к свойству. На каком номере строки находится ошибка и какие 5-10 строк вокруг этого номера ошибки. Может быть полезно получить немного больше информации об ошибке, чем читать весь код вашего проекта, не относящийся к ошибке.   -  person domdambrogia    schedule 10.04.2018


Ответы (1)


Ошибка не требует пояснений, это означает, что в БД нет записи об этом слаге, и запрос возвращает ноль. Вы добавляете условие, если запись пуста. Как ниже

if(isset($page) and count($page)>0) {
  echo $page->title 
} 

or

if(isset($page->title) and $page->title!='') {
  echo $page->title 
}
person abrar    schedule 10.04.2018