笨 - 在控制器使用助手不起作用(codeigniter - using helper in con

2019-09-21 05:17发布

我需要在多个控制器使用的功能。 所以,我虽然对使用自定义的助手,但似乎我无法得到它的工作。 (它的工作原理的观点,但我需要它的控制器)

它给了我下面的致命错误:

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

它是一个明智的举动使用一个辅助的多个控制器使用功能,或者我应该这样做,否则。

提前致谢,
标记

编辑:
Controller文件:

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'));
    }
}

助手文件:

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/');
        }
    }
}

}

Answer 1:

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

一个助手可以在任何地方你的控制器函数中加载(或甚至可以在查看文件,虽然这不是一个好的做法),只要你在使用它之前加载它。 您可以载入你的助手在你的控制器构造,使他们在任何功能自动变为可用,也可以在需要它的特定功能加载一个帮手。

要加载一个帮手,你可以使用

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

不像在CI中的其他系统,辅助函数不是用在面向对象的格式。 他们是简单的,程序性的功能。 每个辅助函数处理一个特定的任务,与其他功能没有依赖性。

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

$this->function_name();

改用

function_name();

例如,如果你有一个名为帮助文件中的辅助函数myCustomHelper.php如下

function myHelper()
{
    // code
}

那么你就可以在控制器中加载并调用它,如下所示

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

但它是更好地加载佣工在构造函数,因此它会在整个脚本可用。

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

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

在这里阅读更多



Answer 2:

好吧,我知道这个问题已经被问3个月前,但也许有人会觉得这非常有用。 我刚刚有同样的问题,发现我的辅助功能的文件名是已经使用CodeIgniter的文件名。

所以,如果你没有得到警告:“无法加载请求的文件”,而是得到警告:“致命错误:调用未定义的函数[函数名],你可能使用已经存在本地的文件名。



Answer 3:

相反,创建库类,并没有定义的功能。 然后加载在控制器库,并调用库函数。 您可以在任何控制器加载库和使用它的方法。



Answer 4:

在__constructor推杆时要小心这个 - $>负载:在一个相关问题在PHP中则必须然后显式调用父:: __结构(); 否则父类的构造不再叫,留下$这个 - >负荷不确定的。 上述解决方案做它正确,但它很容易被忽视。

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

如果你不这样做,你会得到我的:: $负载不存在这个助手将不会加载该错误消息。



Answer 5:

助手是笨声明全局功能的理想方式和你正在做什么是正确的。 以下只是几个点,这将帮助你。

  • 通过加载单个行,而不是单独的行所有的帮手。

      $这 - >负载>助手( '形式');  $这个 - >负载>帮手( 'URL');  $这个 - >负载>帮手( '登录'); 
      $这 - >负载>辅助(阵列( '表格', 'URL', '登录')); 
  • 如果你想让它在所有的控制器文件全局的,那么你可以把它放在位于“的autoload.php文件config/ ”目录。 更新$autoload['helper']变量,如下所示:

      $自动加载[ '助手'] =阵列( 'URL', '位点'); 

来源: 如何创建和调用全局PHP函数笨



文章来源: codeigniter - using helper in controller doesn't work