4

저는 젠드 애플리케이션에 대해 연구하고 있습니다 만, 젠드에 대한 많은 경험이 없으므로 내 RubyOnRails 경험에만 의존하고 있습니다.젠드 모델 유효성 확인

몇 가지 기사에서 나는 대부분의 유효성 검사가 Forms 레벨에서 구현되었음을 발견했습니다. Zend_Form. 그러나 나를 위해 이상하게 보입니다 - 모델 레벨에서 유효성 검증을하는 방법 - 양식 데이터를 기반으로 모델을 작성하고 $model->isValid();과 같은 smth를 실행하면 양식 요청없이 일부 모델을 작성하는 것이 좋습니다.

내 현재의 모델 흐름 :

ProductMapper extends Zend_Db_Table 
Product extends Zend_Db_Table_Row 

그리고 나는 단순히 isValid 방법 내에서 정규식으로 확인을 할 수 있다는 걸,하지만 내가 원하는 내가

$mapper = new ProductMapper(); 
$product => $mapper->find(...); 

// Do some staff with this model 
// And want to check if it's valid before saving 

if ($product.isValid()) { 
    $product.save(); // Zend_Db_Table_Row method 
} else { 
    ... 
} 

같은 것을하고 있어요 제공 Zend_Form에서 이미 구현 된 메서드를 사용하려면 addValidator, addFilter과 같은 유용한 것들을 모두 사용하십시오.

Zend에서 모델을 관리하는 올바른 방법은 무엇입니까?

도움이나 의견을 보내 주시면 감사하겠습니다. 당신은 Zend_Form와 동일한 필터 및/또는 유효성 검사기를 사용할 수 있지만 어디 당신이 할 수있는이

$validator = new Zend_Validate_Allnum(); 
if ($validator->isValid($data) 
do some code 

또는

$filter = new Zend_Filter_StringTrim(); 
$filteredVal = $filter->filter($val); 

같은 당신이 당신의 행 클래스에서 자신의 방법 isValid()를 만들 수 있습니다

답변

2

유효성을 검사하고 값을 필터링하는 논리를 수행하십시오.

+0

추측하기 쉽습니다. Zend lib 폴더를 확인해야합니다 :) 감사합니다! – fantactuka

1

Zend의 모델은 Db 객체의 표현 일뿐만 아니라 실제로 대부분의 객체는 데이터베이스와 관련이 없으며 Model 비즈니스 로직 용. 이 컨텍스트에서 글로벌 유효성 검사 방법을 갖는 것이 타당하지 않습니다. Zend_Db_Table과 Row는 기본 키인지 확인하는 것과 같이 db 객체로 재생할 때 몇 가지 검사를 수행하지만 Active Record와 같은 것을 원한다면 직접 이러한 클래스를 확장해야합니다.

+1

동의하지만,'Zend_Db_Table_Row'는 db 행을 표현하기 때문에 유효성 검사가 가능합니다. 기본 모델은 그것을 필요로하지 않습니다. – fantactuka

0

db-layer (ZF 개체 테이블, 행)가 유효성 검사를위한 올바른 장소라는 데 동의하지 않습니다. IHMO 유효성 검사는 응용 프로그램 논리 또는 bussiness 제약입니다.

유효성 검사 프로세스는 콘크리트 모델에 배치되어야합니다. DB 계층은 깨끗해야하며 단순히 데이터베이스 작업 (삽입, 업데이트, 삭제, 선택) 만 수행하면됩니다.

모델은 필요한 속성 (또는 속성의 데이터 유형)을 알아야 유효성을 확인할 수 있습니다. 로

Elzo said - 일부 모델 DB 오브젝트를 표현하지 않는 - 그래서 당신은 데이터베이스 기반 모델을 확인 하나의 방법이있다 인터페이스 IPersistenceable을해야한다. 이 모델은 자신의 유효성 알고리즘을 구현해야합니다.

이 접근법은 유용합니다. 각 모델은 다양한 유효성 검증 방법을 가질 수 있습니다. 다음 접근법 - 기본 키 + 검증 메소드의 기본 유효성 검사를 사용하여 추상 클래스를 만들 수 있으며 각 지속 가능 모델은이 클래스를 확장합니다.