如何修复使用实体 class 时未找到 Class?如何在对象中显示数据库?

How to fix Class not found when using entity class? How to show database in object?

我正在尝试另一个地方的教程来显示实例对象中的数据。但是当我尝试实现它时,我发现错误 消息:Class 'Booking' 未找到 文件名:C:\xampp\htdocs\teja\application\controllers\controlBooking.php

这是我在 class 预订中的代码

<?php namespace application\classes;
class Booking {
    protected $id;
    protected $name;
    protected $address;
public function setId(string $id){
    $this->id = $id;
}
public function getId(){
    return $this->id;
}
public function get_booking()
{
    $query = $this->db->select("*")
             ->from('booking')
             ->order_by('id', 'DESC')
             ->get();
    return $query->result();
}...

这是我的模型class

<?php use application\classes\Booking;
class modelBooking extends CI_Model{
    public function get_all(){
        $book = new Booking();
        $testimoni->get_booking();
    }
}

这是我的控制器

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class controlBooking extends CI_Controller {
public function __construct(){
    parent ::__construct();
    //load model
    $this->load->model('modelBooking'); 
}
public function index(){
    $data = new Booking();
    $this->load->view('viewBooking', $data);
}

那我怎么在我的视图中显示它class?如何修复该错误? 谢谢大家,请帮我解决这个问题

首先,文件Booking.php应该移动到文件夹/application/libraries/

然后,不要使用 new,而是使用标准的 CodeIgniter 库加载方案,例如

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

CodeIgniter 'Loader'(即 $this->load->...)将找到 class 文件(如果它在正确的位置),include 它,并实例化名为 class.

你想在哪里使用上面使用创建的实例

$this->booking->some_method();

CodeIgniter 不会自动加载带命名空间的 classes 开箱即用(据我所知),并且其设计目的不是像在 Laravel 或 Symphony 中那样使用(实体并不真正存在)。我非常怀疑您遵循的教程是 CI 具体的。

这将在 CI 4 中改变,目前处于 Beta 测试阶段。

现在,我建议要么按照 DFriend 的建议将它变成一个库,然后放弃所有 usenamespace 声明,然后以 CI 方式加载它,或者您可以按照连同我在这里的回答:

请注意:无论您使用的是库还是上述方法,都无法像在模型或控制器中那样直接访问 $this->db 或任何与 CI 相关的内容。你必须做:

$CI = &get_instance;
$CI->db->get(...);

显然,获取实例部分可以在 class 构造函数中完成,并分配给一个变量以便在多个函数中使用。