2012-04-25 3 views
35

Symfony 2 용 REST API 컨트롤러를 만들고 있습니다. SensioGeneratorBundle을 사용하여 CRUD를 만들고 REST 컨트롤러로 작동하도록 컨트롤러를 수정했습니다. 그러나, 나는이 부분을 제거하는 것에 대해 생각하고 있으므로 양식이 없습니다.Symfony 2에서 형식이없는 엔티티 유효성 확인

양식없이 입력란의 유효성을 검사하려면 어떻게해야합니까? 모든 것이 양식에 연결되어 있으며 필자는 필드 이름을 사용자 정의하는 것을 포함하여 약간의 자유를 원합니다. 예를 들어, POST x와 y 필드는 Symfony가 제목과 내용으로 해석합니다.

답변

69

사실 양식은 유효성 검사와 직접 관련이 없습니다. 내가 설명 할께.

양식 구성 요소는 클라이언트에서 수신 한 데이터를 GET 또는 POST 데이터로 매핑합니다. 따라서 문자열을 코드의 객체에 매핑합니다 (엔티티에 바인딩하지 않으면 배열이 될 수 있음).

양식 데이터가 매핑 된 후에 유효성 검사기 구성 요소를 사용하여 유효성을 검사합니다. 이는 엔티티의 유효성 검사가 양식 구성 요소와 완전히 분리되었음을 의미합니다. 따라서 양식 유효성이 검사되면 양식 구성 요소가 양식 데이터가 아닌 개체를 확인한다는 의미입니다. 유효성 검사를받는 것은 양식이 아닌 엔티티입니다.

양식은 문자열 표현을 가져 와서 엔터티 계층 구조에 매핑하는 용도로만 사용됩니다. 설명서에는 FormValidation이 symfony의 고유 섹션 인 book으로 표시되어 있습니다.

즉, 이는 엔터티의 유효성 검사가 양식 구성 요소 외부에서 쉽게 수행 될 수 있음을 의미합니다. constaints를 주석 또는 외부 파일 (yml, php 또는 xml)로 정의하고 유효성 검사기 구성 요소를 사용하여 엔티티의 유효성을 검사합니다. 다음 코드 예제는 책의 Validation 섹션에서 촬영 : 당신이 볼 수 있듯이

use Symfony\Component\HttpFoundation\Response; 
use Acme\BlogBundle\Entity\Author; 
// ... 

public function indexAction() 
{ 
    $author = new Author(); 
    // ... do something to the $author object 

    $validator = $this->get('validator'); 
    $errors = $validator->validate($author); 

    if (count($errors) > 0) { 
     return new Response(print_r($errors, true)); 
    } else { 
     return new Response('The author is valid! Yes!'); 
    } 
} 

, 여기에 포함 된 어떠한 형태로, 단지 객체와 검증 서비스가 없다. 또한, Symfony2의 검증 구성 요소는 완전히 독립적입니다. 즉, 전체 프레임 워크없이 사용할 수 있습니다. 즉, 독립형으로 사용하면 다른 물건과의 통합이 느슨합니다.

이렇게하면 REST 서비스는 매개 변수를 받고, 엔터티를 만들고, 유효성 검사기 서비스를 사용하여 무결성을 검사합니다. 양식을 사용하여 엔티티의 유효성을 검사하지 않아도됩니다.

+1

Wondeful 대답, 정말 고마워요. – vinnylinux

+0

이 답변은 내 RESTful API를 만드는 동안 절대로 완벽했습니다. – Seer

+0

안녕하세요! 요청의 유효성을 검사 할 수 있습니까? 예를 들어 전자 메일과 키를 전달하는 요청에 대해 양식없이이 두 필드를 사용하여이 요청의 유효성을 검사하고 싶습니다. – SoldierCorp

관련 문제