Вопрос по database, config, codeigniter – Чтение значений конфигурации CodeIgniter из базы данных вместо файла конфигурации

3

Как вы, возможно, знаете, когда вы создаете новый проект с помощью CI, вам придетсяmanually enter базовый URL,encryption key в config / config.php. Я пытаюсь преодолеть это и, следовательно, ищу способread эти ценностиfrom a database instead - сделать установку для клиента иset up time в целомdecrease много.

Клиент не может редактировать переменные файла PHP, но, скорее всего, может, с некоторыми указаниями, ввести базовый URL и иметь ключ шифрования, автоматически заполняемый системой.

Есть ли способ сделать это?

Зар, с версии 2 тыdon't надо ввести базовый URL в конфигурационный файл вообще. Кроме того, вы не можете начать сеанс без ключа шифрования, поэтому вы также можете записать значение в файл с помощью сценария установки, который не требует сеанса / входа в систему, что означает, что вам может не потребоваться чтение конфигурации из БД вообще. Wesley Murch

Ваш Ответ

3   ответа
0
 class name extends CI_Controller {
    public $DB1;
    public $MSSQL;
    public function __construct()
     {
    parent::__construct();
        $userid = $this->session->userdata('userids');
          $this->load->model('kubix');
          $result = $this->kubix->databaseconncetion($userid);
        foreach ($result as $deta)
          {

      $this->MSSQL=$db['MSSQL'] = array(
      'hostname' => $deta["Db_base_ip"],
      'username' => $deta["Db_username"],
      'password' => $deta["db_password"],
      'database' => $deta["Db_base_name"],
      'dbdriver' => 'sqlsrv',
      'dbprefix' => '',
      'pconnect' => FALSE,
      'db_debug' => (ENVIRONMENT !== 'production'),
      'cache_on' => FALSE,
      'cachedir' => '',
      'char_set' => 'utf8',
      'dbcollat' => 'utf8_general_ci',
      'swap_pre' => '',
      'encrypt' => FALSE,
      'compress' => FALSE,
      'stricton' => FALSE,
      'failover' => array(),
      'save_queries' => TRUE);
      $this->DB1 = $this->load->database($this->MSSQL, TRUE);
    $sql = "SELECT  TOP 1 * FROM AccountsFinancialYearMaster where Active=1 ";
        $query = $this->DB1->query( $sql);
        $result= $query->result_array();
RETURN $result;     
3

Codeigniter 3.1.7 pre_controller не будет работать, потому что он вернетсяNULL значение при инициализации$CI =& get_instance();

To solve this:

Изменить точку крючка сpre_controller вpost_controller_constructor

Modified source:

config/hooks.php

$hook['post_controller_constructor'][] = array(  'class'    => 'MyOtherClass',
                                'function' => 'MyOtherfunction',
                                'filename' => 'Myotherclass.php',
                                'filepath' => 'hooks');

И вhooks/myotherclass.php

<?

class MyOtherClass {

    function MyOtherfunction() {

        $CI =& get_instance();

        $row = $CI->db->get_where('configs', array('site_id' => 1))->row();

        $CI->config->set_item('base_url', $row->base_url);

    }

}

Теперь это будет работать!

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

hook - post_controller и установите эти значения конфигурации через этот файл.

config/hooks.php

$hook['pre_controller'][] = array(  'class'    => 'MyOtherClass',
                                    'function' => 'MyOtherfunction',
                                    'filename' => 'Myotherclass.php',
                                    'filepath' => 'hooks');

hooks/myotherclass.php

<?

class MyOtherClass {

    function MyOtherfunction() {

        $CI =& get_instance();

        $row = $CI->db->get_where('configs', array('site_id' => 1))->row();

        $CI->config->set_item('base_url', $row->base_url);

    }

}

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

@Zar: Вы должны просто записать значения непосредственно в файл / кэш, как только они будут сохранены пользователем. Вы действительно не нуждаетесь в БД для этого вообще.
Хорошо, но в основном это всего лишь один простой запрос, выполняемый при каждой загрузке страницы. Я сомневаюсь, что вы дойдете до того, что это будет стоить кэшировать, поскольку количество сайтов не может расширяться миллионы? :) Стоит сохранить полученный результат в глобальном значении, так что вы можете использовать его для других частей вашего сайта.
Я полагаю, это будет повышение производительности для кэширования этих значений? Спасибо! Zar

Похожие вопросы