Как исправить класс не найден при использовании класса сущности? Как показать базу данных в объекте? - PullRequest
0 голосов
/ 14 апреля 2019

Я пробовал учебник из другого места, чтобы показать мои данные из объекта экземпляра.Но когда я пытаюсь это реализовать, я обнаружил сообщение об ошибке: класс «Booking» не найден Имя файла: C: \ xampp \ htdocs \ teja \ application \ controllers \ controlBooking.php

это мой код в классе Booking

<?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();
}...

А это мой класс модели

<?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);
}

тогда как я покажу его в своем классе просмотра?как исправить эту ошибку?Спасибо всем вам, пожалуйста, помогите мне решить эту проблему

Ответы [ 2 ]

1 голос
/ 14 апреля 2019

Сначала файл Booking.php необходимо переместить в папку /application/libraries/

Затем вместо new используйте стандартную схему загрузки библиотеки CodeIgniter, например,

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

CodeIgniter 'Loader' (т. Е. $this->load->...) найдет файл класса (если он находится в нужном месте), include его и создаст экземпляр именованного класса.

Везде, где вы хотите использовать экземпляр, созданный выше, используйте

$this->booking->some_method();
0 голосов
/ 15 апреля 2019

CodeIgniter не будет автоматически загружать классы пространства имен из коробки (что мне известно) и не предназначен для использования так же, как в Laravel или Symphony (сущности на самом деле не существуют). Я очень сомневаюсь, что учебник, которым вы руководствовались, был специфичным для CI.

Это изменится в CI 4, который в настоящее время находится на стадии бета-тестирования.

На данный момент, я бы предложил либо сделать ее библиотекой, как предлагал DFriend, и потерять все объявления use и namespace и просто загрузить ее способом CI, либо вы можете следовать моему ответу здесь: Как включить библиотеку ООП «вызывающий случайный случай» в codeigniter?

Обратите внимание: используете ли вы библиотеку или описанный выше метод, вы не можете получить доступ к $this->db или к чему-либо напрямую связанному с CI, как в модели или контроллере. Вы должны сделать:

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

очевидно, что часть экземпляра get может быть сделана в конструкторе класса и назначена переменной для использования в нескольких функциях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...