2012-10-30 2 views
0

나는 YII로 등록 폼을 개발 중입니다. 내 양식에는 Mode1로 등록하거나 Mode2로 등록하는 라디오 옵션이 있습니다. 사용자가 mode1을 선택하면 데이터는 table1에 입력되거나 table2에 입력되어야합니다. YII에서 각 모델은 하나의 테이블을 처리합니다. 여기 내 양식은 두 개의 테이블을 다룹니다.복수의 테이블을 취급하는 YII 모델

그런 양식을 처리하여 YII에 데이터를 검증하고 입력하는 방법은 무엇입니까?

답변

3

가장 쉬운 방법은 (내가 GlobalFormModel으로이 모델을 참조 아래의 예에서)이 클래스는

CFormModel을 확장 할 것 (그들은 같은 필드가 가정?) 형태에 대한 하나 개의 모델을 만드는 것입니다

이 모델은 다른 두 모델과 동일한 속성을 가지며 모드라는 새로운 속성도 있습니다. 양식이 제출되면 컨트롤러에서 모델을 기반으로 처리하고 올바른 모델에 대해 유효성을 검사 할 수 있습니다. 예 :

$model = new GlobalFormModel 

if(isset($_POST['GlobalFormModel'])){ 
    $model->attributes = $_POST['GlobalFormModel']; 

    if ($model->mode == 1){ 
     $newmodel = new FormOne; 
     $newmodel->attributes = $model->attributes; 
    } else { 
     $newmodel = new FormTwo; 
     $newmodel->attributes = $model->attributes; 
    } 

    ... // validate and save $newmodel 
} 

$this->render("yourview",array("model"=>$model)); 

여기서 FormOne은 첫 번째 테이블과 연관된 모델이고 FormTwo는 두 번째 테이블과 연결됩니다. 먼저 (보기로 전달되는) GlobalFormModel의 새 인스턴스를 만듭니다. 양식이 제출되었는지 확인합니다 (여기에서 또는 두 모델 중 하나를로드 한 후 유효성을 검사 할 수 있습니다.). 모드를 확인한 다음 올바른 모델을로드하십시오.

+0

그래서, GlobalFormModel에서 규칙을 지정하고 싶지 않습니다 (다른 두 모델에서 지정된 규칙으로 충분하지 않습니다)? –

+0

음, 모델에 추가 속성을 추가 할 수 있습니다 (예 : FormOne). (뷰에 전달할 모델입니다.) 폼이 제출되면 그 속성 값이 무엇인지 확인하고 모델을 FormTwo로 변경하거나 FormOne을 유지할 수 있습니다. 그것은 똑같은 것이며, 단지 "전통적인" –