部分视图是否需要单独的控制器,如果他们使用不同的模型?

时间:2012-09-04 16:38:39

标签: php yii

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

User控制器的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),
    ));
        }
    }

1 个答案:

答案 0 :(得分:1)

我想我明白你要做什么。我的答案是否定的,您不需要为每个局部视图单独的控制器操作。我会创建一个视图,然后调用所有部分视图。如果使用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
            ));