What is hook in codeigniter?
How to use hook in codeigniter?
hooks are events which can be called before and after the execution of a program. It allows executing a script with specific path in the CodeIgniter execution process without modifying the core files. For example, it can be used where you need to check whether a user is logged in or not before the execution of controller. Using hook will save your time in writing code multiple times.
There are two hook files in CodeIgniter. One is application/config/hooks.php folder and other is application /hooks folder.
In other language, if you want to run a code every time after controller constructor is loaded, you can specify that script path in hooks.
How to enable Hook?
go to application/config/config.php file and set it TRUE as shown below.
$config['enable_hooks'] = TRUE;
How to define hook?
A hook can be defined in the application/config/hooks.php file. Each hook is defined as an array consisting of the following terms.
$hook['pre_controller'] = array(
'class' => 'Class-name',
'function' => 'function-name',
'filename' => 'file-name.php',
'filepath' => 'hooks',
'params' => array('element1', 'element2', 'element3')
);
class - Here, you have to mention the name of your class defined in the hooks.php file. If you are using procedural function instead of a class, leave it blank.
function - Mention the function name you are calling.
filename - The file name created in application/hooks folder and containing class and function name mentioned above.
filepath - Here you have to mention the name of the directory which contains your script. Your script must be located inside the application folder. If your script is located in application/hooks folder, then your path will be simply hooks. But if your script is located in application/hooks/office folder, then your path will be hooks/office.
params - It includes the parameters which you want to pass in your script and it's optional.
Hook Points
The list of hook points is shown below.
pre_system :- It is called much before the system execution. Only benchmark and hook class have been loaded at this point.
pre_controller :- It is called immediately prior to your controller being called. At this point all the classes, security checks and routing have been done.
post_controller_constructo :- It is called immediately after your controller is started, but before any method call.
post_controller :- It is called immediately after your controller is completely executed.
display_override :- It is used to send the final page at the end of file execution.
cache_override :- It enables you to call your own function in the output class.
post_system :- It is called after the final page is sent to the browser at the end of the system execution.
Multiple calls to the same Hook
You can use array multi-dimensional to use the same hook point with more than one script.
$hook['pre_controller'][] = array(
'class' => 'Classname1',
'function' => 'functionname1',
'filename' => 'filename1.php',
'filepath' => 'hooks',
'params' => array('element1', 'element2', 'element3')
);
$hook['pre_controller'][] = array(
'class' => 'Classname2',
'function' => 'functionname2',
'filename' => 'filename2.php',
'filepath' => 'hooks',
'params' => array('element4', 'element5', 'element6')
);
Bracket [] enables you to have same hook point with multiple scripts. Your execution order will be same as the array defined.
Example :-
Create a Controller file example.php in application/controller folder
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Example extends CI_Controller {
public function index()
{
echo "CodeIgniter Tutorial";
}
}
Create a hooks file exm.php in application/hooks folder.
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Exm extends CI_Controller {
public function tut()
{
echo "Welcome itTutoeial;
}
}
?>
Now you have to define your hook in the application/config/hooks folder.
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$hook['pre_controller'] = array(
'class' => 'Exm',
'function' => 'tut',
'filename' => 'exm.php',
'filepath' => 'hooks',
);
?>
Now again run your program with the same URL and see the result.
http://itechtuto.com/hook/example
welcome to itechtuto. this is codeigniter tutorial.
How to Implement Hooks in Codeigniter
CodeIgniter hook allows you to execute a script with the specific path within the CodeIgniter execution process without updating or modifying core files. If you need to execute a code that should be run every time after the controller is created, then you specify that script path in the hook.
Enabling Hooks
$config['enable_hooks'] = TRUE;
Defining a Hook
The hooks are defined in the app / config / hooksf file. Each hook is specified as an array with this prototype:
$hook['pre_controller'] = array(
'class' => 'MyHook',
'function' => 'Myfunction',
'filename' => 'MyHook.php',
'filepath' => 'hooks',
'params' => array('element1', 'element2', 'element3')
);
Multiple calls to the same Hook
You can use multi-dimensional array to use the same hook point with more than one script, like this:
$hook['pre_controller'][] = array(
'class' => 'MyClass',
'function' => 'Myfunction',
'filename' => 'Myclass.php',
'filepath' => 'hooks',
'params' => array('element1', 'element2', 'element3')
);
$hook['pre_controller'][] = array(
'class' => 'MyClass2',
'function' => 'Myfunction2',
'filename' => 'Myclass2.php',
'filepath' => 'hooks',
'params' => array('element4', 'element5', 'element6')
);
Hook Example
create a controller called Test.php. In it, place this code and save it to your application/controllers/ directory:
<?php
class Test extends CI_Controller {
public function index() {
echo " world !";
}
}
?>
create a controller called myhook.php. In it, place this code and save it to your application/hooks/ directory:
<?php
class Myhook extends CI_Controller {
public function index() {
echo "Hello";
}
}
?>
We need to define the hooks in the application/config/hooks directory:
$hook['pre_controller'] = array(
'class' => 'Myhook',
'function' => 'index',
'filename' => 'Myhook.php',
'filepath' => 'hooks',
'params' => array()
);
Example :
File : Application/hook/Myhook.php
<?php defined('BASEPATH') OR exit('No direct script access allowed');
class Myhook
{
public function test()
{
require_once APPPATH.'views/maintenance.php';
exit;
}
}
?>
Application/config/hook.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$hook['pre_system'] = array(
'class' => 'Myhook',
'function' => 'test',
'filename' => 'Myhook.php',
'filepath' => 'hooks',
);
view
<!DOCTYPE html>
<html lang="en">
<head>
<metacharset="utf-8">
<title>Site Under Maintenance</title>
</head>
<body>
<h1>We'll be up and running Soon...</h1>
<div>
<div>
<p>We're just doing some nerdy stuff to our Website to make it even better.</p>
</div>
</div>
</body>
</html>
Previous
Next