in codeigniter不存在的类:Commonlib是库文件

时间:2016-05-17 07:02:26

标签: php codeigniter

这是我的库文件 libraray文件名 Commonlib

<?php
    class Commonlib extends CI_Controller
    {

        public function __construct()
        {
            parent::__construct();
            $ci=& get_instance();
            $ci->load->database();

        }

        function getcountries()
        {
            return  $ci->db->get("countries")->result();
        }
    }
配置文件中的

$autoload['libraries'] = array('database','Commonlib');

这是我的观点

$a = new Commonlib();
$results=$a->getcountries();
foreach ($results as $row) {
    // country_id
    echo '<a   href="#">'.$row->country .'</a><br>';
}

显示此错误不存在的类: 哪里有麻烦?怎么解决呢?

4 个答案:

答案 0 :(得分:2)

问题在于命名约定。因为类名和文件名必须匹配。

<?php
class Commonlib {

     public function __construct() {
            parent::__construct();
           $ci=& get_instance();
           $ci->load->database();

}
        function getcountries(){
            return  $ci->db->get("countries")->result();


        }
}

在视图中

 $a = new Commonlib();
   $results=$a->getcountries();
   foreach ($results as $row)
   { // country_id
       echo '<a   href="#">'.$row->country .'</a><br>';
   }

答案 1 :(得分:1)

转到您的图书馆并使用此代码进行更改。

<?php
class your_library_Name {

        function getcountries(){
            return  $ci->db->get("countries")->result();
        }
}

这就是如何调用它

$rec= $this->your_library_Name->getcountries();

答案 2 :(得分:1)

库名称应类似于此CI_Commonlib ...请尝试。

答案 3 :(得分:0)

您可以执行以下任何操作。

  1. 默认情况下,大多数人只会将其库放入system/libraries中,并使用自动加载器或$this->load->library()进行加载。如果执行此操作,则必须在类名前面加上CI_,以便CodeIgniter可以识别它,因为系统文件夹用于存储文件。对于您的情况,您需要:

    class CI_Commonlib extends CI_Controller
    {
    }
    

这可行,但是它将您的自定义代码混合到CodeIgniter系统文件中,当您要升级安装时,它会变得非常混乱。

  1. 我的建议是为您的自定义文件创建一个单独的文件夹,然后将该路径添加到加载程序对象。如果将Commonlib对象移动到application/libraries/Commonlib.php,则无需对代码进行任何更改。

人们通常希望在多个CodeIgniter安装之间共享文件时将自定义对象添加到system。多个应用程序可以共享同一个BASEPATH,因此将代码放置在共享目录已存在的位置很有意义。

  1. 此问题与升级路径相同,自定义对象与股票代码混合在一起,可能会引起混淆。在这种情况下,定义自己的共享文件夹会很有帮助。使用CodeIgniter,您可以使用$this->load->add_package_path()进行此操作。您可以将共享代码移至custom/libraries并开始比赛。在这种情况下,您可以相应地更新控制器(而非视图)。

https://www.codeigniter.com/user_guide/libraries/loader.html

$this->load->add_package_path('custom/libraries');
$this->load->library('commonlib');