I'm writing a CodeIgniter helper for e-mail functions, and need currently in each function I'm writing:
$CI = &get_instance();
$CI
->email
//etc
It's not a big problem, but I was wondering if there was a way of loading the CI instance once for all functions? Something like a constructor method?
If you are absolutely set on defining your functions inside of a helper rather than extending CodeIgniter's email library then you can do this:
email_helper.php
<?php
// Assuming $CI has not been set before this point
$CI = &get_instance();
function some_email_function()
{
$GLOBALS['CI']->email;
}
unset($CI);
You can actually do this.
Here's an example
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Example {
public function __construct()
{
$this->CI =& get_instance();
}
public function functionExample(){
$this->CI->load->module('fullpage');
if($this->CI->fullpage->my_function() ){
echo 'It works!';
}
}
}
Related
<?php
class MyModel extends CI_Model {
public function loadData()
{
$CI =& get_instance();
$CI->load->helper('data_helper');
print_r($CI->data_helper); //this is printing nothing
$CI->data_helper->loaditems(); // method is not calling
}
}
function loaditems()
{
echo "hello from load of helper";
}
?>
helper filename is data_helper.php
give me you thought about this why it not working and in which case it will work
Put the file data_helper.php in the /application/helpers directory.
In /application/config/autoload.php load the helper using just the word 'data'. (line 92).
$autoload['helper'] = array('data');
Or you can load it before you need it with $this->load->helper('data');
Then you can use loaditems() from anywhere like a normal function.
You don't need the $CI magic at all.
According to the documentation
$this->load->helper('name');
Where name is the file name of the helper, without the .php file extension or the “helper” part.
which means the following code should work
class MyModel extends CI_Model
{
public function loadData()
{
$this->load->helper('data');
loaditems();
}
}
you can read more about it here
Try data_helper() to call helper function.
data_helper();
I have a problem in login application in codeigniter , the problem is like this:
I create MY_Controller, like this:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Controller extends CI_Controller {
public function __construct(){
parent::__construct();
}
}
Then I extended it on my library that i created, this is my "Petugas_Controller" library:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Petugas_Controller extends MY_Controller {
public function __construct(){
parent::__construct();
$this->load->model('petugas_m');
} // end contructor.
public function check(){
if ($this->uri->uri_string() !== 'index' && ! $this->petugas_m->is_logged_in() == TRUE){
redirect('admin/petugas/index');
}
}
}
I'm using that library to be used in my "Petugas" controller, like this:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Petugas extends MY_Controller {
public function __construct(){
parent::__construct();
$this->load->library('petugas_controller');
$CI = &get_instance();
$CI->check();
}
public function index(){
echo "You have to login";
}
public function dashboard(){
echo "Welcome to dashboard";
}
}
In "Petugas_Controller" library, I loaded model that is called "Petugas_m", here is the model :
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Petugas_m extends CI_Model {
public function __construct(){
parent::__construct();
}
public function is_logged_in(){
return FALSE;
}
}
That's all what i was trying, and my problem is I want to check if username is logged or not, by doing $this->check() in "Petugas_library" that loads "Petugas_m" model, i could see an dashboard echo if the "check" method in "Petugas_m" is set to TRUE but it's always redirect me a loop if it FALSE.
I was searching for tutorials and still have this crazy problem :( ,
Thank in advance, and sorry for my bad english.
As long as your petugas_controller library is located within the libraries folder, you can access the check method via
$this->petugas_controller->check();
Also try changing the if statement in your check to something more like this
if ($this->uri->uri_string() !== 'index' && $this->petugas_m->is_logged_in() !== TRUE){
lol, I've just realized my mistake here, I've just tried to make another controller, it's called login, then in my "petugas_controller" library I redirect the user if not login to this "login" controller, it's totally worked ...
Youy guys are inspiring me so much,Thanks :)
class Mylib
{
function show_lib()
{
$obj=& get_instance();
$obj->load->module(‘login_check’);
$var=$obj->login_check->get_all_table_data();
print_r($var);
}
}
ERROR:-
Fatal error: Call to undefined method CI_Loader::module()
I Hope This Will Work --> check this code
class Mylib
{
function show_lib()
{
protected $ci;
$this->ci = &get_instance();
$this->ci->load->library(‘login_check’);
$var=ci->load->login_check->get_all_table_data();
return $var;
}
}
Not module, it's a library
use:
$this->load->library();
Working with modules in CI is called HMVC - Hierarchical Model View Controller.
There is a beautiful modular extension for CI to work with - Modular Extensions - HMVC
By using this extension you can create and work with modules in CI.
After setting up HMVC Extension you can call modules from your controller.
$controller = $this->load->module('module_name/controller_name');
echo $controller->method();
Few tutorials to get started:
http://net.tutsplus.com/tutorials/php/hvmc-an-introduction-and-application/
http://www.extradrm.com/blog/?p=744
If you are using codeigniter 3 you need to use Codeigniter Object to load modules,helpers..etc. Assign Codeigniter object to a variable and use it. $CI =& get_instance() Sample code
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class CustomLibrary{
public $random_number;
public function __construct(){
$CI =& get_instance();
$CI->load->helper('string');
}
}
For more information about this visit http://www.webnsyntax.com/
I created a helper "session_helper.php" in application/helpers/ folder
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
if ( ! function_exists('is_login'))
{
function is_login()
{
$CI =& get_instance();
$is_logged_in = $CI->session->userdata('is_logged_in');
if (!isset($is_logged_in) || $is_logged_in != TRUE) {
redirect('login');
}
}
}
And "Configuracion" Controller:
class Configuracion extends CI_Controller {
function __construct()
{
parent::__construct();
$this->is_logged_in();
}
function is_logged_in()
{
$this->load->helper('session');
$this->is_login();
}
}
The problem is when I call the controller "http://localhost/proyect/configuracion" I get the following error:
Fatal error: Call to undefined method Configuracion::is_login() in C:...\application\controllers\configuracion.php on line 15
I read the manual and apparently everything is correct ... what is wrong?
"is_login" is a function, not a method. Just replace $this->is_login(); with is_login();.
Helpers are not methods, they are just simple function calls.
Take a look at helpers in the User Guide: http://codeigniter.com/user_guide/general/helpers.html
Loading a helper:
$this->load->helper('url');
using its helper functions:
<?php echo anchor('blog/comments', 'Click Here');?>
where anchor() is the function that is part of the loaded helper.
Also I would urge you to stay way from calling a helper 'session' make it something more descriptive, as it might become confusing later on. Just a suggestion, its entirely up to you.
I created a library for API access, and I created a seperate helper for common functions used by the library. In codeigniter, new libraries can access native classes by creating an instance of themselves using...
$example_instance = & get_instance();
I did this, loaded my helper- but every time the helper function is called i get the "trying to access a non-object" error. What am I doing wrong?
Here's what I have
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class api_example {
private $api;
public function __construct(){
$this->api = & get_instance();
$this->api->load->helper('helper_test');
}
public function search_recent($param){
$string = $this->api->helper_test->connect($url); //error!!!
return $xml;
}
}
/* End of file */
CodeIgniter helpers should be functions, not classes.
Try simply:
$string = connect($url);
That's not how you call a function from a helper. Helper functions aren't part of the CodeIgniter object. They're just functions.
$string = connect($url);