Я работаю с 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), но исключение ошибки фактически происходит от помощника (см. Ниже).
Контроллер – ЧАСТИЧНЫЙ
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