codeigniter - 在控制器中使用帮助程序不起作用

Dij*_*ark 4 php controller codeigniter helper

我需要在多个控制器中使用一个函数.所以我虽然使用自定义助手,但似乎我无法让它工作.(它在视图中工作,但我需要在控制器中)

它给我以下致命错误:

致命错误:在第12行的/application/controllers/developers.php中调用未定义的方法Developers :: checkIfLoggedIn()

使用帮助程序在多个控制器中使用函数是一个聪明的举动,或者我应该这样做.


马克,先谢谢你

编辑:
控制器文件:

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

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

         //helper function
         checkIfLoggedIn($this->session->userdata('loggedIn'));
    }
}
Run Code Online (Sandbox Code Playgroud)

助手文件:

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

if (!function_exists('checkIfLoggedIn'))
{
    function checkIfLoggedIn($session_loggedIn)
    {
        $loggedIn = $session_loggedIn;
        if($loggedIn == false)
        {
            redirect('login/');
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

}

The*_*pha 17

在你的控制器中你以错误的方式使用它,它不是控制器的方法,所以你不能$this用来调用它.

只要在使用之前加载辅助程序,就可以在控制器功能中的任何位置加载帮助程序(甚至在View文件中,尽管这不是一个好习惯).您可以在控制器构造函数中加载帮助程序,以便它们在任何函数中自动可用,或者您可以在需要它的特定函数中加载帮助程序.

要加载助手,您可以使用

$this->load->helper('name'); // name is the name of the file without extention
Run Code Online (Sandbox Code Playgroud)

与CodeIgniter中的大多数其他系统不同,Helpers不是以面向对象的格式编写的.它们是简单的程序功能.每个辅助函数执行一个特定任务,不依赖于其他函数.

因此,要在控制器中调用辅助函数,您不应该使用

$this->function_name();
Run Code Online (Sandbox Code Playgroud)

改为使用

function_name();
Run Code Online (Sandbox Code Playgroud)

例如,如果在辅助文件中有一个辅助函数,则命名myCustomHelper.php如下

function myHelper()
{
    // code
}
Run Code Online (Sandbox Code Playgroud)

然后你可以在控制器中加载它并按如下方式调用它

$this->load->helper('myCustomHelper');
myHelper(); // call the function
Run Code Online (Sandbox Code Playgroud)

但最好在构造函数中加载帮助程序,以便通过整个脚本可以使用它.

更新:如果您的帮助文件的名称是,login_helper.php那么您可以在控制器中使用它,如下所示

$this->load->helper('login_helper');
checkIfLoggedIn($this->session->userdata('loggedIn'));
Run Code Online (Sandbox Code Playgroud)

在这里阅读更多.


Muh*_*eel 0

相反,创建一个库类并在那里定义您的函数。然后在控制器中加载库并调用库的函数。您可以在任何控制器中加载库并使用其方法。