как выполнить запрос в хуке codeignitor - PullRequest
0 голосов
/ 15 марта 2020

Я хочу создать хук, который проверяет мой проект в режиме обслуживания или нет Все работает нормально Но вызов БД не работает

Я пытаюсь

крючки. php

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

обслуживание. php

public function maintenance_check(){
   $this->load->database();
   $result = $this->db->query('SELECT * FROM maintenance');

   if($result[0]->mode === TRUE){
     echo 'maintenance';
   }
}

error => Undefined property: Maintenance::$load

Ответы [ 2 ]

0 голосов
/ 15 марта 2020

крючки. php

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

Техническое обслуживание. php

public function maintenance_check(){
  $this->CI = &get_instance();
  $result = $this->CI->db->query('SELECT * FROM maintenance');

  if($result[0]->mode === TRUE){
    echo 'maintenance';
  }
}
0 голосов
/ 15 марта 2020

Ваша проблема в том, что $ this-> load не существует в вашем классе

Один из ответов - использовать 'post_controller_constructor'. Это позволяет вам расширить CI_Controller и получить доступ ко всем вкусностям.

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

Ваш класс обслуживания будет выглядеть примерно так (у меня есть некоторый отладочный код, чтобы увидеть, что происходит.)

<?php
class Maintenance extends CI_Controller  {

  public function maintenance_check() {
    $this->load->database();
    $result = $this->db->query('SELECT * FROM maintenance');
    $mode = $result->row_array();
    var_dump($mode['mode']);
    if ($mode['mode'] == TRUE) {
        echo 'maintenance';
    }
  }
}

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

Так что, возможно, что-то вроде

public function maintenance_check() {
    $this->load->database();
    $result = $this->db->query("SELECT value FROM options WHERE name='maintenance'");
    $row = $result->row_array();
    if ($row['value'] == TRUE) {
        echo 'maintenance';
    }
}
...