![](/img/trans.png)
[英]Laravel 5 CSRF global token hidden field for all forms in a page
[英]Setting a global option for all forms in a Laravel application
我希望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
。 我在打開功能的#108行中添加了它。
這是hacky解決方案的一個很好的例子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.