Автозагрузка модели и вызов функции внутри этой модели для всего проекта - PullRequest
0 голосов
/ 01 марта 2019

Мне нужна функция (буквально мне нужна $data) из этой модели во всем проекте.когда я звоню в какой-то контроллер $data = $this->multi_language_model->multi_lang();, он работает нормально.Но можно ли звонить в одно место, чтобы я мог использовать на каждом контроллере и просматривать.

Я автозагрузка модели $autoload['model'] = array('multi_language_model');

class Multi_language_model extends MY_Model
{
    public function __construct() {
        parent::__construct();

    }
    public function multi_lang() {            
        $data['menu_delivery'] = $this->lang->line('menu_delivery');
        $data['menu_quotations'] = $this->lang->line('menu_quotations');
        $data['menu_customer_service'] = $this->lang->line('menu_customer_service');  
    return $data;

   }
}

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Поместите эту вспомогательную функцию в любой загруженный помощник:

function get_multi_lang(){
    $CI = & get_instance();
    $data = array();
    $CI->load->helper('language');
    $CI->lang->load('menu','english');
    $data['menu_delivery'] = $CI->lang->line('menu_delivery');
    $data['menu_quotations'] = $CI->lang->line('menu_quotations');
    $data['menu_customer_service'] = $CI->lang->line('menu_customer_service');  
    return $data;
}

Контроллер:

class Yourclassname extends CI_Controller {

    var $menu_delivery = "";
    var $menu_quotations = "";
    var $menu_customer_service = "";

    function __construct() {
       parent::__construct();
       $data = get_multi_lang();
       $this->menu_delivery = $data['menu_delivery'];
       $this->menu_quotations = $data['menu_quotations'];
       $this->menu_customer_service = $data['menu_customer_service'];
    }

    public function index(){
      echo $this->menu_delivery.'<pre>';
      echo $this->menu_quotations.'<pre>';
      echo $this->menu_customer_service.'<pre>';die;
    }
}

Если вы не хотитеиспользуйте вспомогательную функцию, затем копируйте вспомогательные функциональные строки в контроллер __construct () [заменяйте $ data на $ this ->], так что непосредственное использование глобальных переменных делает то же самое в модели, и для просмотра передайте эту переменную через контроллер

0 голосов
/ 01 марта 2019

Я не знаю, как работает codeigniter, но, возможно, вы могли бы сделать этот метод статичным и использовать его следующим образом:

class Multi_language_model extends MY_Model
{
    private static $data = [];

    public function get_multi_lang()
    {
        return [
            'menu_delivery' => $this->lang->line('menu_delivery'),
            'menu_quotations' => $this->lang->line('menu_quotations'),
            'menu_customer_service' => $this->lang->line('menu_customer_service'),
        ];
    }

    public static function multi_lang()
    {       
        if (empty(self::$data)) {
            self::$data = (new self)->get_multi_lang();
        }    

        return self::$data;
    }
}

Затем, когда вам это нужно, вы можете использовать $data = Multi_language_model::multi_lang();

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

Кстати, вам не нужно перезаписывать конструктор класса, если для расширяющего класса нет пользовательских параметров.Вы можете безопасно удалить:

public function __construct() {
    parent::__construct();
}
...