Any kind of framework is a collection of reusable code which is divided into classes, so if we talk about OOPS or MVC, we do all our task in classes like for email sending, form validation or pagination kind of work. Collection of these classes are called a library in Codeignitor. There are so many libraries in Codeignitor which can find in it’s documentation Codeignitor Libraries and that can be used depends on requirement. So if we need to send an email we don’t need to create the whole function from scratch, we can use its email library for the implementation and same for the other task. Now let’s see how to use a library in CI.
Load the library to use it. Create a controller users.php and then use below code to send an email.
Controller: users.php
<?php defined( 'BASEPATH' ) OR exit ( 'No direct script access allowed' ); class Users extends CI_Controller { public function index() { // Load email library $this ->load->library( 'email' ); // Use the inbuilt methods to send an email $this ->email->from( 'abc@gmail.com' , 'your name' ); $this ->email->to( 'xyz@gmail.com' ); $this ->email->subject( 'Test' ); $this ->email->message( 'Welcome to neveropen' ); $this ->email->send(); } } ?> |
If we need to load multiple libraries, we can create an array and then define all the libraries name in that array.
$this->load->library(array('form_validation', 'email'));
Custom Libraries: We saw that CI has already a lot of inbuilt libraries. If we need some functionality which is not available in the CI library then we can create our own custom library. Let’s see how to create a custom library in CI.
Inbuilt libraries are available in the system folder but custom libraries need to be created in application/libraries folder. We need to keep in mind that file name should be same of the class name, also the first letter of a file name and class name should be in uppercase. Create a file Test.php in application/library folder. Below is the example of creating functionality in our custom library.
Custom Library: Test.php
<?php class Test { public function abc() { echo "Welcome to neveropen" ; } } ?> |
Custom libraries can be used just like inbuilt libraries in the controller. So in our users.php controller use the code below to check this.
Controller: users.php
<?php defined( 'BASEPATH' ) OR exit ( 'No direct script access allowed' ); class Users extends CI_Controller { public function index() { // Load the custom library $this ->load->library( 'test' ); // Use the function of custom library $this ->test->abc(); } } ?> |
Output:
Welcome to neveropen
Extending Libraries: In this section we will see how to extend the inbuilt libraries of CI. It is also created in the same folder application/libraries just like we were doing for custom libraries. Now we need to keep in mind that we need to add MY_ prefix when we give the name for our library file, also use extends keyword to inherit all the properties of Email library. So, create a file MY_Email.php in application/libraries folder and use the code below.
Extended Library: MY_Email.php
<?php class MY_Email extends CI_Email { // Add a function in Email library public function test() { echo "This is test function for extended Email library" ; } } ?> |
Once the Email library is extended, we can use it’s additional function ‘test’ in our controller. So in controller users.php use the code below to call ‘test’ function from Email library.
Controller: users.php
<?php defined( 'BASEPATH' ) OR exit ( 'No direct script access allowed' ); class Users extends CI_Controller { public function index() { // Load the library $this ->load->library( 'email' ); // Call the function $this ->email->test(); } } ?> |
Output:
This is test function for extended Email library
Till now, extending our libraries and adding our own functionality, now if we want to completely override inbuilt libraries function and don’t want to use any function from the inbuilt library then we can also do that. All we just need to do is to create a file in application/library with file name Email.php (or whatever library needs to override) and then write your own function. Here we don’t need to use extends keyword. Below is the code…
Overridden library Name: Email.php
<?php class CI_Email { public function test() { echo "This is test function for overridden Email library" ; } } ?> |
Loading this library and calling the function will be the same as earlier we were doing in controller users.php.
Output:
This is test function for overridden Email library
get_instance(): Codeignitor make a super object and then sub-objects are created. We use $this keyword to access the object. We can not use $this keyword apart from controllers, models and view. So if we need to load another inbuilt helper or library in our custom library, $this won’t work because these custom libraries are out of the scope of superobject. To solve this issue we need to use get_instance() method in our custom library. Firstly we need to get the instance of superobject in a variable. Below is the line for our custom library to get the original codeignitor object reference.
$CI =& get_instance();
We need to notice that we are getting the reference or address of original codeignitor object using ‘&’ instead of creating a copy. After that, we can load any helper or library or model. Below is the complete code for custom library Test.php
Custom Library: Test.php
<?php class Test { public function abc() { // Assign the CodeIgniter object to a variable $CI =& get_instance(); $CI ->load->helper( 'array' ); } } ?> |