2

私のフォームには、必須オプションが false に設定されたフィールドがあります。このフィールドはオプションです。

ただし、フィールドが使用されている場合は、このフィールドに notBlank 検証を行いたいと思います。

@Assert\NotBlank(
 *     message="The name field can't be blank",
 *     groups={"flow_poemDataCollector_step1"}
 * )

現在、検証制約 NotBlank を使用することはできません。フィールドが使用されていない場合にフォームの検証が失敗するからです。

onPostBindRequest リスナーのフィールドにランダムな値を追加しようとしましたが、複雑でうまく機能しませんでした。それが正しい方法であるかどうかもわかりません。

これが私が試したことです: ($form は Symfony\Component\Form\FormInterface オブジェクトです)

    $form = $event->getForm();
    $formData = $form->getData();
    $formData->setUserName("foo");
    $form = $form->setData($formData);

しかし、バインドされていないフォームで isValid() を呼び出せないというエラーが表示されます。

どうすれば目標を達成できますか? すなわち。場合によってのみフィールドを検証します。

4

5 に答える 5

9

これは古い質問ですが、今では次のようにできるようです。

@Assert\Optional(
    @Assert\NotBlank(
        message="The name field can't be blank",
        groups={"flow_poemDataCollector_step1"}
    )
)

参照: http://symfony.com/doc/2.7/reference/constraints/Collection.html

于 2016-08-28T10:00:48.933 に答える
7

これを達成するための最良の方法は、エンティティでCallback バリデーターを使用することです。このコールバックはエンティティで定義されているため、すべてのプロパティにアクセスできます。その後、ExecutionContext を介して、必要に応じて違反を設定できます。

于 2012-10-30T09:25:42.727 に答える
0

うーん。質問の内容が論理的に有効でないため、質問を何度か読み直さなければなりませんでした。

フィールドを必須にしたくない場合は、NotBlank制約を使用しても意味がありません。フィールドが必須ではないと同時に必須である可能性はありますか?

NotBlankそのフィールドに入力された何かがスペースだけで構成されていない場合、 Symfony はデフォルトでユーザー入力をトリミングするため、制約はまったく必要ありません。全然入った。

于 2012-10-30T09:35:30.090 に答える