2012-08-23 2 views
1

Symfony2가 ORM 메타 데이터를 사용하여 자동으로 유효성 검사 규칙을 작성하는 방법에 대해 깨닫는 사람이 있습니까? Symfony2.1을 사용하고 있습니다. 예를 들어엔티티 매핑 메타 데이터의 유효성 검사 규칙

, 우리는 필요한 name 속성을 가진 Foo 법인이있는 경우, 우리는 (주석으로) 다음과 같은 교리의 metada 있습니다

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

을하지만 우리는 Assert으로 nullable 정보를 반복해야 우리 경우 이 서버 측에서 검증하려는 : 우리가 integer 유형의 number 속성이있는 경우, 다른 측면에서

@Assert\NotBlank() 

,이 @Assert 주석을 사용할 필요없이 자동으로 유효성 검사 규칙으로 사용됩니다.

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

답변

3

기본적으로 두 상이한 층 가지고

페리 스턴스 계층은 메타 데이터를 사용하여 유효성 검사 규칙을 데이터베이스에 추가합니다. Doctrine2에서는 주석을 사용할 수 있지만 Propel에서는 XML을 사용하여 데이터베이스를 설명합니다. 주로 SQL 문을 정의하는 데 사용됩니다 (기본적으로 nullable=false은 SQL NOT NULL으로 변환됩니다).

유효성 검사 레이어는 응용 프로그램 수준에서 데이터의 유효성을 검사하는 데 사용됩니다. Doctrine2 메타 데이터는 데이터베이스를 구성하는 데 사용되는 반면 유효성 검사 레이어는 데이터베이스에 데이터를 삽입하기 전에 사용자의 데이터를 검증하는 데 사용됩니다.

비즈니스 유효성 검사 규칙과 같은 유효성 검사기 구성 요소를 사용하여 응용 프로그램 수준에서 더 많은 제약 조건을 추가 할 수 있습니다. 그리고 데이터를 검증하기 위해 데이터베이스에 의존해서는 안됩니다.

두 개의 서로 다른 우려가있는 두 개의 서로 다른 레이어가 있으므로 혼합해서 사용할 수 없습니다.

+0

@WilliamDURAND에게 감사드립니다. 그러나 사실 어떤 점에서는 두 레이어가 섞여있다. 앞서 말했듯이 ORM에 의해 'integer'제약 조건이 설정되면 이는 유효성 검사 레이어에서도 사용됩니다. 그러나 예를 들어, 'nullable' 제약 조건은 사용되지 않습니다. –

+1

Form 구성 요소에 포함되지 않았습니까? Form 구성 요소는 Doctrine 메타 데이터를 기반으로 유형을 추측 할 수 있으며 일부 유형은 유효성 검사를 구현합니다 (예 : HTML5 유효성 검사). –

+0

적어도 유효성 검사 구성 요소 여야한다고 생각합니다. 적어도 동일한 방식으로 작동합니다. HTML5 유효성 검사를 비활성화하고 서버가 필드 유형에 대한 오류 메시지를 표시하며 유효성 검사 제약 조건이 추가되지 않았습니다. 아마도 Form 및 Valdation 구성 요소가 어떤 시점에서 비슷한 동작을 할 수 있습니까 ?? : S –