如何在Specified控制器上定义钩子?

时间:2018-05-25 06:23:07

标签: php codeigniter hook

在这里,我试图仅在一个Controller上定义挂钩。我怎么设置它们?

我将钩子定义为$hook['pre_controller']=arra('....')。但它显示在所有控制器上,我想在Home Controller上定义钩子。建议我。

2 个答案:

答案 0 :(得分:0)

例如,您的控制器名称为YourController,第一步是在hooks.php文件下定义您的挂钩,

// hooks.php
$hook['pre_controller'][] = array(
    'class'    => 'MyHook',
    'function' => 'HookMethod',
    'filename' => 'MyHook.php',
    'filepath' => 'hooks',
    'params'   => array()
);

MyHook.php文件夹下定义hooks,如下所示。

<?php
// MyHook.php    
class MyHook
{
    private $CI;

    public function __construct()
    {
        $this->CI = & get_instance();
    }    

    public function HookMethod()
    {
        // check here loaded controller is desired one
        if (is_subclass_of($this->CI, 'YourController')) {
           // write your desired code here.
        }
    }    
}

我没有测试过代码,但这肯定会对你有所帮助。

答案 1 :(得分:0)

  你可以试试这个。它工作正常

<强>配置/ hooks.php

$hook['test'] = array(   
     'class' => 'Exm',   
     'function' => 'tut',   
     'filename' => 'exm.php',   
     'filepath' => 'hooks',   
); 

<强>应用/钩/ exm.php

class Exm extends CI_Hooks {   
    public function tut()   
    {   
     echo "Welcome to Hooks File";   
    }
}

<强>应用/控制器/使用example.php

defined('BASEPATH') OR exit('No direct script access allowed');   

class Example extends CI_Controller {   
public function index()   
  {   
    echo "Hooks Example";   
    $this->hooks->call_hook('test');
  }   
}