CodeIgniter post_controller_constructor Hook运行两次?

时间:2013-10-23 04:37:13

标签: php codeigniter hook

我在application \ config \ hooks.php

中有这段代码
$hook['post_controller_constructor'] = array(
'class' => 'maintenance',
'function' => 'maintenance',
'filename' => 'maintenance.php',
'filepath' => 'hooks',
'params' => array()
);

这个代码在application \ hooks \ maintenance.php

class maintenance
{
   var $CI;    
   public function maintenance()
   {
    echo "Test";
   }
}

这个代码在application \ config \ config_maintenance.php

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

$config['maintenance'] = true;

以下是我的控制器的样子:

<?php
 class Home extends CI_Controller {
function __construct()
{
    parent::__construct();
    $this->load->model(array('home_model'));

}

function index()
{
    $this->load->view('home');
}
}

当代码运行时,如果我不添加“exit”,则在页面上回显“Test”两次在echo语句之后。这是否意味着“post_controller_constructor”被调用两次?

我想知道为什么这是因为根据CI文档

  

post_controller_constructor:   在实例化控制器之后立即调用,但在任何方法调用发生之前调用。

1 个答案:

答案 0 :(得分:4)

好的,问题出在维护类和钩子定义中。你调用钩子maintenance和函数maintenance。如果以与类相同的方式命名方法,则此方法是类构造函数。继续并重命名您的方法:

<强> hooks.php

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

<强> maintenance.php

class maintenance
{
   var $CI;    
   public function differentName()
   {
      echo "Test";
   }
}