2016-10-22 4 views
0

既存のModel/Entity/POPOに対して送信されたデータを検証しようとしていますが、単純な方法では動作しません。Symfony2 Modelクラスに対して送信されたデータの検証

これはすべてコントローラアクション内で行われます。

だから、私はこのように行うことができます:クラス内のすべての制約を持つことが多い方が良いだろうとして、すべてのアクションには、意味がないことをやってしかし

$constraints = new Assert\Collection([ 
     'username' => [new Assert\NotBlank()], 
     'email' => [new Assert\Email()], 
    ]); 
    $violationList = $this->get('validator')->validate($request->request->all(), $constraints); 

。だから、検証コンポーネントは次のように行うことができます:$顧客は空のオブジェクトであるよう

// All constraints are defined inside Customer class 
$customer = new Customer(); 
$violationList = $this->get('validator')->validate($customer); 

違反リストは、今のエラーでいっぱいですが、問題は、私はPOSTからのデータを使用する方法を見つけることができませんANDですそのクラスで定義されている制約に対して検証します。

POSTデータを受け取る余分なコンポーネント/ヘルパーを記述してから、->setUsername(),->setEmail()などの束を呼び出すことはできますが、モデルがPOSTデータに簡単にマップできると考えても、

  • フォームコンポーネントが関与します。
  • またはConstraintsCollectionを手動で使用する。

ここに明白なものがないか、すぐに使用できる可能性はありませんか?ありがとう!

答えて

1

AFAIKフォームコンポーネントは、投稿データをエンティティにマッピングするためのコンポーネントです。だから、あなたはあなたのデータがマッピングされているでしょうし、あなたのモデルがフォームをスキップ

  • を検証したが、その後、手動であなたのエンティティにリクエストパラメータをマッピングするために持っているように二つの選択肢

    1. は、フォームを使用しています。その後、$this->get('validator')->validate($customer);

    を編集して、あなたのモデルを検証:

    フォームの役割は、モデルへの要求からのデータ(HTMLフォーム、APIを....)にマッピングすることです。検証は、ジョブを実行するコンポーネントvalidatorの有無にかかわらず実行できますが、検証はフォームではなくモデルで実行されることに注意してください。

    あなたがこの質問をチェックフォームをスキップする場合:あなたは多くの場所で同じロジックを使用している特別な場合は、フォームのコンポーネントは非常に便利ですが、Populate entity from data array without form/requestを(/編集を作成...)

  • +0

    はい、私がしようとしていますここでフォームコンポーネントを避けてください。データはHTMLフォームから来ていないので、FormComponentの使用法はすべてのフィールドと型定義では過度であるようです。それ以外にも、各ツール/コンポーネントは – KlausK

    +0

    である必要があります。残念ながら、私はコメントを編集できませんので、少し繰り返していきます... それ以外に、各ツール/コンポーネントには特定の目的があります_Form_だけで検証するのは正しいことではありません。 _Validator_はすでに ' - > validate($ dataToValidate、$ constraints);'の構文をサポートしているので、Modelクラスに対して一般的に検証されているように、モデルクラスに対しても同じことができるように思われます。 – KlausK

    +0

    @KlausK私の答えを編集しました – zizoujab

    関連する問題