如果局部视图使用不同的型号,是否需要单独的控制器


Do Partial Views Need Separate Controllers if they Use Different Models?

我在Yii Framework网站上为一个页面创建了一系列局部视图。每个局部视图都有自己的模型,因为它们调用主模型类的子部分。由于每个局部视图都有自己的模型,我是否需要为每个视图单独的控制器类?

我的用户控制器的loadModel部分如下:

public function loadModel($id,$model_name='Users')
{
    $model=Users::model()->findByPk($id);
    if($model===null)
        throw new CHttpException(404,'The requested page does not exist.');
    return $model;
}

它是从用户控制器的这一部分调用的:

 public function actionProfile($id=''){        
        $user = Users::model()->find('username=:id', array
                (':id' => Yii::app()->user->id));           
        if(!$id){
            $id = $user->id;
            if(!$id)
            $this->redirect('login');
        }
        if( getUserSess('user_type') == 'Sitter') {
            $this->render('profile_detail', array('user_id' => $id ));
        } else {
            $this->render('petowner_profile_detail',array(
        'model'=>$this->loadModel($id),
    ));
        }
    }

我想我理解你想要做的。我的答案是否定的,你不需要为每个局部视图单独的控制器操作。我会创建一个视图,然后调用所有局部视图。如果你使用gii来创建CRUD功能,你会看到创建和编辑视图都调用了表单的部分视图。你只会在视图文件中调用多个部分视图。如果您需要不同的模型,只需确保控制器首先将它们传递到主视图文件中,这样它就可以将它们传递给局部视图。希望这能帮到你。

如果没有关系,下面是代码:

$partialUser = new PartialUser::model->findByAttributes(array('uid'=>$id)); //IF NOT UID PUT WHATEVER YOU HAVE THE COLUMN NAME
            $this->render('petowner_profile_detail',array(
                'model'=>$this->loadModel($id),
                'partialUser' => $partialUser,
            ));

如果你确实建立了关系,你可以很容易地做到这一点:

$current_user = $this->loadModel($id);
            $this->render('petowner_profile_detail',array(
                'model'=> $current_user,
                'partialUser' => $current_user->partialUser, //whatever you set the name of the relationship as in the model
            ));