0

私はhtmlフォームを構築しようとしています(zendにデコレータで生成させるのは現実的ではないほど十分なマークアップが必要です)、$this->signupForm->getValue('fieldName')入力値要素で使用しています。

フォーム クラスは通常どおり要素を作成し、フォームに追加します。このフォームを表示していたとき、フィールドは適切に機能していました。

しかし、getValue メソッドを使用すると、フォーム フィールドの値の半分が「0」になります。null でないことを確認するために型チェックを行いましたが、getValue は実際には "0" の文字列を返しています。

設定されているデフォルトはありません。関連しているように見える唯一のことは、デフォルト値が「0」であるすべてのフィールドが、親クラスを拡張するサブクラスで定義されていることです。ただし、フィールドを親クラスに移動しても影響はないようです (キャッシュがクリアされるなど)。

これらは、フォーム クラスがどのように構成されているかを示しています。

class Form_Signup extends Base_Form_Signup {

    public function __construct($options = null) {

        parent::__construct($options);

        $address = $this->createElement('checkbox', 'address');
        $address->setLabel('Address')->setRequired(true);

        // Add our elements
        $this->addElement($address);

    }
}

class Base_Form_Signup extends Zend_Form {

    public function __construct($options = null) {

        parent::__construct($options);

        // fields defined here do not show 0

        // Add our elements
        $this->addElement( // adding our elements );

    }
}
4

1 に答える 1

2

Zend_Form でのコンストラクターの動作に問題があると思います。各クラスのコンストラクターでデフォルトのデコレーターを呼び出すと、いくつかのものが上書き/キャンセルされる原因になっていると思います。

init()クラスが使用するように設計されたメソッドを使用してみてください。

class Form_Signup extends Base_Form_Signup {

    public function init() {

        parent:: init();//may be needed, may not

        $address = $this->createElement('checkbox', 'address');
        $address->setLabel('Address')->setRequired(true);

        // Add our elements
        $this->addElement($address);

    }
}

class Base_Form_Signup extends Zend_Form {

    public function init() {

        // Add our elements
        $this->addElement( // adding our elements );

    }
}

$options本当に必要な場合は、配列をコンストラクターに渡すこともできますが、単に使用する方がよい場合がありますsetOptions()

于 2013-01-26T09:50:25.303 に答える