2014-02-24 2 views
1

두 필드가 포함 된 간단한 양식이 있는데, 첫 번째 필드는 선택이고 두 번째 필드에는 첫 번째 필드의 도움으로 확인해야하는 값이 들어 있습니다 .추가 데이터베이스를 사용하여 다른 필드를 기반으로 필드를 확인하십시오.

비슷한 질문이 Symfony2 form validation based on two fields 인 것을 발견했으며 콜백 유효성 검사기를 사용하려고했습니다.
documentation을 읽었지 만 데이터베이스에 액세스 할 때이를 어떻게 사용할 수 있는지 알 수 없습니다.

유일한 방법은 유효성 검사 메서드를 정적으로 호출하는 것인데이 경우에는 컨트롤러의 컨텍스트가 느슨합니다. 예를 들어 데이터베이스에 액세스해야합니다.
이 관계에서 나는 Silex를 사용 중이며 Silex가 제공하는 서비스에 액세스하려고합니다.

양식이 어떤 클래스에도 매핑되어 있지 않으므로 다른 필드를 유효성 검사기에 전달할 방법이 없으므로 양식 자체가 잘못 표시됩니다.

달성 방법이 있습니까?

아니면 다른 접근 방법이 필요합니까?

답변

2

나는 강하게

내가하는 방법에 대한 자세한 예를 작성했습니다 ... 당신이 클래스에 양식을지도하고 사용자 정의 제약 조건을 만들 조언 : 당신의 자신의 유효성 검사 제약 조건을 만들

  • 서비스로 돌려
  • 객체 관리자에게 제약에서
  • 액세스 데이터베이스를 주입

TLDR :

당신이 필요로하는 클래스 수준의 사용자 정의 유효성 검사기입니다.

이 전체 객체를 (뿐만 아니라 하나의 속성) 여러 관련 값을 확인하려면 액세스해야하기 때문에 클래스 수준의 검증이 필요

...

... 또는에서 무언가를 가져 오기 위해 필요 다른 속성을 선택 기준으로 사용하는 데이터베이스

여기는 the complete answer with example입니다.


또 다른 옵션은 양식에 추가하기 전에 양식 이벤트 리스너를 작성하고 오브젝트 관리자를 전달하는 것입니다.

그런 다음 자체적으로 수신기 내부에서 유효성 검사 프로세스 (데이터베이스에 대한 데이터 확인 및 양식에 오류 추가)를 처리하십시오.

+0

조언과 링크 덕분에 아주 좋은 소리입니다. 당신의 대답에 대한 하나의 질문, 첫 번째 버전은 비행 중에 수업에 대해 뭔가를 가지고있었습니다. 그 방향으로 더 많은 정보를 주실 수 있습니까? 내 양식은 실제로 수업과 관련이 없습니다. – CSchulz

+0

클래스를 생성하고, 폼 데이터를 설정하고, 유효성 검사 클래스 메타 데이터를 추가하고 이후 유효성 검사기 서비스에 전달하므로 기본적으로 폼에 어떤 매핑이 적용되는지 제거했습니다. 바퀴를 다시 발명하지 마십시오. 양식 데이터가 실제로 다른 클래스와 관련이 없더라도 ... OOP 방식으로 작성하고 클래스를 작성하십시오. 노력할만한 가치가 없습니다.하지만 심포니의 구성 요소를 익히고 익숙해지기를 원한다면 ... 그 모든 것을 함께 해결할 수 있습니다! :) – nifr

관련 문제