1

Symfony2 が ORM メタデータを使用して検証ルールを自動的に構築する方法について、誰か教えてください。Symfony2.1 を使用しています。

たとえばFoo、必要な属性を持つエンティティがある場合name、次の Doctrine メタデータがあります (注釈として):

@ORM\Column(name="name", type="string", length=255, nullable=false)

ただし、サーバー側で検証する場合は、nullable情報を繰り返す必要があります。Assert

@Assert\NotBlank()

一方、タイプを持つnumber属性がある場合、これは注釈integerを使用する必要なく、検証ルールとして自動的に使用されます。@Assert

@ORM\Column(name="number", type="integer", nullable=true)
//@Assert\Type(type="integer") is no needed
4

1 に答える 1

3

基本的に、2 つの異なるレイヤーがあります。

  • 永続層 (Doctrine2、Propel、...);
  • 検証レイヤー。

パーシステンス レイヤーは、メタデータを使用してデータベースに検証ルールを追加します。Doctrine2 では注釈を使用できますが、Propel では XML を使用してデータベースを記述します。主に SQL ステートメントを定義するために使用されます (基本的nullable=falseに SQL に変換されますNOT NULL)。

検証レイヤーは、アプリケーション レベルでデータを検証するために使用されます。Doctrine2 メタデータはデータベースを構築するために使用され、検証レイヤーはデータベースに挿入する前に (たとえばユーザーからの) データを検証するために使用されます。

ビジネス検証ルールのような Validator コンポーネントを使用して、アプリケーション レベルでさらに制約を追加できます。また、データの検証をデータベースに頼るべきではありません。

2 つの異なる懸念を持つ 2 つの異なるレイヤーがあるため、それらを混在させることはできません。

于 2012-08-23T14:52:23.250 に答える