2015-01-21 2 views
0

양식의 선택에 따라 다른 시나리오가 필요한 양식이 있습니다. 예 : 사용자가 청구서 수신 주소와 다른 상점에 배달 주소를 추가하도록 선택할 수 있습니다 (실제로는 3 개 또는 4 개의 다른 시나리오가 있습니다).yii에서 시나리오를 결합하는 방법

양식의 유효성을 검사 할 때 사용자의 선택에 따라 두 가지 시나리오 (청구서 수신 주소 용과 배달 주소용)를 결합해야합니다.

두 시나리오를 어떻게 결합합니까?

답변

1

시나리오를 규칙 구성으로 그룹화 할 수 없습니다. 대신 규칙 목록을 하나씩 만듭니다.

필드 집합에 둘 이상의 시나리오를 적용 할 수 있습니다. 예를 들어

:

public function rules() 
{ 

    return array(
     // For purchases, supply the delivery address 
     // For registration, supply the postal address 
     // For payment, supply the delivery address and postal address 

     array('delivery_address', 'required', 'on' => array('purchase', 'payment'), 
     array('postal_address', 'required', 'on' => array('register', 'payment'), 
       // : 

    ); 
} 

당신은 '조건'시나리오를 가질 수 없습니다. 조건부 규칙을 구현하려면 사용자 지정 유효성 검사를 구현하십시오.

public function rules() 
{ 
    return array(
     array('postal_address', 'validateAddresses'), 
    ); 
} 

public function validateAddresses($attribute,$params) { 
    if (!$this->deliveryAddressSameAsPostal) { 
     if ((empty($this->delivery_address)) { 
     $this->addError($attribute, 'Please supply a delivery address!'); 
     } 
    } 
} 
+0

감사합니다. 문제는 배달 주소가 사용자가 우편 주소와 다를 경우에만 배달 주소가 필요하다는 것입니다. 따라서 나는 그것에 대한 시나리오를 만들 수 없다. 조건부 시나리오와 같은 것이 있습니까? – Swissdude

+0

예를 들어, 시나리오와 규칙이 혼란 스럽습니다. 내 업데이 트를 참조하십시오. – crafter

관련 문제