0

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

我的用户控制器的 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),
    ));
        }
    }
4

1 回答 1

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
            ));
于 2012-09-04T17:01:50.550 回答