php - 我如何分离一个功能,并将其调用给我的所有控制器
问题描述
我有一个函数,它是一个很长的函数,这个函数需要在我所有的控制器中运行,特别是在索引函数中,以便在我的控制器的每个负载中运行这个函数。我尝试使用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);
}
}
}
}
}
有没有办法可以为我的所有控制器调用它?所以不要把这个很长的函数放在我的每个控制器中。
解决方案
如果您有一个所有其他控制器都扩展的基本控制器类,则可以在那里定义 index 方法。
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
}
}
老实说,我并没有真正过多地研究您的特定功能的作用,但是这种模式可以很好地解决您描述的一般问题。