facebook twitter hatena line email

Php/codeigniter/コマンド

提供: 初心者エンジニアの簡易メモ
移動: 案内検索

コマンドでクラス実行

パターン1

アプリケーションpathが、ci3appだったとき、Citestクラスのindexメソッドにアクセスする

env CI_ENV=development php ci3app/index.php citest index
class Citest extends MY_Controller {
    public function index()
    {
        echo 'citest/index';
    }
}

パターン2

アプリケーションpathが、application_project_path1だったとき、Batchクラスのtestメソッドにアクセスする

CI_ENV=production php application_project_path1/index.php batch test
class Batch extends MY_Controller
{
    public function test()
    {
        echo 'batch/test';
    }
}

参考:https://qiita.com/horikeso/items/69b5329d87b30aa35d68

パラメータ追加

アプリケーションpathが、ci3appだったとき、Citestクラスのindexメソッドにアクセスし、パラメータを設定

env CI_ENV=development php ci3app/index.php citest index --userId 123 --userAge 10
class Citest extends MY_Controller {
    public function index()
    {
        echo "citest/index\n";
        $params = $this->parseCliArguments();
        log_message("info", "params=" . print_r($params,1));
        echo 'userId: ' . $params['userId'] . ', userAge: ' . $params['userAge']. ', ';
    }
    /**
     * CLI引数を解析する汎用メソッド
     * 
     * @param array $args 引数配列(通常は $this->input->server('argv'))
     * @param int $skip スキップする引数の数(CodeIgniterの場合は通常3)
     * @return array 解析されたパラメータの連想配列
     */
    protected function parseCliArguments($args = null, $skip = 3)
    {
        // 引数が指定されていない場合はサーバーから取得
        if ($args === null)
        {
            $args = $this->input->server('argv');
        }
        $params = [];
        // 必要な引数だけを処理
        for ($i = $skip; $i < count($args); $i++)
        {
            if (!isset($args[$i]))
            {
                continue;
            }
            // --で始まるオプションを解析
            if (strpos($args[$i], '--') === 0)
            {
                $paramName = substr($args[$i], 2);
                // 次の引数が値として使えるかチェック
                if (isset($args[$i + 1]) && strpos($args[$i + 1], '--') !== 0)
                {
                    $params[$paramName] = $args[$i + 1];
                    $i++; // 値をスキップ
                }
                else
                {
                    $params[$paramName] = true; // フラグオプション
                }
            }
            // --で始まらない引数の処理(必要に応じて追加)
            else
            {
                $params[] = $args[$i]; // 位置指定引数
            }
        }
        return $params;
    }
}