Как исправить класс, не найденный при использовании класса сущности? Как показать базу данных в объекте?

Я пытался использовать учебник из другого места, чтобы показать свои данные из объекта экземпляра. Но когда я пытаюсь это реализовать, я обнаружил ошибку Сообщение: Класс "Бронирование" не найден Имя файла: 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);
}

тогда как я покажу это в своем классе просмотра? как исправить эту ошибку? спасибо всем за помощь помогите решить

Использует ли ваше приложение какую-либо автозагрузку? Для CodeIgniter см. это руководство.

Jirka Hrazdil 14.04.2019 13:32

@JiriHrazdil, когда я добавляю $autoload['libraries'] = array('database', 'session', 'classes'); все еще нашел ошибку: Невозможно загрузить запрошенный класс: Классы. как добавить автозагрузку для моего класса?

Laquinta Id 14.04.2019 13:38

В модели что за объект $testimoni? Это не определено нигде, что мы можем видеть. Кроме того, что вы делаете с $book, созданным с помощью $book = new Booking();?

DFriend 14.04.2019 17:06

@DFriend извините, это была моя опечатка, я имею в виду $book->get_booking(); после того, как я создал $book = new Booking();

Laquinta Id 15.04.2019 02:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
200
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

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

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

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

$this->booking->some_method();

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

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

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

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

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

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

большое спасибо! теперь я могу запустить свой код, но если я хочу поместить свои данные из базы данных в метод settter getter, например: $this->booking->setName(take from database); как я могу это сделать ??

Laquinta Id 15.04.2019 05:24

Я не уверен, что вы хотите сделать, задайте новый вопрос.

Alex 15.04.2019 11:29

Другие вопросы по теме