2014-09-29 25 views
2

除非指定'autocomplete'=>'on',否則我希望默認情況下,我的laravel應用程序中的所有表單都具有'autocomplete'=>'off'..爲Laravel應用程序中的所有表單設置全局選項

由於我的應用程序有很多形式,laravel就是這樣一個真棒框架,我想知道如果我可以設置窗體類的全局選項始終自動完成關閉,除非我指定相反。

有人知道嗎?

回答

2

是的,這是可能的。基本思想是,您需要擴展兩個類:內置的Illuminate\Html\FormBuilderIlluminate\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

+0

不錯!我希望有一個較少hackish的解決方案,但仍然真棒:) – raphadko 2014-09-29 21:23:33

+0

我不明白這是如何hackish。您正在擴展內置類並創建自定義服務提供者。這有什麼蹊蹺? – 2015-11-04 19:32:34

1

我感覺很懶,所以我只是將$attributes['autocomplete'] = 'off';行添加到文件FormBuilder.php。我在open函數的#108行中添加了它。

這是一個很好的解決方案。

相關問題