【问题标题】:Do Partial Views Need Separate Controllers if they Use Different Models?如果使用不同的模型,局部视图是否需要单独的控制器?
【发布时间】:2012-09-05 02:03:54
【问题描述】:

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

我的 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),
    ));
        }
    }

【问题讨论】:

  • 你的意思是每个局部视图都需要自己的控制器动作吗?

标签: php yii


【解决方案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
            ));

【讨论】:

  • 鉴于添加的代码 sn-ps,如何在不干扰现有 loadModel sn-p 的情况下将 partialUser 模型包含在我的用户控制器中?
  • 它是否设置为模型中的关系?
  • 用户和用户详细信息表没有任何外键关系。但是,用户 ID 是在用户 deail 表中引用的。这应该设置为部分用户模型中的关系吗?
  • 是的,如果您设置了关系,则用户详细信息模型将可以在任何给定时间从用户模型调用。但既然现在还不行,我会告诉你一些代码来获取它。
  • 您应该在您的用户模型中将关系设置为最有可能的 HAS_ONE 关系。这样,无论何时您访问用户,您都可以访问他们的其他数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
  • 2017-05-15
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
  • 2012-09-07
  • 2019-03-29
相关资源
最近更新 更多