問題タブ [zend-form2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
forms - Doctrine 2エンティティにバインドされた後、ZF2フォームから「その他の」データを取得する方法は?
Doctrine 2 エンティティの注釈を使用して作成したフォームがあります。(はい、遅いことはわかっています。それが私が学んだ方法であり、レガシーコードで使用しています。しかし、これはおそらくゼロから作成されたフォームに適用されるでしょう)
とにかく、これが状況です。エンティティには、名前、電子メール、性別など、ユーザーにとって非常に標準的なものがあります。また、「ロール」と呼ばれる一対多のプロパティもあります。そこで、AnnotationBuilder で作成したフォームを使用し、select 要素 (「roleId」という名前) を追加して、ユーザーがユーザーのロールを選択できるようにしました。そこから、フォームが検証されたら、roleId の値を取得し、対応するエンティティをデータベースから取得して、次に進み$user->setRole($role)
ます。
ここで困ってしまいます。を使用$form->bind($user)
し、$form->isValid()
次に を呼び出すと$form->getData()
、フォームからフィルタリングおよび検証されたデータの配列ではなく、ユーザー エンティティになります。
では、この状況をどのように処理すればよいでしょうか。エンティティにバインドされた後、フォームからフィルター処理および検証されたすべてのデータのフラットな配列を取得する方法はありますか?
php - Zend Framework 2 を使用した複数ページのフォーム
2つの異なるフォームを作成したい。最初のフォームでは、ユーザーはデータを入力できます。最初のステップで指定されたデータに応じて、2 番目のフォームで事前に入力されたデータを準備したいと考えています。
そうすることは可能ですか?
私の英語でごめんなさい。
ありがとう
forms - 無効な値が送信された場合でも、select からの ZF2 フォーム検証値
ZF2 アプリケーションに select 要素を含むフォームがあります。ZF1 では、バリデーターを自動的に追加して、ユーザーが無効な値を投稿しようとしていないことを確認していました。
そこで、冗談で、Firebug を使用してオプションの 1 つの値を変更し、それを送信するとどうなるかを確認することにしました。結果:見事合格。言うまでもなく、これは良くありません。
select オプションに関連するコードは次のとおりです。
(注: $roleOptions はパラメーターとしてフォームに渡されます)
バリデータ コードの関連部分は次のとおりです。
(明らかに、$notEmpty は NotEmpty バリデーターのインスタンスです)
何が起きてる?ZF2 は、受け取った値が元々オプションのリストの一部だったものであることを確認するバリデーターを追加しなくなりましたか? オプションを選択するには、バリデーターを手動で追加する必要がありますか?
編集:ドキュメントを確認したところ、選択要素が配列内バリデーターを自動的に追加すると書かれています。機能するはずですが、そうではありません。サーバー側で値を変更してみましたが、結果は同じでした。バリデーターは無効な値を取得していません。
はい、フォームが有効かどうかを確認しています。
編集 #2: わかりやすくするために、フォーム全体のコードを次に示します。
php - Zend\Form\Collection (DoctrineModule ObjectSelect を含むフィールドセット) のすべての要素を削除する
ZF2フォームとDoctrineModuleハイドレーターを使用して、単純なCRUDシステムでエンティティを作成/更新するZF2アプリケーションに取り組んでいます。Zend\Form\Element\Collection
エンティティ (Union) は別のエンティティ (Team) との Doctrine OneToMany 関連付けを持っており、その関連付けはフォーム サイトの で表されます。新しいエンティティを作成するとき、またはフォームを使用して既存のエンティティを更新するときに、既存のエンティティの関連付けコレクションを空にするという 1 つのケースを除いて、すべてが問題なく動作します。コレクションのすべての要素を削除して [保存] をクリックすると、フォームが跳ね返され、コレクションの既存の各要素にエラーが表示されますValue is required and can't be empty
。
問題を示すビデオ: http://youtu.be/3ucRb6X61c8
コード:
- コントローラー: Class、View Scripts
- サービス:クラス、工場
- フォーム:工場
- フィールドセット:
- エンティティ:
問題は InputFilter に要約されるようですが、何が問題なのかを正確に突き止めることはできません。コレクションの N 個のエントリのうち (N-1) 個まで削除すると問題なく動作するため、InputFilter 構造自体には問題はありません。おそらく、POST されたコレクションが空の場合、コレクションZend\Form
の各要素に割り当てられた既存の NotEmpty バリデーターを削除しないのteams
でしょうか?
Union フィールドセットにはカスタム入力フィルターが用意されていますが (こちらを参照teams
)、コレクション要素には入力がリストされていません。また、カスタム InputFilter を完全に削除することと、teams
コレクションに適切な InputFilter 定義を追加することの両方を試みましたが、最終結果は同じです。
私がここで間違っていることについて何か洞察を持っている人はいますか?
mongodb - 埋め込まれた Doctrine ドキュメントを Zend フィールドセットに取り込む方法は?
ZF2+Doctrine+DoctrineMongoODM モジュールを使用しています。ドキュメントにPerson
ドキュメントが埋め込まれていHouse
ます:
そう
ドキュメントの共通フィールドHouse
が保存され、データが取り込まれます。埋め込まれたドキュメント フィールドを編集するために name を含む fieldset を使用するperson
ため、 と を含む入力要素のセットがありname=person[firstName]
ますname=person[lastName]
。
埋め込みドキュメントのフィールドは保存されますが、フォームには入力されません。
回避策を見つけました-$vals = (array) $element->getValue();
フィールドセットオブジェクトで値を取得してから
$name = preg_replace("/^(.*)\[(.*)\]$/", "\\2", $elem->getName());
$elem->setValue($vals[$name]);
各フィールドセット要素に対して。
より良い解決策はありますか?