除非指定'autocomplete'=>'on',否則我希望默認情況下,我的laravel應用程序中的所有表單都具有'autocomplete'=>'off'..爲Laravel應用程序中的所有表單設置全局選項
由於我的應用程序有很多形式,laravel就是這樣一個真棒框架,我想知道如果我可以設置窗體類的全局選項始終自動完成關閉,除非我指定相反。
有人知道嗎?
除非指定'autocomplete'=>'on',否則我希望默認情況下,我的laravel應用程序中的所有表單都具有'autocomplete'=>'off'..爲Laravel應用程序中的所有表單設置全局選項
由於我的應用程序有很多形式,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']);
});
}
}
最後,你需要與你的新的服務提供商,以取代'Illuminate\Html\HtmlServiceProvider',
在app/config/app.php
。我已經在本地測試Laravel 4.2上進行了測試,無需修改任何內容即可調用Form::open
我感覺很懶,所以我只是將$attributes['autocomplete'] = 'off';
行添加到文件FormBuilder.php
。我在open函數的#108行中添加了它。
這是一個很好的解決方案。
不錯!我希望有一個較少hackish的解決方案,但仍然真棒:) – raphadko 2014-09-29 21:23:33
我不明白這是如何hackish。您正在擴展內置類並創建自定義服務提供者。這有什麼蹊蹺? – 2015-11-04 19:32:34