2

ユーザーがボタンを押すだけで、フォームがユーザーが使用する新しいフィールドを追加するフォームを作成しようとしています。これらの動的に追加されたフィールド タイプが 2 つあります。

最初に、ユーザーがファイルをアップロードできるフィールドです。追加ボタンを押すと、別のフィールドが現在のフィールドの下に貼り付けられ、使用できるようになります。

少しの ajax と jQuery を使用してこれを行う方法については、古いガイドに従っています。

正確にはこのガイド: http://www.jeremykendall.net/2009/01/19/dynamically-adding-elements-to-zend-form/

ご覧のとおり、2009 年のもので少し古くなっていますが、現在の Zend Framework バージョン 1.11.11 でも動作します。

ただし、フォームの編集/更新バージョンが必要なため、問題が発生します。フィールドに入力する必要がありますが、まず、データを保存するのに十分なフィールドを作成する必要があります。したがって、アップロードされたファイルが 3 つある場合は、2 つの追加フィールドを作成し、これらのフィールドに 3 つのファイル名を配置する必要があります。編集して更新します。ただ使うだけ$form->populate($stuff)ではうまくいかない

これを達成する方法がわかりません。動的に追加されたフィールドに関するチュートリアルは、これらの条件下でaddActionを作成する方法ではなく、 までしか進んでいません。editAction

このようなフォームを作成および管理する方法に関するチュートリアルはありますか? この種のフォームを構築するアイデアを持っていたのは私だけではないと思いますか?

リクエストがあればコードを追加できますが、フォーム内の要素のセットが異なるだけで、ガイドの例と同じです。

その使用の小さな例を追加します。ユーザーが 3 つのファイルを含むアイテムを追加すると、これらのファイルはファイル名とともにアップロードされるため、データベースでは次のように表示されます。File_Id : '1' , File_Name : 'SomeFile' , File_location : 'somewhere/on/my/pc/SomeFile.txt'.

ユーザーは、ファイルを忘れたか、そのリストからファイルを削除したいことに気付き、編集ページに移動して、以前に追加したファイル名をフォームに表示したいと考えています。したがって、ファイルが 3 つある場合は 3 が表示され、2 つある場合は 2 が表示されます。アップロードされたファイルの数に基づいてフィールドを動的に追加し、それらを入力するフォームを作成するにはどうすればよいですか?

これを処理する方法についてのアドバイスは大歓迎です:)

4

2 に答える 2

3

フォームの半魔法のsetXxx()メソッドを利用できます。

フォーム内:

public function setFiles($files) {
    foreach ($files as $file) {
        $this->addElement(/* add a file element */);
        //do other stuff, like decorators to show the file name, etc.
    }
}

コントローラーで:

$files = $model->getFiles();
$form = new Form_EditFiles(array('files' => $files));

キーで配列を渡すことにより、フォームは上で便利に提供したfilesという名前のメソッドを呼び出そうとします。setFiles()

これはあなたを正しい方向に押し進めるはずです。少なくともそう願っています。

于 2012-05-30T11:17:21.423 に答える
1

ファイル アップロード フィールドにデータを入力したいのですが、セキュリティ上の理由からこれは不可能です。

編集:

コントローラー内に要素を追加できます$form->addElement()(基本的$this->addElement()にはチュートリアルのステートメントと同じです)

于 2012-05-30T08:55:58.627 に答える