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

Я работаю с Laravel 4.1, чтобы создать приложение для списка книг с пользовательскими отношениями. У меня есть отношения с пользователем, однако, когда я добавил разбивку на страницы, я получаю следующее Исключение ошибки:

ErrorException Trying to get property of non-object (View: /app/views/books/index.blade.php) return link_to_route('user.books.show', $book->title, [$book->user->username, $book->id]); 

Ошибка возникает из представления (book / index.blade.php), но исключение ошибки фактически происходит от помощника (см. Ниже).

Helpers.php - строка 11 генерирует ошибку

Контроллер – ЧАСТИЧНЫЙ

 public function show($id) { $book = Book::findOrFail($id); return View::make('books.show', compact('book')); } } 

Мой файл маршрута

настроен так, чтобы адрес был USERNAME> BOOKS> BOOK_ID:

 #Books Controller Route::resource('books', 'BooksController'); Route::get('books/{id}', 'BooksController@show')->where('id', '\d+'); //Books ID Rerouting - USERNAME -> BOOK -> Book ID Route::get('{username}/books', 'UserBooksController@index'); Route::get('{username}/books/{id}', ['as' => 'user.books.show', 'uses' => 'UserBooksController@show']); 

Вот где я получаю ошибку – она ​​больше не распознает

 user.books.show 

books / index.blade.php файл

  @foreach(array_chunk($books->getCollection()->all(), 3) as $row) <div class="row"> @foreach ($row as $book) <div class="col-md-4"> <div class="thumbnail"> <img data-src="{{ $book->image }}" alt=""> <div class="caption"> <h3>{{ link_to_book($book) }}</h3> <p>{{ $book->synopsis }} </p> <p><a href="{{ link_to_book($book) }}" class="btn btn-primary" role="button">Buy Now</a></p> </div> </div> </div> @endforeach </div> </div> @endforeach {{ dd(Request::only('1')) }} {{ $books->appends(Request::only('1'))->links() }} 

HELPER FILE

 <?php function link_to_book(Book $book) { return link_to_route('user.books.show', $book->title, [$book->user->username, $book->id]); } 

У меня была такая же проблема, и я решил это. Чтобы получить доступ к элементам в массиве, используйте нотацию массива: $book['image']

$book->image – это объектная нотация, которая может использоваться только для доступа к атрибутам и методам объекта. попробуй это:

  @foreach(array_chunk($books->getCollection()->all(), 3) as $row) <div class="row"> @foreach ($row as $book) <div class="col-md-4"> <div class="thumbnail"> <img data-src="{{ $book['image'] }}" alt=""> <div class="caption"> <h3>{{ link_to_book($book) }}</h3> <p>{{ $book['synopsis'] }} </p> <p><a href="{{ link_to_book($book) }}" class="btn btn-primary" role="button">Buy Now</a></p> </div> </div> </div> @endforeach </div> </div> @endforeach {{ dd(Request::only('1')) }} {{ $books->appends(Request::only('1'))->links() }} 

Это должно решить проблему. По его словам, вы вызываете не-объект таким образом, который должен использоваться только для объектов. Дайте мне знать, если это сработает.

Попробуйте получить gettype ($ book), если вы получите нуль в любой точке

 {{$book['image']}} //will not complain about it but gives output "" {{$book->image}} //will complain about it and throws an exception 

Я думаю, это и есть причина

Я использую laravel5, но я думаю, что это то же самое с laravel4