我在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),
));
}
}
答案 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
));