如何在codeignitor挂钩中运行查询

问题描述 投票:0回答:2

我想创建钩子来检查我的项目是否处于维护模式一切正常但是数据库调用不起作用

我尝试

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
codeigniter hook codeigniter-3 query-builder
2个回答
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';
    }
}

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';
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.