这个视频我们去创建一个评论控制器。打开命令行工具 ... 可以使用 artisan 的 controller:make 去创建这个控制器 ... 要创建的控制器可以叫它 ReviewController ...
php artisan controller:make ReviewController
完成以后,可以在 app ... controllers 这个目录下面找到它 ...
打开以后,再找到 Resource 类型的控制器里面用来处理存储内容的请求,使用的方法 ... 就是这个 store ...
因为我们不但要保存评论的内容,还要保存它跟电影内容之间的关系 ... 也就是在保存评论内容的时候,我们还得保存评论所属的电影的 id 号 ...
在提交评论以后,提交的地址里面,会包含电影的 id 号 ... 不过,如果你想在这个方法里面,得到这个电影的 id 号,需要去设置一下路由 ...
打开 app 目录下面的 routes.php ... 添加一条路由 ... Route ... 使用的 resource 方法,去给它指定一个 resource 类型的控制器 ...
在这个方法里,先设置一下这个路由处理的基本的地址 ... 应该是 movies 斜线 一组花括号 ... movie_id ... 接着一个斜线 ... 然后是 reviews ... 再把这个路由使用的控制器作为它的第二个参数传递过来 ... ReviewController ...
Route::resource('movies/{movie_id}/reviews', 'ReviewController');
这样如果说请求里面包含电影的 id ,我们就可以在控制器的方法里面,得到它 ...
store
再回到 ReviewController 控制器 ...
在 store 这个方法里,给它一个参数 .. 叫做 $movie_id ...
然后我们先去创建一个评论模型的实例 ...
$review = new Review;
再去设置一下它的 review_content 这个属性的值 ... 它的值就是用户在评论内容这个文本区域里面输入的东西 ... 可以使用 Input 类的 get 方法得到它的值 ..
$review->review_content = Input::get('review_content');
除了要保存评论内容以外,我们还得保存它跟电影内容之间的关系 ... 可以把它的 movie_id 这个属性的值,设置成请求里面发过来的 movie_id 的值 ...
$review->movie_id = $movie_id;
最后,可以使用 save 方法,保存一下 ...
$review->save();
这是一般的保存评论的方法 ...
附加
还有一种方法 ... 就是可以把评论附加到电影内容上。先注释掉前面这两行代码..
然后,先用 Movie 模型的 find 方法,找到跟这个评论相关的电影 ... 再使用它跟评论之间的关系 ... reviews() ... 然后,再用一个 save 方法 ...
在这个方法里面,把在上面创建的评论模型作为它的一个参数 ...
Movie::find($movie_id)->reviews()->save($review);
重定向
保存以后,我们可以用户带回到评论所属的电影页面上 ...
return Redirect::to('movies/' . $movie_id);
预览
保存 ... 去浏览器里预览一下 ...
在文本区域里面,输入点内容 ...
然后点击 发表评论 ... 成功以后会把用户带回到当前这个电影页面上 ...
在这里,你会看到,刚刚发布的评论内容 ....