0

アプリケーションの要件を満たすために FormHelper の動作を変更しようとしています。ネイティブの FormHelper を使用したいのですが、すべての入力に対して、ユーザーにヘルプを提供し、特定のフィールドを説明する短いメッセージを追加する必要があります。

私の考えは、独自のヘルパーを作成し、ヘルプ メッセージを引数として渡すことです。この関数は、フォームの inputDefaults 設定を変更し、ネイティブの FormHelper 入力関数を呼び出します。

例えば:

class MsgFormHelper extends AppHelper {
      public function input($name, $message, $options) {
        $this->_View->Form->_inputDefaults['after'] .= '<div>'.$message.'</div>';
        return $this->_View->Form->input($name, $options);
    }
}

しかし、このソリューションはこのエラーに気づきます:

注意 (8): オーバーロードされたプロパティ FormHelper::$_inputDefaults の間接的な変更は効果がありません...

フォームのinputDefaults設定で「後」の値を変更する方法はありますか?

4

2 に答える 2

0

FormHelperではなく、それ自体を拡張する必要がありますAppHelper。次に、コントローラーでエイリアシング機能を使用$this->Form->input()して、ビューで引き続き使用できるようにしますが、実際にはカスタムヘルパーを参照します。

public $helpers = array('Form' => array('className' => 'MsgForm'))

于 2013-01-30T16:15:06.857 に答える
0

私はおそらく解決策を見つけました(それは機能しますが、CakePHPのいくつかの原則に違反していないかどうかはわかりません)。ご意見ありがとうございます。

class MsgFormHelper extends AppHelper {

    public function __construct(View $view, $settings = array()) {
        parent::__construct($view, $settings);
    }

    public function input($name, $message, $options) {

        $add_message = true;

        if (isset($options['after'])) {
            $options['after'] = trim($options['after']);
            $add_message = empty($options['after']);
        }

        if ($add_message) {
            $options['after'] = '<div class="input-help">' . $message . '</div>' . $this->_View->Form->_inputDefaults['after'];
        }

        return $this->_View->Form->input($name, $options);
    }

}
于 2013-01-30T10:05:19.107 に答える