1

1 つのページに複数のフォームがあり、そのうちの 1 つを送信すると、どのフォームが送信されたかをどのように確認できますか?

それぞれの一意の ID を生成し、隠しフィールドとしてユーザー セッションに保存することを考えました。これは解決策ですが、セッションから古い ID を削除する適切な場所がないという問題があります。

この問題を解決するためのより良いアイデアはありますか?

前もって感謝します!

4

2 に答える 2

3

まず第一に、2 つのフォームを 2 つの異なるアクションに送信することを検討しましたか? そうすれば、それぞれのアクションで各フォームを個別に処理できます。Zend MVC コンポーネントを使用している場合は、これが「ベスト プラクティス」です。

もう 1 つのオプションは、リクエストに含まれる送信ボタンの値を確認することです。

<input type="submit" name="save" value="form1" />
// in PHP:
// $_POST["save"] will contain "form1"

<input type="submit" name="save" value="form2" />
// in PHP:
// $_POST["save"] will contain "form2"

value-attribute はボタンのラベルとしてレンダリングされるので注意してください。

したがって、異なる送信ボタン名でフォームを区別したい場合があります。

<input type="submit" name="save-form1" value="Submit" />
// in PHP:
// $_POST["save-form1"] will contain "Submit"

<input type="submit" name="save-form2" value="Submit" />
// in PHP:
// $_POST["save-form2"] will contain "Submit"

編集:

OPと私の間のコメントダイアログ中、次のことが可能な解決策のようです:

class My_Form_Base extends Zend_Form
{
    private static $_instanceCounter = 0;

    public function __construct($options = null)
    {
        parent:: __construct($options);

        self::$_instanceCounter++;
        $this->addElement('hidden', 'form-id', 
            sprintf('form-%s-instance-%d', $this->_getFormType(), self::$_instanceCounter);
    }

    protected _getFormType()
    {
        return get_class($this);
    }
}

class My_Form_Type1 extends My_Form_Base
{
    public function init()
    {
        // more form initialization
    }
}

class My_Form_Type2 extends My_Form_Base
{
    public function init()
    {
        // more form initialization
    }
}
于 2009-07-23T10:36:19.413 に答える
0

コードにいくつかのエラーがある場合は、次のようにする必要があります。

class Application_Form_Idee_Base extends Zend_Form
{
    private static $_instanceCounter = 0;

    public function __construct($options = null)
    {
        parent::__construct($options);

        self::$_instanceCounter++;
        $this->addElement('hidden', 'form-id', array(
            'value' => sprintf('form-%s-instance-%s', $this->_getFormType(), self::$_instanceCounter))
        );
    }

    protected function _getFormType()
    {
        return get_class($this);
    }

}
于 2011-07-08T09:29:26.767 に答える