Laravel Form方法VS传统编码

imp*_*335 12 php laravel laravel-4

我目前正在学习Laravel并发现它非常有用和有趣.

目前我正在制作一份简单的在线申请表.

使用Laravel语法执行操作的最大优点是:

{{ Form::open(array('url' => 'foo/bar')) }}
Run Code Online (Sandbox Code Playgroud)

与简单相反:

<form action="foo/bar">
Run Code Online (Sandbox Code Playgroud)

要么:

echo Form::text('username');
Run Code Online (Sandbox Code Playgroud)

代替:

<input type="text" name="username" />
Run Code Online (Sandbox Code Playgroud)

Laravel方式必须更好,我只想知道为什么?

Mar*_*łek 11

使用内置HTML帮助程序有许多好处:

  1. 使用Form::open您隐藏的CSRF保护输入(默认情况下)

  2. 使用表单元素(输入/文本区域等)和withInput重定向方法,您可以轻松地使用相同的数据填写表单,几乎不需要编码

    如果您使用Redirect::route('form'->withInput();并输入文本{{Form::text('username')}},它将自动将输入值设置为旧数据 - 您无需自行编码检查它

  3. 此外,如果您想要使用标签匹配字段,则更容易:

    {{ Form::label('username', 'Enter username') }}
    {{ Form::text('username') }}
    
    Run Code Online (Sandbox Code Playgroud)

    它将生成以下代码:

    <label for="username">Enter username</label>
    <input name="username" type="text" id="username">
    
    Run Code Online (Sandbox Code Playgroud)

    所以你看到id会自动创建

可能还有更多.然而,主要的缺点是你需要学习并且它不可移植,以防你想将你的网站移动到其他框架,但每个解决方案都有利有弊.


The*_*pha 5

还有用的这么多优点LaravelForm组成部分,但一个有用的优点是,当你只是使用:

{{ Form::open(array('url' => 'foo/bar')) }}

{{ Form::close() }}
Run Code Online (Sandbox Code Playgroud)

它会自动附加一个_tokenCSRF保护有用的隐藏字段.否则你必须_token使用echo Form::token()或以其他方式手动创建字段.此外,当您使用RESTful的路线,然后LaravelForm成分追加相应的隐藏_method字段为好.以下说明来自Laravel网站:

注意:由于HTML表单仅支持POST和GET,因此将自动在表单中添加_method隐藏字段来欺骗PUT和DELETE方法.

还有其他优点,例如Form Model Binding,(特别select)轻松生成表单元素等等.了解更多关于Form的文档.

顺便说一句,如果你使用这样的东西,Redirect::back()->withInput()它不会仅仅因为使用了Form组件,例如:

<input type='text' name='username' value='<?php echo Input::old('username') ?>' />
Run Code Online (Sandbox Code Playgroud)

这仍然有效,该字段将通过输入重定向重新定位.