codeigniter - using helper in controller doesn't work

廉价感情. 提交于 2019-12-05 12:49:45

In your controller you are using it in wrong way, it's not a method of controller so you can't use $this to call it.

A helper can be loaded anywhere within your controller functions (or even within your View files, although that's not a good practice), as long as you load it before you use it. You can load your helpers in your controller constructor so that they become available automatically in any function, or you can load a helper in a specific function that needs it.

To load a helper you can use

$this->load->helper('name'); // name is the name of the file without extention

Unlike most other systems in CodeIgniter, Helpers are not written in an Object Oriented format. They are simple, procedural functions. Each helper function performs one specific task, with no dependence on other functions.

So, to call a helper function in a controller you should not use

$this->function_name();

instead use

function_name();

For example if you have a helper function in a helper file named myCustomHelper.php as follows

function myHelper()
{
    // code
}

then you can load it in the controller and call it as follows

$this->load->helper('myCustomHelper');
myHelper(); // call the function

but it's better to load helpers in the constructor so it'll be available through the whole script.

Update: If your helper file's name is login_helper.php then you can use it in your controller as follows

$this->load->helper('login_helper');
checkIfLoggedIn($this->session->userdata('loggedIn'));

Read more here.

Ok, I know this question has been asked 5 months ago but maybe some people will find this useful. I had just had the same problem and discovered that the filename of my helper functions was a filename that was already used by CodeIgniter.

So if you don't get the warning: 'Unable to load the requested file', but instead get the warning: 'Fatal error: Call to undefined function [function_name], you're probably using a filename that already exists natively.

Instead create a library class and define your function there. Then load the library in the controller and call the function of library. You can load library in any controller and use its methods.

On a related matter: caution when putting $this->load in the __constructor: in PHP you must then then explicitly call parent::__construct(); otherwise the parent constructor is no longer called, leaving $this->load undefined. The above solution does it correctly, but it's easy to overlook.

class My extends CI_Controller {
public function __construct() { 
parent::__construct();
$this->load->helper('url'); }

If you don't do this, you'll get the error message that My::$load does not exist and the helper will not load.

Helpers are the ideal way to declare global functions in codeigniter and what you are doing is correct. Following are just few points that will help you.

  • Load all helpers through single line instead of separate lines.

    $this->load->helper('form');
    $this->load->helper('url');
    $this->load->helper('login');
    $this->load->helper(array('form','url','login'));
    
  • If you want to make it global across all the controller files, then you can put it in the autoload.php file located in 'config/' directory. Update the $autoload['helper'] variable as follows:

    $autoload['helper'] = array('url','site');

Source: How to create & call global PHP functions in CodeIgniter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!