2011-09-11 2 views
0

두 개의 선택 상자가있는 양식이 있습니다. 선택한 국가에 따라 국가 및 도시, 도시가 있습니다. Ajax를 사용하여 국가를 선택하면 city 필드가 동적으로 채워집니다.젠드 양식 : 종속 필드 유효성 검사

지금까지 나는 도시 선택 상자에 을 덮어 씌우고 $context 인수를 사용하여 선택한 국가를 얻고 해당 도시가 유효한지 확인합니다.

국가 유효성 검사가 실패하면 도시 유효성 검사를 건너 뛰고 싶습니다. 예를 들어, 누군가가 국가 필드에 나쁜 값을 주입 할 수 있습니다 (국가 유효성 검사가 실패합니다). 그리고 도시 유효성 검사가 수행되어서는 안되며 db에 대한 쿼리를 수행하지 않아야합니다. 단순히 유효성 검사를 통과해서는 안됩니다.

내가 어떻게 이것을 달성 할 수 있습니까?

답변

3

country 요소가 설정되어있을 때 양식 클래스에 isValid()setDefaults() 메서드를 재정 의하여 city 요소를 채 웁니다.

function isValid($data) { 
    if (isset($data['country'])) { 
     $this->populateCity($data['country']); 
    } 
    return parent::isValid($data); 
} 

function setDefault($name, $value) { 
    if ('country' === $value) { 
     $this->populateCity($value); 
    } 
    return parent::setDefault($name, $value); 
} 
+0

이 방법은 나라가 유효하지 않은 경우 데이터베이스를 쿼리하여 도시를 선택하지 않습니다. 하지만 당신은 실제로 저에게 좋은 아이디어를주었습니다! 국가 요소가 유효한 경우에만 도시 요소를 채우는 것이 더 좋지 않겠습니까? 괜찮습니까? – s3v3n

+0

나는 해결책을 가지고있다. 나는이 문제를 실제로 해결 한 코드를 게시하고 나중에 받아들이도록이 답변을 편집 할 것입니다. – s3v3n

+0

아직이 답변을 편집 할 시간이 없었으므로이 답변을 수락 된 것으로 확인했습니다. 나는 isValid() 부분만을 사용했다. 어쨌든 고마워요! – s3v3n