我希望我的laravel应用程序中的所有表单默认情况下都具有"autocomplete"=>"off",除非我指定"autocomplete"=>"on"。。
由于我的应用程序有很多表单,而laravel是一个非常棒的框架,我想知道我是否可以将表单类的全局选项设置为始终自动完成,除非我指定相反的选项。
有人知道这件事吗?
是的,这是可能的。基本思想是,您需要扩展两个类:内置的Illuminate'Html'FormBuilder
和Illuminate'Html'HtmlServiceProvider
类,并用您创建的类替换app/config/app.php
中的HtmlServiceProvider
。
首先,创建一个MyForm
类,它将覆盖FormBuilder
:中所需的功能
use Illuminate'Html'FormBuilder;
class MyForm extends FormBuilder
{
/**
* Open up a new HTML form.
*
* @param array $options
* @return string
*/
public function open(array $options = array())
{
// If you haven't specified an autocomplete option, default it to 'off'
if(!isset($options['autocomplete'])) {
$options['autocomplete'] = 'off';
}
return parent::open($options);
}
}
接下来,您将需要创建一个从Illuminate'Html'HtmlServiceProvider
扩展的服务提供商,并覆盖registerFormBuilder
方法:
use Illuminate'Html'HtmlServiceProvider;
use MyForm;
class FormServiceProvider extends HtmlServiceProvider
{
public function registerFormBuilder()
{
$app = $this->app;
// Taken From: Illuminate'Html'HtmlServiceProvider
$app->bindShared('form', function($app) {
// Replace FormBuilder with MyForm
$form = new MyForm($app['html'], $app['url'], $app['session.store']->getToken());
return $form->setSessionStore($app['session.store']);
});
}
}
最后,您需要用新的服务提供商替换app/config/app.php
中的'Illuminate'Html'HtmlServiceProvider',
。我已经在本地测试Laravel 4.2安装上测试了这一点,并且无需修改对Form::open
的调用中的任何内容即可工作
我觉得很懒,所以我只是将行$attributes['autocomplete'] = 'off';
添加到文件FormBuilder.php
中。我在open函数的第108行添加了它。
这是一个巧妙的解决方案的好例子。