Найти текущий идентификатор модели (имеет много связей) - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть приложение laravel, которое позволяет пользователям добавлять рецензии в книгу.

Мои маршруты:

Route::get('/books/{book}/addreview', 'ReviewController@create'); 
Route::post('books/{book}/review', 'ReviewController@store');

Контроллер My Review выглядит так:

public function create(Book $book) {
    return view('/reviews/create');
}

public function store(Book $book){
     $this->validate(request(),[
        'title' => 'required',
        'body' => 'required'
     ]);

     Review::create([
        'title'=>request('title'),
        'body'=>request('body'),
        'user_id'=>auth()->id(),
        'book_id'=>$book->id
     ]);
    // return redirect('/books');

}

Однако я получаю «Неопределенная переменная: книга» - поэтому я не нахожу текущий идентификатор книги.Как я могу найти текущий идентификатор книги и передать его на просмотр?

Ответы [ 5 ]

0 голосов
/ 22 сентября 2018

Вы должны добавить public function store(Request $book) вместо хранилища общедоступных функций (Book $ book)

Поскольку вы не передали файл запроса Book.

0 голосов
/ 22 сентября 2018
// here I add some custom name to this route which will help to generate
// a corresponding URL in the view by passing this name
// route('routename')

Route::get('/books/{book}/addreview', 'ReviewController@create')->name('review.create'); 
Route::post('/books/{book}/review', 'ReviewController@store')->name('review.store');

В вашем контроллере, который отображает представление review.create, вы должны передать $book, который соответствует привязке текущей модели на вашем маршруте, как это

public function create(Book $book){
    return View::make('reviews.create', ['book' => $book]);
}

и в соответствующем представлении, когда высоздать свою форму, вы должны указать атрибут action, как это

<form action={{ route('review.store', $book)}} method="post">
    {{ csrf_field}}
0 голосов
/ 22 сентября 2018

Вы должны отправить данные для просмотра.

public function create(Book $book) {
    return view('reviews.create', ['book' => $book]);
}
0 голосов
/ 22 сентября 2018

Вы ничего не передаете в представление, вам нужно явно передать в него данные, чтобы их можно было использовать:

return view('reviews.create', ['book' => $book]);

Затем, по вашему мнению, для доступа к идентификатору книги вы можете использовать$book->id:

Book ID is {{ $book->id }}.
0 голосов
/ 22 сентября 2018

В контроллере просмотра:

public function create(Book $book) {
    return view('reviews.create', compact('book'));
}

В просмотре:

{{ $book->id }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...