0

而是一个基本问题,尽管我对架构有点困惑。
我正在使用 Yii 框架编写一个网站。
有一个 SiteController 和 AdminController(不是我建造的)。
所有站点管理都在 AdminController 中,用户交互在 SiteController 中。
我知道这是不正确的,因为它不是基于模型的。

现在,我想实现用户注册。用户可以注册,管理员可以更改他的属性。
在现有控制器中构建 UserController 或管理上述所有内容更好(不破坏以前的逻辑)?

4

2 回答 2

4

根据 MVC 标准,最好按功能组拆分控制器。

认证控制器

处理身份验证/注册/删除。为所有其他控制器首先检查的登录设置会话变量。

function register(){
}
function logout(){
}
function edit(){
}
function login(){
}

管理员控制器

处理所有管理任务

用户控制器

处理所有用户任务。也许编辑个人资料,或发布到个人博客?

前控制器

处理所有面向公众的任务,显示非基于身份验证的页面等。


不相关,CodeIgniter 示例

我在我的 CI 项目中使用这种方法。这些信息会因 Yii 框架而异,但它可以让您了解正确的 MVC 设置。

我有核心控制器,例如:

application/core/FRONT_Controller.php 这个控制器扩展了 CI_Controller 并处理了我面向 pub 的页面的所有设置。我所有面向公众的控制器都扩展了 FRONT_Controller 而不是 CI_Controller。

application/core/USER_Controller.php 这个控制器处理我所有的用户身份验证。

application/core/ADMIN_Controller.php 此控制器进行初步检查,我所有基于管理员的控制器再次扩展此控制器,因此身份验证立即启动...... IE:

if (!$this->tank_auth->is_logged_in()){
        redirect(site_url('/user/login/'));
    }else{
        $this->data['user'] = array(
            'user_id' => $this->tank_auth->get_user_id(),
            'username' => $this->tank_auth->get_username(),
            'emailAddress' => $this->tank_auth->get_email(),
            'firstname' => $this->tank_auth->get_firstname(),
            'lastname' => $this->tank_auth->get_lastname(),
            'userlevel' => $this->tank_auth->get_userlevel(),
            'avatar' => $this->tank_auth->get_avatar(),
            'last_login' => $this->tank_auth->get_last_login()
        );
    }

application/controllers/blog.php:

class Categories extends ADMIN_Controller{

function __construct(){
    parent::__construct();

} #end constructor function
于 2012-04-10T13:12:29.940 回答
0

用户详细信息将存储在一个表中,即 tbl_users。为这些用户和相关控制器创建模型是使用 Yii 的正确方法。

您将拥有一个带有验证规则的模型user.php,以及指向 dbtable 的链接

您将拥有一个控制器UserController.php,其中包含与此模型相关的所有操作和相关访问规则。

我通常使用的是 SiteController.php 中的 actionRegister()覆盖UserController,您可以将其用于管理目的或根本不使用。

所以你会有类似的东西:

yousite.com?r=site/register 或 yoursite.com/register/ 如果您使用 url 重写

于 2012-04-10T13:11:57.950 回答