资讯专栏INFORMATION COLUMN

在 Laravel 中优雅处理 Form 表单

Stardustsky / 3104人阅读

摘要:原文在开发应用的时候,通常都会涉及到表单的处理,针对如何优雅处理和复用的表单,下面是小小的人生经验使用虽然写原生的代码可读性确实高了,但是其实还是会带给我们很多的便利,比如在使用和的时候。

原文:https://www.codecasts.com/blo...

在开发 Laravel 应用的时候,通常都会涉及到表单的处理,针对如何优雅处理和复用 Laravel 的 Form 表单,下面是小小的人生经验:

使用 Form Package

虽然写原生的 HTML 代码可读性确实高了,但是其实 Form Package 还是会带给我们很多的便利,比如在使用 Form::model()Form::select() 的时候。

想象这样一个例子:我们需要添加或者更新用户的用户名

我们可以设计类似这样的代码和目录结构:

// 位于 resources/views/users/edit.blade.php
{!! Form::model($user, ["route" => ["users.update", $user->id], "method" => "put"]) !!}
    @include("users._form")
    // Your cancel / update buttons
{!! Form::close() !!}

// 位于 resources/views/users/_form.blade.php
{!! Form::label("name", "Name") !!} {!! Form::text("name") !!}

上面的 Form 生成的 HTML 代码大概是这个样子:

注意在 Form::model() 方法中,我们之间传递了 $user 变量,这也就是说:如果 $user 存在 name 属性的值,表单就会自动填充该值,都不用我们手动写。

第二点就是,既然我们是要传递 $userForm::model() 中,我们可以在控制器中使用这样的小技巧:

class UserController extends Controller
{
    public function create()
    {
        return view("users.create", ["user" => new User]);
    }

    public function edit(User $user)
    {
        return view("users.edit", ["user" => $user]);
    }
}

这样的话,你在编辑和新增的时候都不会存在冲突,编辑更新的时候有 name 的值,新增的时候就不用有 name 的值。所以我们可以把整个 Form 表单写成类似下面这个:

// 位于 resources/views/users/_form.blade.php
name) }}" class="form-control">

这样就大功告成啦!

最后

还是那句话:在表单处理的时候还是可以考虑一下 Form Package ,特别是你在处理