11

options['inputDefaults']各フォームよりもサイトレベルで定義する方法はありますか

4

3 に答える 3

11

TLDR:

以下の 2 つのコード チャンクをそれぞれの場所に貼り付けてから、$defaultOptions配列を好きなように変更します。Form->createの にデフォルトを追加する以外は、FormHelperの機能を変更しませんinputDefaults

説明とコード:

独自のカスタムを作成することで、FormHelper を拡張できます (思ったより簡単です) MyFormHelper

<?php
//create this file called 'MyFormHelper.php' in your View/Helper folder
App::uses('FormHelper', 'View/Helper');
class MyFormHelper extends FormHelper {

    public function create($model = null, $options = array()) {
        $defaultOptions = array(
            'inputDefaults' => array(
                'div' => false,
                'label' => false
            )
        );      

        if(!empty($options['inputDefaults'])) {
            $options = array_merge($defaultOptions['inputDefaults'], $options['inputDefaults']);
        } else {
            $options = array_merge($defaultOptions, $options);
        }
        return parent::create($model, $options);
    }
}

次に、AppController に、次の方法で Form ヘルパーを含めます (既に $helpers 変数がある場合は、'Form' => ...それに追加するだけです)。

public $helpers = array(
    'Form' => array(
        'className' => 'MyForm'
    )
);

これにより、 を呼び出すたびに$this->Form、実際にカスタム 'MyFormHelper' が呼び出されますinputDefaults。指定されていない場合は が設定され、Cake の FormHelper にある通常のロジックを実行し続けるだけです。

于 2012-09-02T16:02:13.947 に答える