簡體   English   中英

為Laravel應用程序中的所有表單設置全局選項

[英]Setting a global option for all forms in a Laravel application

我希望laravel應用程序中的所有表單默認情況下都具有'autocomplete'=>'off',除非我指定'autocomplete'=>'on'。

由於我的應用程序具有多種形式,而laravel是一個如此出色的框架,我想知道是否可以將表單類的全局選項設置為始終自動完成,除非我指定相反的方式。

有人知道嗎?

是的,這是可能的。 基本思想是您需要擴展兩個類:內置的Illuminate\\Html\\FormBuilderIlluminate\\Html\\HtmlServiceProvider類,並用您創建的類替換app/config/app.phpHtmlServiceProvider

首先,創建一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM