Я пытался использовать учебник из другого места, чтобы показать свои данные из объекта экземпляра. Но когда я пытаюсь это реализовать, я обнаружил ошибку Сообщение: Класс "Бронирование" не найден Имя файла: 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);
}
тогда как я покажу это в своем классе просмотра? как исправить эту ошибку? спасибо всем за помощь помогите решить
@JiriHrazdil, когда я добавляю $autoload['libraries'] = array('database', 'session', 'classes'); все еще нашел ошибку: Невозможно загрузить запрошенный класс: Классы. как добавить автозагрузку для моего класса?
В модели что за объект $testimoni? Это не определено нигде, что мы можем видеть. Кроме того, что вы делаете с $book, созданным с помощью $book = new Booking();?
@DFriend извините, это была моя опечатка, я имею в виду $book->get_booking(); после того, как я создал $book = new Booking();






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