我刚开始学习Laravel 5,我想知道如何正确地处理提交的表格。我发现了许多教程,在这些教程中我们创建了两个单独的操作,第一个呈现表单,第二个实际处理表单。我来自Symfony2,我们为两者创建一个单独的操作,呈现和处理提交的表单,所以我想知道我需要创建两个单独的操作,因为那就是Laravel-way,或者我可以将所有的逻辑都放在单个操作中,我这样做就像折叠一样,但是我不喜欢编写我得到的代码:
public function create(Request $request)
{
if (Input::get('title') !== null) {
$v = Validator::make($request->all(), [
'title' => 'required|unique:posts',
'content' => 'required',
]);
if ($v->fails()) {
return redirect()->back()->withErrors($v->errors());
}
$post = new Post(Input::all());
if ($post->save()) {
return redirect('posts');
}
}
return view('add_post');
}有人能给我个建议吗?我需要怎样做好这件事?谢谢!
发布于 2015-05-18 08:59:18
创建两个操作的最重要原因之一是避免重复表单提交。您可以阅读更多关于后/重定向/获取模式的内容。
另一个重要的原因是你保持代码更干净的方式。看一看第一个变化:
public function showForm(){
return view('add_post');
}
public function create(Request $request)
{
$v = Validator::make($request->all(), [
'title' => 'required|unique:posts',
'content' => 'required',
]);
if ($v->fails()) {
return redirect()->back()->withErrors($v->errors());
}
$post = new Post(Input::all());
if ($post->save()) {
return redirect('posts');
}
return redirect()->route('show_form')->withMessage();
}您可以注意到的第一件事是,create()函数没有呈现任何视图,而是用于管理创建逻辑(如名称本身所示)。这是可以的,如果您计划保持低调,但当您确实需要添加一些其他验证,甚至更好的情况下,重新利用代码在其他控制器。例如,您的表单是发布评论的帮助工具,您希望只允许“作者排序”的用户进行评论。这一考虑可以更容易地管理,在特定操作中分离代码,而不是制作一个if-if意大利面。再一次..。
public function showForm(){
return view('add_post');
}
public function create(PublishPostRequest $request)
{
$post = new Post($request->all());
$post->save()
return redirect('posts');
}看看PublishPostRequest请求是如何在适当的函数中发生的。最后,为了充分利用Laravel 5,您可以创建一个请求类,以便将与验证和授权相关的所有代码保存在其中:
class PublishPostRequest extends Request{
public function rules(){
return [
'title' => 'required|unique:posts',
'content' => 'required',
]
}
public function authorize(){
$allowedToPost = \Auth::user()->isAuthor();
// if the user is not an author he can't post
return $allowedToPost;
}
}自定义请求类的一个好处是,一旦通过函数参数注入控制器,它就会自动运行,因此不需要担心$v->fails()。
https://stackoverflow.com/questions/30298336
复制相似问题