我想创建一个钩子来检查我的项目是否处于维护模式
一切都很好
但是数据库调用不起作用
我尝试
hooks.php
$hook['pre_controller'][] = array(
'class' => 'maintenance',
'function' => 'maintenance_check',
'filename' => 'maintenance.php',
'filepath' => 'hooks'
);
maintenance.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
答案 0 :(得分:0)
您的问题是您的课程中不存在$ 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';
}
}
}
不太确定维护表的架构。 听起来更适合作为带有以下内容的选项表中的条目 ID,名称,值。
所以也许像
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';
}
}
答案 1 :(得分:0)
hooks.php
$hook['post_controller_constructor'] = array(
'class' => 'Maintenance',
'function' => 'maintenance_check',
'filename' => 'Maintenance.php',
'filepath' => 'hooks'
);
Maintenance.php
public function maintenance_check(){
$this->CI = &get_instance();
$result = $this->CI->db->query('SELECT * FROM maintenance');
if($result[0]->mode === TRUE){
echo 'maintenance';
}
}