CodeIgniter中的特征

时间:2017-12-18 15:04:38

标签: php codeigniter

我正在尝试在CodeIgniter中使用特征。我将Trait放在libraries目录中,然后将库加载到控制器中。然后我在模型中使用了特征,但它没有用,我收到了以下错误

特质文件(在库中):     

trait DataTablesTrait{
    public function query(){
        $this->db->select('*');
        $this->db->limit(10, 1);
        return $this->db->get('my_table');
    }
}
?>

控制器:

class myController extends CI_Controller {  

    public function __construct(){
        parent::__construct();
        $this->load->library('DataTablesTrait');
        $this->load->model('ABC_Model');
    }
} 

型号:

class ABC_Model extends CI_Model {
    use DataTablesTrait;
    function callQuery(){
        $this->query();
    }
}

我收到了这个错误:

  

不存在的类:DataTablesTrait

请告知

1 个答案:

答案 0 :(得分:6)

CodeIgniter(CI)不是traitnamespace友好的,但可以使用它们。它需要解决CI问题。

主要问题,你必须解决的CI问题是电话

$this->load->library('DataTablesTrait');

CI将找到此文件,但load->library将尝试实例化失败的特征,因为无法自行实例化特征。

替换上面的行
include APPPATH.'/libraries/DataTablesTrait.php';

你应该没有错误。但是你不会得到结果,因为callQuery()没有返回任何结果。要完成测试,请callQuery()返回特征应生成的CI_DB_result对象

public function callQuery()
{
    return $this->query();
}

向控制器添加索引功能,以便我们可以转储输出

public function index()
{
    $DB_result = $this->ABC_Model->callQuery();
    var_dump($DB_result->result());
}

这应该产生预期的输出 - 假设' my_table'有数据:)