Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何分离一个函数,并将其调用到所有控制器_Php_Codeigniter - Fatal编程技术网

Php 如何分离一个函数,并将其调用到所有控制器

Php 如何分离一个函数,并将其调用到所有控制器,php,codeigniter,Php,Codeigniter,我有一个函数,它是一个很长的函数,这个函数需要在我所有的控制器中运行,具体来说,在索引函数中,这样在我控制器的每次加载中,这个函数都会运行。我试图使用include,但没有成功。我使用HMVC作为我的模式 我知道这不是一个好主意,但是,下面是我函数的外观 public function sample(){ foreach($this->First_model->getID() as $data) { if

我有一个函数,它是一个很长的函数,这个函数需要在我所有的控制器中运行,具体来说,在索引函数中,这样在我控制器的每次加载中,这个函数都会运行。我试图使用
include
,但没有成功。我使用HMVC作为我的模式

我知道这不是一个好主意,但是,下面是我函数的外观

public function sample(){
            foreach($this->First_model->getID() as $data)
            {
                if($this->First_model->getNewData($data["id"]) == 0)
                {
                    if((date('d')) == $data["month"])
                   {
                        $in = date_create($data["date_of_activation"]);
                        $end_date = date_modify(date_create($in->format('Y-m-' . $data["month"])),"+1 month")->format('Y-m-d');

                        if($this->First_model->check_history($data["id"]) >=1)
                        {
                            $price = $this->First_model->getElectricity_with_history($data["id"],$data["date_of_activation"],$end_date);

                        }
                        else
                        {
                                $price = $this->First_model->getElectricity_no_history($data["id"],$data["date_of_activation"],$end_date);

                        }

                        if($this->First_model->check_data($data["id"])== 0)
                         {
                            $data = array(
                                "id" => $data["id"],
                                "is_updated" => "0",
                                "total" => $price->price
                            );

                            $this->First_model->insert_data($data);
                         }
                   }
                }
                else
                {

                   if((date('d')) == $data["month"])
                   {
                        $start = date("Y-m-d", strtotime("+ 1 day - 1 month"));
                        $end = date("Y-m-d", strtotime("+ 1 day"));

                        $price = 0;
                        if($this->First_model->check_history($data["id"]) >=1)
                        {
                            $price = $this->First_model->getValue_history($data["id"],$start,$end);

                        }
                        else
                        {
                             $price = $this->First_model->getElectricity_no_history($data["id"],$start,$end);

                        }

                        if($this->First_model->check_if_has($data["id"])== 0)
                         {
                            $data = array(
                                "id" => $data["id"],
                                "is_updated" => "0",
                                "total" => $price->price
                            );


                            $this->First_model->insert_data($data);
                         }
                   }
                }
            }
}

有没有一种方法可以为我所有的控制器调用这个?因此,不要将这个很长的函数放在我的控制器的每个索引中。

如果您有一个所有其他控制器都扩展的基本控制器类,您可以在那里定义索引方法

class BaseController
{
    public function index() {
        // code that you want to run in every controller
    }    
}
如果子类需要提供额外的功能,您可以重写index方法,在那里调用父index方法来调用基本功能,然后编写更多代码来定义除此之外需要执行的任何其他操作

class SomeController extends BaseController
{
    public function index() {
        parent::index();
        // code specific to the child controller
    }
}

老实说,我并没有过多地研究您的特定函数的功能,但是这种模式可以很好地解决您描述的一般问题。

转到应用程序下的核心文件夹,然后创建一个名为
MY_Controller.php的文件。

然后编写以下代码:

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

     class MY_Controller extends CI_Controller
      {
        public function sample(){
             echo "Hello World!";  
        }
      }

你好,我听不懂你的标题。你能换个说法吗?嗨,我能为我的模特做这个吗?@JanessaBautista,是的,你能。
<?php
        defined('BASEPATH') OR exit('No direct script access allowed');

         class New_Controller extends MY_Controller
          {
            public function index(){
                 $this->sample(); //calling your function.  
            }
          }