Codeigniter: Расширение многоуровневой модели не работает. Получение ошибки Класс не найден

Я пытаюсь применить многоуровневые расширения в моделях.

Смотрите мой код ниже.

У меня есть одна модель «Порядок», которая расширяет базовую модель CI.

Class Order extends CI_Model {
   function __construct() {
    parent::__construct();
   }
}

Теперь я создаю новую модель "Seller_order" из модели "Заказ".

Class Seller_order extends Order {
    function __construct() {
       parent::__construct();
   }
}

Теперь, когда я загружаю модель «Seller_order» внутри контроллера.

class Seller_order_controller extends CI_Controller { 
        function __construct() {
        parent::__construct();
        $this->load->model('Seller_order');
    }
}

Во время загрузки я получаю следующую ошибку:

Fatal error: Class 'Order' not found

Помогите, пожалуйста. Нужно ли сначала загружать модель "Заказ", а затем "Продавец_заказ"?? Я думаю, что мне не нужно загружать модель «Заказ», если я ее расширяю.


person Dhara    schedule 28.02.2018    source источник
comment
Вы расширяете его, верно, но как интерпретатор php узнает об этом, если вы не загрузите файл Order.   -  person Salim Ibrogimov    schedule 28.02.2018
comment
Не могли бы вы указать, где хранятся эти файлы. то есть в каких папках?   -  person TimBrownlaw    schedule 28.02.2018
comment
почему бы вам не объединить Seller_order и файл модели заказа   -  person Vishnu Bhadoriya    schedule 28.02.2018
comment
@TimBrownlaw включил. но не работает.   -  person Dhara    schedule 28.02.2018
comment
@VishnuBhadoriya У меня есть два модуля, поэтому я использую наследование   -  person Dhara    schedule 28.02.2018
comment
@SalimIbrogimov, если я загружу Order, то продление не имеет смысла. Также другие фреймворки работают корректно. В других случаях нет необходимости загружать родительскую модель.   -  person Dhara    schedule 28.02.2018
comment
Прочтите это: stackoverflow.com/questions/28001003/, ищите проверенный ответ! )))   -  person Salim Ibrogimov    schedule 28.02.2018


Ответы (1)


Я не буду обобщать это множеством слов, надеясь, что сам код объяснит, что нужно.

Я добавил несколько эхо-отладки, чтобы показать, как все работает, что я и сделал, когда «играл» с этим, чтобы понять это.

Я предполагаю следующий макет... Не такой, как у вас, поэтому вам придется изменить его в соответствии с вашими потребностями.

application
 -> controllers 
     -> Seller_order_controller.php
 -> models
     -> Order.php
     -> Seller_order.php

Контроллер — Seller_order_controller

class Seller_order_controller extends CI_Controller {
    function __construct() {
        parent::__construct();
        echo "construct(): I am the <b>Seller Order Controller</b> Constructor<br>";
        $this->load->model('seller_order');
    }

    public function index() {
        echo "This worked";
        echo '<br>';
        echo $this->seller_order->show_order();
    }
}

Модель – Seller_order.php

require APPPATH.'models/Order.php';

Class Seller_order extends Order {
    function __construct() {
        parent::__construct();
        echo "construct(): I am the <b>Seller Order</b> Constructor<br>";
    }
}

Модель – Order.php

Class Order extends CI_Model {
    function __construct() {
        parent::__construct();
        echo "construct(): I am the <b>Order</b> Constructor<br>";
    }

    public function show_order() {
        echo "This is showing an Order";
        echo '<br>';
    }
}

В качестве примечания: не знаю, зачем вам нужно расширять модели таким образом. Обычное правило состоит в том, что каждый модуль имеет свою собственную модель (модели). Мне никогда не приходилось этого делать, но если мне когда-нибудь понадобится, теперь я знаю, как это сделать.

person TimBrownlaw    schedule 28.02.2018