Codeigniter的面向对象方案

时间:2012-06-14 06:28:41

标签: php oop codeigniter object

我想清楚这一点。我正在使用codeigniter。

在构建Web应用程序时,codeigniter中的OOP设计更好/更适合/标准/最受欢迎的方式是什么?

通常,

予。 创建像User这样的自定义类并具有登录功能?赞,

     class User{ 
            var $db, $id, $username, $password, $role; //have all user attributes here

            function __construct() {
               //instance for accessing the database
               $this->db =& get_instance();
            }

            public function login(){
                //do the login here
                $this->db->load->model('user_model');   
                $success = $this->db->user_model->login($this->username, $this->password);      
                //isn't this redundant using models? or should I rename the model function name like checkLogin?
                return $success;
            }

            //other class functions 
        }

OR

II。 从控制器直接调用模型中的登录函数而不创建用户对象?

O_O

在方案1中,我正在使模型仅在数据库中进行查询。 我也可以像'Client','Admin'那样继承'User'对象,并为每个对象添加特定的功能。我有一个好处,就是让CI控制器专注于布局并将变量传递给视图,这主要是它的目的(不太确定),让我的自定义类/对象处理我的Web应用程序中的操作。 但是我觉得我的登录功能有冗余,我在模型中调用了另一个登录功能。这好吗?

在方案2中,让控制器处理登录,注册或创建日志和接收输入帖子以及将变量传递给视图等所有操作是否合适?

我真的需要一些指导。 我的OO技能需要增长。

非常感谢你!

3 个答案:

答案 0 :(得分:2)

首先,我认为阅读本章对你有用:

Access Control List

我现在正在开发一个使用CodeIgniter的项目,我们在这里使用的方法也可能适合你。如果你需要检查授权,我认为最好的地方是在类的构造函数中调用登录函数,如果用户尚未注册。但这是一个通用的方法,所以如果你有一些类只有注册用户才能使用某些函数,那么你应该在函数内部进行检查。

答案 1 :(得分:1)

如果您真的想要遵循严格的OO模型,您应该考虑使用DataMapper。很多人会说它会减慢应用程序的速度,但是这是你为完整的OO支付的价格。您可以做的是创建一个User类来处理所有数据操作并将登录名移动到Auth库,该库可以与您的User模型一起使用。并记住模型使用/做数据操作控制器存储业务逻辑。我也在学习,希望这篇文章可以帮助你。

答案 2 :(得分:0)

如果此模型将被使用多次,那么创建一个对象并在构造函数中加载模块总是一个好主意。

但我不建议你在构造函数中使用$this->db =& get_instance();。这应该已经自动加载了。