2014-10-30 3 views
0

내 응용 프로그램에는 ModelA의 인스턴스를 만들 수있는 양식이 있습니다.Yii - 다른 모델 컨트롤러 액션에서 모델 만들기

그러나이 양식을 제출할 때 폼 제출에서 오는 데이터로 ModelB의 인스턴스를 만들고 싶습니다. 그러나, 제출 후, 내가 만든 ModelA의 견해를 보여주고 싶습니다. 간단히 말해서 ModelB이 자동으로 생성되기를 바랍니다.

ModelAactionCreate() 내부 컨트롤러 B의 인스턴스를 생성하여, B의 방법 actionCreate() actionCreate() ModelB의 호출의 접근을 시도했다. 그러나 이것은 나에게 맞는 것 같지 않습니다.

public function actionCreate(){ 
    $model = new ModelA; 

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

     $modelB = new ModelB("create"); 
     $res = $modelB->actionCreate(); 

     if($res && $model->save()){ 
      $this->redirect(array('view','id'=>$model->id)); 
     } 
    }  
    $this->render('create',array(
     'model'=>$model, 
    )); 
} 

또 다른 접근법은 ModelA의 actionCreate 메소드에서 직접 ModelB를 작성하고 저장하는 것입니다. 그러나 코드 반복이 있고 사용자 권한 조치 규칙으로 인해 위험 할 수 있기 때문에 이것 역시 옳은 것처럼 보입니다.

내 질문은 : 더 좋은 접근 방법입니까, 아니면 이렇게하는 것이 좋을까요? 측면에 ModelB을 어떻게 안전하고 효율적으로 만들 수 있습니까?

감사합니다.

답변

0

하나의 컨트롤러 동작에서 여러 모델을 만드는 데는 아무런 문제가 없습니다. ModelBactionCreate 액션으로 인스턴스화하는 데 필요한 모든 데이터가있는 경우 계속 진행하십시오. 그러나 당신의 말은 '소리없이 만들어라'는 말로하면이 두 모델을 많이 연결하지 않고도보다 효율적으로 해결할 수있는 문제를 해결하려고한다고 생각하게 만듭니다.

예를 들어, 새로운 사용자가 등록되면 환영 이메일을 보내려고합니다. 제어기에서 바로 그 동작을 하드 코딩 할 수 있지만보다 우아한 해결책은 Yii의 기본 제공 메커니즘 인 events을 활용하는 것입니다. 그러나 그것은 단지 추측 일뿐입니다.

+0

감사합니다. 그것으로보고. :) – MobileCushion