我应该扩展控制器还是创建助手?

问题描述:

I need to access some functions in multiple controllers in a CodeIgniter application. At the moments the functions are really basic and a few, For example:

        generate_random_key()  //just a random string
        is_logged()           //check if user is logged or not
        logged_user_only()    //if unlogged, redirect
        unlogged_user_only() //if logged, redirect

As these functions are related to login, I can either put them in a helper file and place in Application/helpers/login_helper.php

OR

i can extend the CI_Controller, by creating MY_Controller.php and put it in Application/Core/MY_Controller.php

Both of the methods work, but I am wondering which one fits better for this kind of task. I think there should be some rules, when the Controller should be extended or when the helper should be used?

我需要访问CodeIgniter应用程序中多个控制器中的某些函数。 此时函数非常基本和一些,例如: p>

  generate_random_key()//只是一个随机字符串
 is_logged()//检查用户是否已记录 或者不是
 logged_user_only()//如果未记录,则重定向
 unlogged_user_only()//如果已记录,则重定向
  code>  pre> 
 
 

由于这些功能与登录相关,因此 可以将它们放在帮助文件中并放在 Application / helpers / login_helper.php code> p>

OR strong> p>

我可以通过创建 MY_Controller.php code>扩展CI_Controller并将其放入 Application / Core / MY_Controller.php code> p> div>

If you're using these functions in your other controllers (and only in your other controllers) I would suggest refactoring them into MY_Controller. This would also give you direct access to the $CI instance (instead of calling get_instance())

On the other hand, you could create an Authentication library. This might be more suitable..

EDIT::

I would recommend having a MY_Controller as a base, that contains auth wrapper functions, which invoke functionality from a Library that manages this type of thing.

IMO, login functionality has nothing to do with a Controller. That's the reason I would probably put the functions you mention into a helper or a library.

The solution I m thinking:

If you want to follow design pattern, use hook(works like a filter from Java perspective).

Alternate should be extending your My_Controller