2012-02-21 2 views
0

Я использую почту метода контроллера непосредственно для выполнения некоторых операций с db и социальной сетью, но я обнаружил несколько точек сбоя между ним и аппаратным обеспечением —, поэтому я придумал идею сохранения все запросы в таблице db будут использоваться в качестве системы очередей, поэтому я могу обрабатывать их в свое время, а не в реальном времени.Как обрабатывать хранимые запросы в CI

То, с чем я сейчас борюсь, обрабатывает мои запросы. Я знаю, что это не очень MVC —, но его быстрое исправление.

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

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']); 

    } 

} 

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

Message: Undefined property: post::$db 

почему

Я устанавливаю метод очереди запущенного процесса на основе хрон работает на заданном интервале времени.

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

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

обновление

есть два способа сделать this- либо использовать PHP для FOPEN/получить из Интернета

или сделать это с помощью sprogramming $ class-> метод() - я предпочел бы сделайте это первым методом, но на самом деле не видите никакой опции с ошибкой, о которой я упоминал ранее.

ответ

0

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

  1. У них обоих подклассов один и тот же объект
    • Pro: метод Таким образом, существует уже
    • CON : вы можете только подклассы одну вещь, и вы должны построить свою собственную систему загрузки классов (не хорошо)
  2. иметь библиотеку (или модели), которые они оба разделяют
    • pro: этот метод затем может быть лучше протестирован (проще (или он был в какой-то момент) проще для модульных тестовых моделей, чем для тестирования контроллеров), код можно использовать без специального пользовательского синтаксиса загрузки классов.
    • con: Это может быть связано с небольшим рефакторингом (но это должно быть так же просто, как перемещение кода из метода контроллера в метод библиотеки, а затем просто вызов библиотеки в методе открытого контроллера).

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

+0

На этом этапе у меня нет времени для рефакторинга кода (он длинный, его не СУХОЙ и делает несколько вещей, но его миссия критическая) - я смотрел что-то быстрое и грязное, чтобы мы пошли –