【问题标题】:CI Instance in Custom Library for CodeIgniterCodeIgniter 的自定义库中的 CI 实例
【发布时间】:2012-06-21 20:36:30
【问题描述】:

我正在尝试在 CodeIgniter 中创建自定义用户库。在这个库中,我想使用其他 CodeIgniter 库和助手,但我遇到了错误。以下是我采取的步骤:

  1. 我在 User.php 文件中创建了 User 类并将其上传到 applications/libraries/。

  2. 在 application/config/autoload.php 内部,我正在自动加载用户库。

这是我的用户库中的代码:

<?php 

    class User {

    private $CI;

        public function __construct()
        {
            $this->CI =& get_instance();
            $this->CI->load->helper('form');
        }

        public function create_login_form()
        {
            echo 'hello';
            echo $this->CI->form->form_open();
        }

    }

/* End of file User.php */

然后在我的一个观点中,我正在使用调用 create_login_form 方法:

$this->user->create_login_form()

似乎正在调用该方法,因为正在回显 hello,但是当它使用表单助手 form_open 方法时,我收到以下错误:

遇到 PHP 错误 严重性:通知消息:未定义 属性:Home::$form 文件名:libraries/User.php 行号:46

致命错误:在非对象上调用成员函数 form_open() .../application/libraries/User.php 第 46 行

任何想法我做错了什么?

谢谢!

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    Helper 提供函数而不是某些对象的方法。加载表单助手后,您可以直接使用form_open()

    【讨论】:

    • 呃,谢谢纳尔夫!刚开始使用 CodeIgniter,我想我仍然需要把所有的事情都搞清楚。一个后续问题:如果我想使用库方法,那么我必须使用 $this->CI->library->method() 对吗?
    • 是的。另一方面,如果您只需要表单助手并且您的 User 库设置为自动加载,那么您也应该自动加载表单助手,因此您不需要使用get_instance() .
    • 太棒了,感谢您的建议!最后一件事:我知道自动加载帮助程序如何让我放弃诸如 get_instance() 之类的事情并传递对 CI 对象的引用,因为帮助程序由现在可用于所有代码的 函数 组成。但是假设我知道我也将使用 Session 库。即使我自动加载 Session 库,在我的自定义库中,我仍然必须获取对 CI 对象的引用才能访问 Session 的 方法,对吗?
    • 是的,这几乎是您可以从库中访问其他库的唯一方法。
    • 谢谢,非常感谢所有的帮助!
    【解决方案2】:
    class User {
    
        private $CI;
    
        public function __construct()
        {
            $this->CI =& get_instance();
            $this->CI->load->helper('form');
        }
    
        public function create_login_form()
        {
            echo 'Title';
            echo form_open(); // Form open is helper. Not library
            echo 'Write something';
            echo form_close(); // Produces a closing </form> tag.
        }
    
    }
    

    【讨论】:

      【解决方案3】:
      class User {
      
          public function __construct()
          {
              $CI =& get_instance();
              $CI->load->helper('form');
          }
      
          public function create_login_form()
          {
              echo 'Title';
              echo form_open(); // Form open is helper. Not library
              echo 'Write something';
              echo form_close(); // Produces a closing </form> tag.
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 2011-07-15
        • 1970-01-01
        • 2014-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-19
        相关资源
        最近更新 更多