0

こんにちは、方法を使用して cron ジョブを作成する際にいくつかの問題に直面していCI CLIます。私のアプリケーションには、1 つのモデル関数を使用してmanager.phpすべてを取得する check_status というメソッドがあるという名前のコントローラーがあります。order_idsorder_id 行には、成功または失敗のいずれかのステータスがデータベースに記録されていました。

order_id を渡すと、注文が正常に配信されたかどうかを通知する API があります。しかし、ここで、一番上のコントローラーの行の下にある問題が発生します。

<?php if(! defined('BASEPATH') ) exit("NO Direct Script Access Allowed"); ?>

そのため、CI で CLI からメソッドを実行しようとするとcheck_status、エラーが表示されますNO Direct Script Access Allowed

これは私が上記のメソッドを呼び出した方法ですphp application/controllers/manager.php check_status

そこで、上記のエラー行を保持しなかったという点で、このように cron_job.php という別のクラス ファイルを作成することにしました "No Direct Script Access Allowed"。実行しようとするとアクセスできるようになると思いましたが、エラーは発生せず、出力もされません。

これは私が作成したクラスであり、その中でメソッドです。

<?php
class Cron_job extends CI_Controller {

    public function message($to = 'World')
    {
        echo "Hello {$to}!".PHP_EOL;
    }
}
?>

このコントローラーフォームCLIを次のように実行しますphp application/controller/cron_job.php message

Note: I am in ROOT directory.

出力がまったくありません。だから私はこのような別の方法で試しましたphp index.php application/controller/cron_job.php message

今、それは私にそれを示すエラーを与えますError 404 page not found.

私が別の方法で試したことは、ビューフォルダーにファイルを作成したことで、以下のように古いコントローラー/メソッドのURLを呼び出しています。

$result = file_get_contents("http://application_path/controller/method");

echo $result;

今、manager.php コントローラーのメソッド check_status で定義した出力を取得しています。

しかし、上記の行の後に別の問題が発生し、すべての order_ids を持つ配列出力が得られます。

この各 ID を API に送信してステータスを確認します。失敗した場合は、配信されているかどうかを確認します。完了したら、その order_id に対してデータベースのステータスを更新する必要があります。しかし、今私はビューファイルにいます。ビューファイルからモデルファイルを呼び出すことは可能ですか、それともこれを行う方法はありますか?

何か助けはありますか?

注:コントローラーまたはメソッドに構文エラーはありません。これらは完全に検証されており、URL を使用してアクセスしているときに正常に動作します。

4

2 に答える 2

3

コマンド ライン経由での実行に関する CodeIgniter ヘルプ セクションを読む必要があります。それは非常に簡単です。あなたの元のアプローチは正しかった。ただし、コントローラー メソッドをそのパスで直接呼び出すのではなく、CD をプロジェクト ルートに移動してから、コントローラーとメソッドをパラメーターとして index.php ファイルを呼び出します。

// This is how you call CI via the command line.
// Use spaces between index.php and your arguments.
$ php index.php <controller> <method> [params]

// And in your instance
$ php index.php manager check_status [param1 param2 param3]

ホストによっては、CLI 用にコンパイルされた PHP バージョンを呼び出す必要がある場合があります。

于 2013-02-15T18:31:33.960 に答える
0

ci ヘルパーがこれに役立ちます。

1)ヘルパーを作成し、モデル関数を呼び出す関数を作成します

function getUserDetails($userId = '') {
  $CI = & get_instance(); 
  $getUserDetailsByUserId = $CI->user_model->getUserDetailsByUserId($userId);
  return $getUserDetailsByUserId;
}

2) これgetUserDetails($userId);で、自分のビューを呼び出すことができます。

于 2013-02-15T05:44:44.253 に答える