Ошибка Laravel 5.8 при попытке получить свойство id не-объекта - PullRequest
1 голос
/ 24 мая 2019

Я разрабатываю приложение с помощью Laravel 5.8.В моем приложении у меня есть контроллер, который обрабатывает статьи, и это работает.Я хочу отображать информацию о себе таким образом, чтобы пользователь мог щелкнуть ссылку и просмотреть детали статьи.Для этого я создал новый контроллер a с новым пространством имен для функции, показывающей, что мое перенаправление навигации на другой странице не фокусируется на том, что он находится в пути или URL с Laravel 5.8.Ниже приведена функция.

namespace App\Http\Controllers\Cybernaut;

use App\History;
use App\Http\Controllers\Controller;

class HistoryController extends Controller
{
    public function show($id)
    {
        $history = History::find($id);

        return view('show_history', compact('history'));
    }
}

На уровне домашней страницы я хотел, чтобы мои ссылки были такими:

   <li><a data-hover="history"  href="{{route('history.show',$history→id)}}"><span>history</span></a></li>

Ошибка

ErrorException (E_ERROR) Свойство [id] не существует в этом экземпляре коллекции.(Представление: C: \ laragon \ www \ venome \ resources \ views \ layouts \partal \ header.blade.php)

А вот маршрут, используемый для функции show.

Route::group(['namespace'=>'cybernaut'], function (){
    Route::get('/history/{slug}','HistoryController@show')->name('history.show');
});

Попробуйте после изменения того, что у меня есть, на уровне маршрута.

Route::get('/', 'FrontController@index')->name('index');
Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');
Route::get('/admin/dashboard', 'DashboardController@index')->name('admin.dashboard');
Route::group([], function () {
    Route::get('/history', 'HistoryController@index')->name('history.index');
    Route::get('/history', 'HistoryController@create')->name('history.create');
    Route::get('/history/edit', 'HistoryController@update')->name('history.update');
    Route::get('/history', 'HistoryController@destroy')->name('history.destroy');
});

Route::group(['namespace' => 'cybernaut'], function () {
    Route::get('/history/{history}', [
        'as' => 'show',
        'uses' => 'HistoryController@show'
    ]);
});

На уровне домашней страницы я хотел разместить свою ссылку, как здесь, сейчас;

@foreach($history as $history)
    <li><a data-hover="history" href="{{url('/history/'.$history->id)}}"><span>history</span></a></li>
@endforeach

У меня есть эта ошибка сейчас:

Попытка получить свойство 'id' не-объекта (Представление: C: \ laragon \ www \ venome \ resources \ views\ layouts \ absolute \ header.blade.php)

Я хочу, чтобы интернавтор мог перемещаться между страницами.

Ответы [ 2 ]

2 голосов
/ 24 мая 2019

На вашей домашней странице имеется конфликт переменных.

@foreach($history as $history)

должно быть

@foreach($histories as $history)

, где в вашем FrontController заполняется $ историй.

$histories = History::all();

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

0 голосов
/ 24 мая 2019

Ошибка возникает из-за того, что find() возвращает NULL, если модель не найдена.

find ($ id) берет идентификатор и возвращает одну модель. Если нет подходящей модели существует, возвращает ноль.

findOrFail ($ id) берет идентификатор и возвращает одну модель. Если нет соответствия модель существует, выдает ошибку.

В вашем show() методе,

Изменение:

    $history = History::find($id);

До:

    $history = History::findOrFail($id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...