首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理提交表格的Laravel 5

处理提交表格的Laravel 5
EN

Stack Overflow用户
提问于 2015-05-18 08:25:14
回答 1查看 1.6K关注 0票数 0

我刚开始学习Laravel 5,我想知道如何正确地处理提交的表格。我发现了许多教程,在这些教程中我们创建了两个单独的操作,第一个呈现表单,第二个实际处理表单。我来自Symfony2,我们为两者创建一个单独的操作,呈现和处理提交的表单,所以我想知道我需要创建两个单独的操作,因为那就是Laravel-way,或者我可以将所有的逻辑都放在单个操作中,我这样做就像折叠一样,但是我不喜欢编写我得到的代码:

代码语言:javascript
复制
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');
}

有人能给我个建议吗?我需要怎样做好这件事?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-18 08:59:18

创建两个操作的最重要原因之一是避免重复表单提交。您可以阅读更多关于后/重定向/获取模式的内容。

另一个重要的原因是你保持代码更干净的方式。看一看第一个变化:

代码语言:javascript
复制
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意大利面。再一次..。

代码语言:javascript
复制
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,您可以创建一个请求类,以便将与验证和授权相关的所有代码保存在其中:

代码语言:javascript
复制
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()

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30298336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档