如何在CI中处理存储的请求

时间:2012-02-21 09:51:56

标签: php codeigniter stored-procedures

我一直在使用控制器方法直接发布一些数据库和社交网络操作,但是我发现它与硬件之间存在一些故障点 - 所以我想出了将所有请求存储在数据库表中的想法作为排队系统,我可以在自己的时间而不是实时处理它们

我现在正在努力解决的问题是处理我的要求。我知道这不是很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']);

    }

}

但是我得到一个错误 - 当我调用普通的索引方法时 - 它运行正常但是当通过实例化的类方法调用它时会得到一个未定义的方法错误 - (这是我的问题)

Message: Undefined property: post::$db

原因

我将进程队列方法设置为基于以设定的时间间隔运行的cron作业运行。

最初一切都运行到post的索引方法 - 但是因为post::index()可能需要10-15秒才能运行且读者不是多线程的 - 有人可以在7秒内使用阅读器并且脚本不会有完全跑。

有没有比使用我当前的流程方法更好的方法呢?

更新

有两种方法可以做到这一点 - 使用php来fopen /从网上获取

或使用$ class->方法()进行sprogramming - 我更喜欢这样做第一种方法,但是没有真正看到任何选项与我之前提到的错误

2 个答案:

答案 0 :(得分:0)

这很简单:你没有一个控制器调用另一个。通常,如果您需要在两个不同的地方存在某些内容,则有两种选择:

  1. 让它们都是同一个对象的子类
    • 亲:那方法已经存在了
    • con:你只能子类化一件事,你必须建立自己的类加载系统(不好)
  2. 拥有他们共享的图书馆(或模型)
    • pro:然后可以更好地测试该方法(单元测试模型比测试控制器更容易(或者它在某一点上),代码可以在没有自定义类加载语法的情况下共享。 / LI>
    • con:这可能涉及一些重构(但它应该像将代码从控制器的方法移动到库的方法然后只需在公共控制器方法中调用库一样简单。)
  3. 其中任何一个都可以解决您的特定问题。就个人而言,由于CI如何加载控制器,我的偏好是创建库。

答案 1 :(得分:0)

CodeIgniter: Load controller within controller

这可以帮助你快速解决问题吗?检查底部回复。