CI:在控制器中使用相同功能的最佳实践

时间:2015-02-24 14:07:46

标签: php codeigniter

我有班级名称​​ Deal 并且其中包含名称为 addit

的功能
class Deal extends CI_Controller {
   public function addit() {
      //my function
   }
}

我有另一个控制器名称​​ Public ,我希望通过扩展它来使用属于类Deal的函数 addit

class Public extends Deal {
       public function addit() {
          //my function
       }
}

我在Codeigniter中很新,只读了一些参考文献,看了这个网站上的另一个问题,并且已经有了一些答案,但我不知道哪一个是最佳实践,这里有一些解决方案我找到了:

1.创建 Deal 文件并保存在应用程序/库函数中,以便其他控制器可以使用其功能。

2.在application / helper上创建 addit 函数,以便我们可以在任何地方使用它的函数。

3.在应用程序/核心中创建 Deal 文件,以便其他控制器可以使用其功能。

我的问题是,解决我的问题的最佳做法是什么,还有其他解决方案吗?

1 个答案:

答案 0 :(得分:3)

这取决于我们在这里讨论的功能类型。 如果它是一个非常简单的功能,它不进行任何数据库访问或与CI组件进行交互,那么您可以创建一个帮助程序:

来自codeigniter文档的引用:

  

助手不是以面向对象的格式编写的。它们简单,   程序功能。每个辅助函数执行一个特定的任务,   不依赖于其他功能。

http://www.codeigniter.com/user_guide/general/helpers.html


但是,如果它是一个相对复杂的代码,那么你应该考虑编写一个库:

在应用程序/库中创建Tools.php(或任何你想要的)

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Tools
{
  protected $ci;

    public function __construct()
    {
        $this->ci =& get_instance(); 
        //Allows you to access CI components
    }

    public function myfunction($data)
    {
       //If you want to use codeigniter's functionalities :
       //use $this->ci->function()
    }

}

然后在你的控制器中:

$this->load->library("tools");
$this->tools->myfunction($data);

如果您的库经常被使用,您可以在config / autoload.php中一次性加载它:

$autoload['libraries'] = array('database', 'tools', '...');

关于图书馆的CI文档:http://www.codeigniter.com/user_guide/general/creating_libraries.html


选项3并不适合您的问题,因为您没有扩展CI本身。

来自评论:顾名思义,&#34;核心&#34;是为了改善CI的核心。如果您不喜欢CI处理会话的方式,那么您可以编写一个新的核心类,但是,如果它与您的用户管理系统相关,那么它涉及您的应用而不是框架,应该是在lib中完成。