09. Laravel 4 表单

表单的起始和结束标签

<!-- app/views/form.blade.php -->
{{ Form::open(array('url' => 'our/target/route')) }}
{{ Form::close() }}

以上内容将编译为(自动加入 _token ):

<form method="POST" action="http://demo.dev/our/target/route" accept-charset="UTF-8">
    <input name="_token" type="hidden" value="83KCsmJF1Z2LMZfhb17ihvt9ks5NEcAwFoRFTq6u">
</form>

起始标签的其它用法:

自定义属性
{{ Form::open(array(
    'url' => 'our/target/route',
    'method' => 'GET',
    'accept-charset' => 'ISO-8859-1'
)) }}
请求类型 POST GET PUT DELETE 默认为 POST
{{ Form::open(array(
    'url' => 'our/target/route',
    'method' => 'DELETE'
)) }}
文件上传
{{ Form::open(array(
    'url' => 'our/target/route',
    'files' => true
)) }}
提交到命名路由
{{ Form::open(array(
    'route' => 'my_route'
)) }}
提交到指定控制器方法
{{ Form::open(array(
    'action' => 'MyController@myAction'
)) }}

表单元素

Label

{{ Form::label('first_name', 'First Name', array('class' => 'f_class')) }}

以上内容将编译为:

<label for="first_name" class="f_class">First Name</label>

Text(文本框)

{{ Form::text('first_name', 'Taylor Otwell', array('id' => 'first_name')) }}

以上内容将编译为:

<input name="first_name" type="text" value="Taylor Otwell" id="first_name">

如果有同名的 labelid 会自动补完,无需额外定义:

{{ Form::label('first_name', 'First Name') }}
{{ Form::text('first_name', 'Taylor Otwell') }}

Textarea(文本域)

{{ Form::label('description', 'Description') }}
{{ Form::textarea(‘description', 'Best field ever!') }}

Password(密码框)

{{ Form::label('secret', 'Super Secret') }}
{{ Form::password('secret') }}

Checkboxes(多选框)

{{ Form::label('pandas_are_cute', 'Are pandas cute?') }}
{{ Form::checkbox('pandas_are_cute', '1', true) }}

Radio(单选框)

{{ Form::open(array('url' => 'my/route')) }}
    {{ Form::label('panda_colour', 'Pandas are?') }}
    {{ Form::radio('panda_colour', 'red', true) }} Red
    {{ Form::radio('panda_colour', 'black') }} Black
    {{ Form::radio('panda_colour', 'white') }} White
{{ Form::close() }}

Select(下拉列表)

{{ Form::label('panda_colour', 'Pandas are?') }}
{{ Form::select('panda_colour', array(
    'red' => 'Red',
    'black' => 'Black',
    'white' => 'White'
), 'red') }}

分组下拉列表:

{{ Form::label('bear', 'Bears are?') }}
{{ Form::select('bear', array(
    'Panda' => array(
        'red' => 'Red',
        'black' => 'Black',
        'white' => 'White'
    ),
    'Character' => array(
        'pooh' => 'Pooh',
        'baloo' => 'Baloo'
    )
), 'black') }}

Email(电子邮箱)

{{ Form::label('email', 'E-Mail Address') }}
{{ Form::email('email', '[email protected]') }}

File Upload(文件上传)

{{ Form::open(array(
    'url'   => 'my/route',
    'files' => true
)) }}
    {{ Form::label('avatar', 'Avatar') }}
    {{ Form::file('avatar') }}
{{ Form::close() }}

Hidden(隐藏域)

{{ Form::hidden('panda', 'luishi') }}

表单按钮

Submit(提交按钮)

{{ Form::submit('Save') }}

Normal Buttons(普通按钮)

{{ Form::button('Smile') }}

Image Buttons(图片按钮)

{{ Form::image(asset('my/image.gif', 'submit')) }}

Reset Button(重置按钮)

{{ Form::reset('Clear') }}

自定义宏

// app/macros.php
Form::macro('fullName', function($name)
{
    return '<p>Full name: <input type="text" name="'.$name.'"></p>';
});

调用方法:

{{ Form::fullName('my_field') }}

表单的安全性

请使用 csrf 前置过滤器:

// app/routes.php
Route::post('/handle-form', array('before' => 'csrf', function()
{
    // Handle our posted form data.
}));

注意: 若不使用系统提供的表单起始和结束标签 Form::open() Form::close() 请手动添加表单 _token

<form action="{{ url('handle-form') }}" method="POST">
    {{ Form::token() }}
</form>

表单的旧数据填充

还记得第8章中提到的“旧数据的获取方法”吗?
使用系统提供的表单的最大的一个好处,就是系统将自动处理这些旧数据来填充表单。
完美解决了“当用户提交错误,重定向到之前页面时旧数据丢失,表单空白”的问题。而不是单纯的使用JS的“回退”。

你可能感兴趣的:(form,laravel,CSRF)