2

プロジェクトの1つでZendFramework1.12を使用しています。1ページで複数のフォームを使用する必要があり、「レンダリング」機能を使用してフォームを配置することができました。

    $this->oneAction();
    $this->render('one');

    $this->anotherAction();
    $this->render('another');

2つのフォームには2つの異なるアクションがあり、私のindexAction()では上記のように呼び出します。2つのアクションには独自のスクリプトがあり、このコードは1ページに2つのフォームを配置するのに適しています。

問題は; 独自の送信ボタン(異なる名前)を持つ2つの異なるフォーム、2番目のフォームが送信されると、ページは全体として(当然)リロードされますが、最初のフォームのフィールドの値は失われます。いくつかのデフォルト値をロードする関数を作成しました。 (dbから取得した第1形式の一部のフィールドの場合)、次に値を取得しますが、関数で埋められていてもエラーが発生します(値は必須であり、空にすることはできません)。多くのフォームを含む複雑なページを作成する必要があり、この問題をさらに進めることはできません。この問題の解決策を取得したい、またはこれらの複数のフォーム送信に関するZendFormの動作についてほとんど理解したくない。

(これらの問題については多くのページがありますが、それらのほとんどは、同じページに複数のフォームを配置することを検討しているだけで、それ以上はありません。)

前もって感謝します..

4

1 に答える 1

2

Zendのサブフォームを活用する必要があります。フォームとサブフォームはZFで実質的に同じものですが、主な違いはフォームデコレータの使用です。ただし、すべてのフォームを1つのフォームに組み合わせることができるサブフォームと考えるとはるかに強力です。次のコードは例を示しています。

class My_Master_Form extends ZendX_JQuery_Form
{   

    /**
     * combine sub forms into composite
     */
    public function  __construct($options = null)    
    {       
        parent::__construct($options);        

        // Add a sub form...
        $subform = new My_Foo_Form();       
        $subform->setElementsBelongTo('mySubForm');
        $subform->removeDecorator('Form');
        $subform->setOrder(-2);
        $this->addSubform($subform, 'mySubForm');

        ...

次に、単一のマスターフォームをレンダリングします。検証の処理は簡単です。既存のコードは、検証を実行するときに各サブフォームを反復処理する必要があります。必要に応じてオーバーライドし、最初の検証後に各サブフォームの失敗を確認し、検証ロジックがサブフォームを超えている場合は必要に応じて要約することができます。

于 2012-11-07T16:47:53.827 に答える