我正在尝试在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
请告知
答案 0 :(得分:6)
CodeIgniter(CI)不是trait
或namespace
友好的,但可以使用它们。它需要解决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'有数据:)