Codeigniter HMVC из CLI: не входит в контроллер

Я пытаюсь запустить код из CLI, как сказано в документации CI, но по какой-то причине, возможно, из-за использования расширения HMVC, он не входит в указанный контроллер.

Я не нашел дополнительной документации о выполнении CLI на сайте расширения HMVC.

Кто-нибудь знает, как с этим бороться?

Код здесь:

/**
 * application/controllers/Cron.php
 * This is just a wrapper controller to use an HMVC module using the basic CLI syntax for CI
 *
 */
class Cron extends MX_Controller
{

    public function generatepdfs($start_date = null, $end_date = null)
    {       
            echo 'Not reached'; exit;

            $this->load->module('facturation/documentscontroller');

            $this->documentoscontroller->generatepdfs($start_date, $end_date);
    }
}

Независимо от того, запускаю ли я это из корня документа:

php index.php cron generatepdfs

или это:

/usr/bin/php -f /home/user/public_html/index.php cron generatepdfs

Он не будет отображать «Не достигнуто».

Это происходит, если я запускаю его из браузера.

Вот некоторые из ошибок, выводимых на консоль:

Не удалось найти указанный класс: Session.php

У меня есть переопределенная библиотека сеансов MY_Session в application/libraries/session/MY_Session.php, которая отлично работает в браузере. Если я перемещу этот файл на один каталог вверх, эта ошибка больше не будет отображаться в консоли, но она не будет работать в браузере. Он, кстати, автозагружается.

Обходной путь для этого мне совсем не нравится: копировать один и тот же файл в оба места.

Следующая ошибка:

Неустранимая ошибка PHP: класс CI_Preferencias не найден в /home/mysite/public_html/system/core/Common.php в строке 196

У меня есть пользовательская библиотека Preferencias, которая также загружается автоматически в application/libraries/Preferencias.php.

Опять же, это отлично работает в браузере. Однако из CLI кажется, что он ищет библиотеку CI_Preferencias, которой не существует. Если я переименую его в CI_Preferencias и автоматически загружу «CI_Preferencias», CI будет искать класс с именем CI_CI_Preferencias из CLI.

Я не уверен, что я что-то упускаю, или в CI есть реальная ошибка, или модуль HMVC с этим связывается.

Кто-нибудь может мне помочь?? Это сводит меня с ума, так как я должен использовать действия CLI, запланированные из cronjobs, и я чувствую себя совершенно потерянным.


person luis.ap.uyen    schedule 01.04.2016    source источник
comment
Я бы подумал, потому что у вас есть HMVC в контроллерах приложений, а не в модуле application/modules/your_module_name/controllers/Cron.php   -  person Mr. ED    schedule 02.04.2016
comment
@ wolfgang1983: Какой синтаксис CLI для Codeigniter, если бы я поместил контроллер в модуль? Я пробовал безуспешно. В любом случае, контроллеры вне модулей, в их исходном расположении, должны по-прежнему работать с расширением HMVC, как это происходит при работе через веб-сервер.   -  person Luis Martin    schedule 03.04.2016
comment
Тот, кто комментирует выше, это я, с моим личным аккаунтом (не тот, который я использую на работе)   -  person luis.ap.uyen    schedule 02.05.2016
comment
class Cron extends MX_Controller. Судя по вашему описанию MY_Session, это должно быть MX_Controller или MY_Controller?   -  person bishop    schedule 02.05.2016
comment
@bishop: я не понимаю вашего вопроса. Модуль HMVC расширяет структуру CI, добавляя своего рода дополнительный уровень, представленный MX_Controller. Все контроллеры расширяются от него через промежуточный контроллер, называемый контроллером MY_Controller.   -  person luis.ap.uyen    schedule 02.05.2016
comment
Ну, MX_Controller выглядело как опечатка, судя по MY_Controller. (X используется там, где ожидалось Y.) Однако похоже, что это преднамеренная цепочка наследования.   -  person bishop    schedule 02.05.2016
comment
@bishop MX_Controller — это базовый контроллер в расширении HMVC. Этот контроллер Cron наследует напрямую от MX_Controller, потому что ему не нужны функции, зависящие от MY_Controller.   -  person luis.ap.uyen    schedule 02.05.2016


Ответы (2)


Если вы добавили subclass_prefix в конфигурационный файл как "$config['subclass_prefix'] = 'MY_';". Попробуйте MY_Preferencias.php вместо Preferencias.php

Если вы не использовали $config['subclass_prefix'] = 'MY_'; и вызов библиотеки сеансов как $this->load->library('session'); он использует собственную библиотеку сеансов CI вместо вашего пользовательского MY_Session.php

Вот ссылка

person Satya    schedule 04.05.2016

Я думаю, вам следует добавить constructor

class Cron extends MX_Controller
{

    public function __construct() {
       parent::__construct();
       // Any conditions/triggers while constructor loads.
    }

    public function generatepdfs($start_date = null, $end_date = null)
    {       
            echo 'Not reached'; exit;

            $this->load->module('facturation/documentscontroller');

            $this->documentoscontroller->generatepdfs($start_date, $end_date);
    }
}

Я не тестировал код. Просто попробуйте.

person Silambarasan R.D    schedule 21.10.2019