3

私はCakePHP(2.x)を使用するアプリケーションで作業しており、フォームを作成するたびにいくつかの設定を再利用していたので、他に何も渡されない場合にデフォルト値を自動的にロードするデフォルトのFormHelperクラスを拡張することにしました(以下のコードを参照してください)。

<?php

class AppFormHelper extends FormHelper
{
    public function input($fieldName, $options = array())
    {
        $defaults = array(
            'class' =>  'input',
            'div'   =>  array(
                            'class' => 'button-height block-label margin-bottom'
                        )
        );

        $options = Set::merge($defaults, $options);

        return parent::input($fieldName, $options);
    }
}

一見すると、このように私の見解ではこれを呼び出すと、これは完全に機能しているように見えました$this->AppForm->input('test');。ただし、そのフォームが送信されてエラーが発生した場合、そのエラーは画面に表示されません。呼び出し$this->Form->input('test')てエラーが発生すると、次のようなdivが作成されます。

<div class="error-message">This form had an error</div>

最終的には、FormHelperの入力オプションを簡単に複製する方法が必要であり、これが正しい方法だと思いましたが、問題が発生しているため、もうわかりません。誰もがエラーを再び表示する方法を知っているか、FormHelperのデフォルトオプションを提供するためのより良い解決策を持っています。

ありがとう!

4

3 に答える 3

4

さて、私のコメントがあなたの問題を解決したので、私はそれを答えとして書く自由を取ります... ;-)ところで、私はあなたを助けることができてうれしいです!

私には、これは非常に論理的なアプローチのようです。

それが問題になるかどうかはわかりませんが、フォーム全体にAppFormHelperを使用しましたか?私はFormHelperから継承したカスタムヘルパーをよく使用しますが、コアヘルパーを自分のものと混合すると、たとえばSecurityComponentを使用する場合に問題が発生する可能性があります。

たぶん、ここで似たようなことが起こっているのでしょうか?

于 2012-06-01T21:05:30.347 に答える
2

Cake 2.0でHtmlHelperメソッドを上書きするには、次のようにするだけです。

たとえば、HtmlHelperを拡張するlinkメソッドを含むOwnHelperクラスを作成し、AppControllerで次のように指定します。

$helpers = array('Html' => array('className' => 'OwnHelper'));

ADmad経由

于 2012-10-26T11:59:13.580 に答える
0

nIcOが私に指摘したように、これは優れたソリューションですが、フォーム全体にAppFormHelperを使用していませんでした。したがって、これはうまく機能しますが、フォーム全体でカスタムクラスが使用されていることを確認してください。

于 2012-06-01T18:26:39.423 に答える