Автоматическая проверка кодов в зависимости от значения сеанса - PullRequest
0 голосов
/ 25 мая 2018

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

Это на самом деле работает, но только когда я получаю эту модель.

class News_model extends CI_Model {

public function __construct()
{
    parent::__construct();
    if($this->session->dbname=='db1'){
        $this->db=$this->load->database('db1', TRUE); 
    }       
    else{
        $this->db=$this->load->database('db2', TRUE); 
    }
}
public function get_news($slug = FALSE)
{
        if ($slug === FALSE)
        {
                $query = $this->db->get('news');
                return $query->result_array();
        }

        $query = $this->db->get_where('news', array('slug' => $slug));
        return $query->row_array();
}
}

Но я не боюсь включать этот код __construct во все мои модели или контроллеры.

Я попытался добавить в свой autoload.php

$autoload['model'] = array('General');

Где мой общий код выглядит примерно так:

class General extends CI_Model {

function __construct()
{
    parent::__construct();
    if($this->session->dbname=='db1'){
        $this->db=$this->load->database('db1', TRUE); 
    }       
    else{
        $this->db=$this->load->database('db2', TRUE); 
    }
}
}   

Как я могу это сделать?

1 Ответ

0 голосов
/ 25 мая 2018

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

Я упростил код проверки и загрузки.Простой троичный определяет строку для использования и сохраняет ее в переменной $dbname.Эта переменная используется для загрузки базы данных, т.е. $this->load->database($dbname);.

Не думаю, что вам нужен второй аргумент для load::database(), что означает, что вам не нужно явно указывать $this->db.Если я не прав, используйте

$this->db = $this->load->database($dbname, TRUE);

Ниже приведена "базовая" модель.Префикс имени файла определяется в config.php с параметром $config['subclass_prefix'] = 'MY_'; Настройте имя файла и класса вашей базовой модели в соответствии с используемым вами «subclass_prefix».

/ application / core / MY_Model.php

<?php
class MY_Model extends CI_Model
{
    public function __construct()
    {
        parent::__construct();
        $dbname = $this->session->dbname == 'db1' ? 'db1' : 'db2';
        $this->load->database($dbname);
    }

}

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

class News_model extends MY_Model
{
    public function get_news($slug = FALSE)
    {
        if ($slug === FALSE)
        {
            $query = $this->db->get('news');
            return $query->result_array();
        }

        $query = $this->db->get_where('news', array('slug' => $slug));
        return $query->row_array();
    }
}
...