我正在尝试构建一个自定义库,其中包含可通过整个站点使用的功能。在/application/libraries
内,我创建了一个新文件CustomFuncts
:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* @brief CommonFuncts
* This class is used to provide common user functions to the whole application.
*
* @version 1.0
* @date May 2012
*
*
*/
class CommonFuncts extends CI_Controller {
protected $ci;
/**
* function constructor
*/
function __construct()
{
$this->ci =& get_instance();
}
/**
* @brief checkCookie
*
* Checks for a previous cookie, and if exists:
* @li Loads user details to CI Session object.
* @li Redirects to the corresponding page.
*
*/
public function verificaCookie(){
$this->ci->load->view('index');
}
}
/* End of file CommonFuncts.php */
/* Location: ./application/libraries/CommonFuncts.php */
在控制器welcome.php
中:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
/**
* Index Page for this controller.
*
* Maps to the following URL
* http://example.com/index.php/welcome
* - or -
* http://example.com/index.php/welcome/index
* - or -
* Since this controller is set as the default controller in
* config/routes.php, it's displayed at http://example.com/
*
* So any other public methods not prefixed with an underscore will
* map to /index.php/welcome/<method_name>
* @see http://codeigniter.com/user_guide/general/urls.html
*/
public function index()
{
$this->load->library('commonFuncts');
$this->commonFuncts->verificaCookie();
}
}
/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */
我收到以下错误消息:
A PHP Error was encountered
Severity: Notice
Message: Undefined property: Welcome::$commonFuncts
Filename: controllers/welcome.php
Line Number: 23
Fatal error: Call to a member function verificaCookie() on a non-object in
/var/www/vhosts/unikodf.com/httpdocs/application/controllers/welcome.php on line 23
我尝试了很多东西,包括在库中扩展CI_Controller
并使用$this->load->view' instead of
$ this-&gt; ci-&gt; load-&gt; view`但我仍然得到了同样的消息。
答案 0 :(得分:10)
如果您的图书馆扩展CI_Controller
。这意味着您实际上正在扩展控制器的功能。而是像这样声明你的库:
class CommonFuncts { }
您不需要继承CI_Controller
,因为您正在编写库而不是控制器,而库不是MVC模型的一部分。它是单一类,它扩展了框架的功能,修复了一个常见问题或者具有许多控制器使用的功能。
要访问它的方法,请使用:
$this->load->library('CommonFuncts');
$this->commonfuncts->verificaCookie();
如果您想简化用于调用库的名称,请使用:
// The second argument is the optional configuration passed to the library
// The third argument is the name with which you would like to access it
$this->load->library('CommonFuncts', '', 'common');
$this->common->verificaCookie(); // /\ = configuration
// /\/\/\ = name
答案 1 :(得分:4)
您将controllers与libraries混淆。
自定义库不应扩展CI_Controller。 The documentation outlines how to create your own custom library
其次,您需要先加载库,然后才能访问其方法:
$this->load->library('CommonFuncts');
// The "CommonFuncts" library is now ready to use
$this->commonFuncts->verificaCookie();
答案 2 :(得分:1)
以下是一些在CI中创建自定义库的好教程
CodeIgniter - Form: Creating Menu Library
Building with CodeIgniter: Using Libraries
Creating a simple, extensible CodeIgniter authentication library
答案 3 :(得分:0)
这里我要修改一件事(我使用代码点火器2.1.3):
//echo CI_VERSION; to get the code igniter version Plesae use $this->commonfuncts->verificaCookie(); //f is small here commonfuncts instead of $this->commonFuncts->verificaCookie();
答案 4 :(得分:0)
您的构造函数不正确。你用过:
$this->ci =& get_instance(); //This is invalid syntax.
将codeIgniter
分配给变量并在codeigniter的资源上使用该变量
class exampleClass{
protected $codeIgniter;
public function __construct()
{
$this->codeIgniter =& get_instance();
$this->codeIgniter->load->helper('url');
$this->codeIgniter->config->item('base_url');
}
}