Как я могу отделить одну функцию, и будет вызывать ее для всех моих контроллеров - PullRequest
0 голосов
/ 03 октября 2019

У меня есть одна функция, это очень длинная функция, эту функцию нужно запускать на всех моих контроллерах, в частности, в индексной функции, чтобы при каждой загрузке моего контроллера эта функция выполнялась. Я пытался использовать 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);
                         }
                   }
                }
            }
}

есть ли способ, которым я могу вызватьэто для всех моих контролеров? поэтому вместо того, чтобы помещать эту очень длинную функцию в каждую мою независимость от моих контроллеров.

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Если у вас есть базовый класс контроллеров, который расширяют все остальные ваши контроллеры, вы можете определить там метод индекса.

class BaseController
{
    public function index() {
        // code that you want to run in every controller
    }    
}

Если дочернему классу необходимо предоставить дополнительные функции, вы можете переопределить метод индексавызовите родительский индексный метод там, чтобы вызвать базовую функциональность, затем напишите больше кода, чтобы определить, что еще нужно сделать, кроме этого.

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

Я действительно не слишком много смотрел на то, что ваша конкретная функцияесли честно, но этот шаблон может хорошо работать для решения общей проблемы, которую вы описали.

0 голосов
/ 03 октября 2019

перейдите в основную папку под приложением, затем создайте файл с именем 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!";  
        }
      }

, как вы видите код над классом MY_Controller распространяется на встроенный контроллер CI, который является CI_Controller . Все, что вы можете сделать дальше, это расширить ваш New_Controller до MY_Controller , чтобы вы могли использовать свою функцию динамически.

написать что-то вроде этого.

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

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

Надеюсь, это поможет ..:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...