2012-02-21 30 views
0

私はコントローラメソッドポストを直接使用してデータベースとソーシャルネットワークの操作を行っていましたが、ハードウェアとの間にいくつかの障害点がありました— dbテーブル内のすべての要求をキューイングシステムとして使用する代わりに、リアルタイムではなく私自身の時間に処理することができます。保存されたリクエストをCIで処理する方法

私が今苦労しているのは私の要求を処理することです。私はこれが非常にMVCではないことを知っています—しかし、そのクイックフィックス。

プロセスキューメソッド内から別のコントローラのメソッドを呼び出すにはどうすればよいですか?私はファイルを含めて試して、それをインスタンス化—それは私がWebからやっただろう変数を渡します。

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

    } 

} 

しかし、私は、通常のインデックスはそれがうまく動作しますが、私はは(これは私の問題である)METHOD-インスタンス化されたクラスを介してそれを呼び出す未定義のメソッドエラー

を取得METHOD-呼び出しエラー - を得ます
Message: Undefined property: post::$db 

ザ・なぜ

私は、時間の設定された間隔で実行するcronジョブに基づいて実行するためのプロセスキュー方法を設定しています。

はもともとすべてがポスト—のインデックスメソッドに走ったが、post::index()は、実行するために10〜15秒を取ることができ、読者がマルチ—誰かが7秒以内にリーダーを使用することができ通さず、スクリプトが完全に実行していないからです。

私の現在のプロセスメソッドを使用するよりも、これを行うより良い方法はありますか?

更新

ウェブ

か、それは$クラス - を使用してsprogrammingんから取得/ fopenのthis-のいずれかを使用するPHPを行うには、2つの方法>方法()がある - 私が好むだろうがこれは最初の方法ですが、実際には私が前に述べたエラーのオプションを見ることはできません。

答えて

0

これは簡単です。あなたは2つの異なる場所に存在する何かが必要な場合は、原則として、次の2つのオプションがあります。その方法は、方法がすでにある

  • 詐欺:
    1. は、それらの両方が同じオブジェクトに
      • プロのサブクラスを持っています:あなたは一つだけをサブクラス化することができ、あなたは(良くない)独自のクラスローディングシステム
    2. ライブラリを持っている(またはモデル)を構築するために持っている彼らは、共有の両方
      • プロ:メソッドをより良くテストすることができます(コントローラーをテストするよりも単体テスト・モデルの方が簡単です)、カスタム・クラス・ロード構文なしでコードを共用することができます。
      • con:少しリファクタリングする必要があります(コントローラのメソッドからライブラリのメソッドにコードを移動し、パブリックコントローラメソッドでライブラリを呼び出すだけで簡単です)。

    どちらかそれらの一つは、あなたの特定の問題を解決するだろう。個人的には、CIがコントローラをロードする方法のために、私の好みはライブラリを作成することです。

  • +0

    この段階では、コードをリファクタリングする時間がありません(長いですが、DRYではなく、ミッションクリティカルではありません)。私は私たちに行くために何かをすばやく探していました –

    関連する問題