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.
}
}