我有一个laravel应用程序,允许用户向书中添加评论。
我的路线是:
Route::get('/books/{book}/addreview', 'ReviewController@create');
Route::post('books/{book}/review', 'ReviewController@store');
我的评论控制器看起来像:
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');
}
但是,我得到了'Undefined variable:book'-所以我没有找到当前的Book ID。如何找到当前的图书ID并将其传递给视图?
答案 0 :(得分:1)
在审核控制器中:
Event e1 e2 e3
user_id
28 50.0 55.0 0.0
32 0.0 16.0 0.0
33 0.0 0.0 18.0
在视图中:
public function create(Book $book) {
return view('reviews.create', compact('book'));
}
答案 1 :(得分:0)
您必须发送数据才能查看。
public function create(Book $book) {
return view('reviews.create', ['book' => $book]);
}
答案 2 :(得分:0)
您没有向视图传递任何东西,您需要显式传递数据给它,以便可以使用它:
return view('reviews.create', ['book' => $book]);
然后,您可以使用$book->id
来访问书的ID:
Book ID is {{ $book->id }}.
答案 3 :(得分:0)
// 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}}
答案 4 :(得分:0)
您应该添加
public function store(Request $book)
代替
公共功能商店(Book $ book)
因为您没有共享图书请求文件。