Symfony-コレクションフォームの複数の要素の検証

ジョニーデュー

だから、私はコレクションを持っているフォームを持っていて、ユーザーはこのコレクションに新しいアイテムを追加することができます。このコレクションの私のエンティティには、IDと整数があります。ユーザーが最初のアイテムよりも整数が小さいアイテムを次々に追加できないことを検証したいと思います。

たとえば、フォームは空で、ユーザーは[追加]ボタンをクリックしてコレクションにレコードを追加します。彼は入力フィールドに100を入力し、別のレコードを追加して、入力フィールドに50を入力します。彼が送信しようとすると、50が100未満であるため、2番目のレコードにエラーが発生するようにしますが、リストの後に追加しました。

これが私のFormTypesとEntitesです

class ItemType extends AbstractType
{    
    public function buildForm(FormBuilderInterface $builder, array $options)
    {        
        $builder->add('value');
    }
}

class ItemCollectionType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {   
        $builder->add('items', 'collection', array(
            'type' => new ItemType(),
            'allow_add'    => true,
            'allow_delete' => true,
            'by_reference' => false,
            'label' => false,
        ));

        $builder->add('save');
    }
}

class Item
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    protected $value;
}

class List
{
    /**
     * @ORM\OneToMany(targetEntity="Item", cascade={"persist"})
     * @Assert\Valid
     **/
    private $items;
}

コントローラーで検証を実行できると思いますが、エンティティで検証またはカスタム検証を使用して検証を実行したいと思います。

**編集**

DonCallistoが提案したことも実行できますが、彼が提案したようなグローバルクラスだけでなく、問題のある特定の行でエラーが発生しようとしています。

問題のアイテムにpropertyPathを追加する方法が見つかりません。次のコードを使用しようとしましたが、アイテム自体ではなく、クラスでエラーをバインドしているようです。

$context->addViolationAt(
    $context->getPropertyPath().'.items.data.value',
    'Your violation message'
);

また、現在の要素は考慮されません。

次のコードも機能していません。ここでは、テストのためだけに配列のキーをハードコーディングしています。

$context->addViolationAt(
    $context->getPropertyPath().'.items[0].data.value',
    'Your violation message'
);

コレクション内の子の値にアクセスするためのパスを正しく設定する方法を誰かに教えてもらえますか?

ジョニーデュー

私はDonCallistoの答えの一部を使用して、私はからコードを移動し、私の質問への答えを見つけたListエンティティへのItem私のように呼び出していますことをバリデータとでCLASS_CONSTRAINT私のItemエンティティ。

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

/**
 * @Annotation
 */
class ItemsOrderedValidator extends ConstraintValidator  {

    public function validate($value, Constraint $constraint) {
        foreach ($value->getList()->getItems() as $item) {
            $currentValue = $item->getValue();

            if (isset($prevValue) && $prevValue >= $currentValue && $value === $item) {
                $this->context->buildViolation($constraint->message)
                    ->atPath('value')
                    ->addViolation();
            }
            $prevValue = $currentValue;
        }
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Symfony-条件付きで埋め込まれたコレクションフォームの検証

Symfony2にフォームの複数レベルのコレクションを埋め込む

Symfony:フォームのコレクションの埋め込みの問題

Symfony3のコレクションの各要素に特定の検証グループを適用します

symfonyフォームコレクションのカスタマイズ

フォームのコレクションを埋め込む-教義、symfony

フォームのコレクションを埋め込む-教義、symfony

symfony2のコレクションフォームに値を追加する

symfony:フォームのコレクションを埋め込む

symfony 3:フォームのコレクション内のフォームを個別に送信する方法は?

Symfonyフォーム埋め込みコレクションを使用して複数のファイルをアップロード、編集、削除します

symfony2フォームの検証

Symfony 2.3:コレクションフィールド内のエンティティを検証する

Symfony / Doctrine One-> ManyRelationshipのフォームコレクションからレコードを削除する

symfonyコレクションフォームコントローラーの問題

Symfony3-フォームの埋め込みコレクションをレンダリングする方法

symfony / Doctrine:symfonyがフォーム送信時にエンティティに解決する前にリレーションのIDを検証する

ファイルタイプcreateのsymfony4フォームコレクションエンティティ

Symfony3.x-多対多の追加フィールドフォームコレクション

Symfony2-フォームコレクションのoneToMany関係からアイテムを削除します

コレクションフォーム Symfony のみが最後に保存されたアイテム

Symfony3:ネストされた(オプションの)フォームを検証する

KnpPaginatorBundleを使用したSymfonyフォームコレクションのページ付け

symfonyフォームコレクション-主キーとの関連付けを維持します

Symfony2のコレクションフォームからデータを更新する

空の配列コレクションsymfonyの検証をアサートします

Symfonyフォーム-一定数の子をコレクションに自動的に追加します

Symfony2フォームのコレクションは自動的に永続化されます

symfonyフォームコレクション

TOP 一覧

  1. 1

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

  2. 2

    ソートされた検索、ターゲット値未満の数をカウント

  3. 3

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  4. 4

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  5. 5

    Ansibleで複数行のシェルスクリプトを実行する方法

  6. 6

    Reactでclsxを使用する方法

  7. 7

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  8. 8

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  9. 9

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  10. 10

    PowerShellの分割ファイルへのヘッダーの追加

  11. 11

    Chromeウェブアプリのウェブビューの高さの問題

  12. 12

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  13. 13

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  14. 14

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  15. 15

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  16. 16

    MLでのデータ前処理の背後にある直感

  17. 17

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  18. 18

    reCAPTCHA-エラーコード:ユーザーの応答を検証するときの「missing-input-response」、「missing-input-secret」(POSTの詳細がない)

  19. 19

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  20. 20

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  21. 21

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

ホットタグ

アーカイブ