как обрабатывать сохраненные запросы в CI - PullRequest
0 голосов
/ 21 февраля 2012

Я использую пост метода контроллера напрямую для выполнения некоторых операций с БД и социальными сетями, но я нахожу несколько точек сбоя между ним и оборудованием & mdash; поэтому мне пришла в голову идея сохранить все запросы в таблице базы данных для использования в качестве системы очередей, чтобы я мог обрабатывать их в свое время, а не в реальном времени

То, с чем я сейчас борюсь, это обработка моих запросов. Я знаю, что это не очень MVC & mdash; но это быстро исправить.

Как мне вызвать метод другого контроллера из моего метода очереди процессов? Я попытался включить файл и создать его экземпляр & mdash; затем передав ему переменные, которые я бы сделал из Интернета.

function process(){
    $result = $this->mque->get_all();

    include('post.php');      
    $get = new post();


    foreach($result->result_array() as $item){
        $get->index($item['rfid'],$item['station_id'],$item['item']);

    }

}

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

Message: Undefined property: post::$db

Почему

Я устанавливаю метод очереди процессов для запуска на основе задания cron, выполняемого с заданным интервалом времени.

Изначально все работало с индексным методом post & mdash; но так как post::index() может занять 10-15 секунд, а считыватель не является многопоточным & mdash; кто-то может использовать ридер в течение 7 секунд, и скрипт не будет работать полностью.

Есть ли лучший способ сделать это, чем использовать мой текущий метод процесса?

обновление

есть два способа сделать это - либо использовать php, чтобы открыть / получить из Интернета

или делайте это спрограммированием, используя $ class-> method () - я бы предпочел сделать это первым методом, но на самом деле не вижу никакой опции с ошибкой, о которой я упоминал ранее

Ответы [ 2 ]

0 голосов
/ 21 февраля 2012

CodeIgniter: контроллер нагрузки в контроллере

Может ли это помочь тебе быстро? Проверьте нижний ответ.

0 голосов
/ 21 февраля 2012

Это просто: у вас нет одного контроллера, вызывающего другой. Как правило, если вам нужно, чтобы что-то существовало в двух разных местах, у вас есть два варианта:

  1. Пусть они оба подклассы одного и того же объекта
    • pro: Таким образом, метод уже существует
    • con: вы можете создавать только одну подкласс, и вам нужно создать собственную систему загрузки классов (НЕ ХОРОШО)
  2. Имейте библиотеку (или модель), которую они оба разделяют
    • pro: метод можно затем протестировать лучше (проще (или когда-то) проще было моделировать модульное тестирование, чем тестировать контроллеры), код можно совместно использовать без специального синтаксиса загрузки классов.
    • con: Это может потребовать небольшого рефакторинга (но это должно быть так же просто, как переместить код из метода контроллера в метод библиотеки и затем просто вызвать библиотеку в методе открытого контроллера).

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

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