Skip to content
このドキュメントは、CakePHP 2.x の PHP 8 対応フォーク pieceofcake2/cakephp のものです。 フォークについて

Shell ヘルパー ​

Added in version 2.8

Shell ヘルパーは、2.8.0 で追加されました。

Shell ヘルパーは、複雑な出力生成コードをまとめられます。Shell ヘルパーは、 任意のシェルやタスクからアクセスや使用ができます。

// 表としてデータを出力
$this->helper('table')->output($data);

// プラグインからヘルパーを取得
$this->helper('Plugin.HelperName')->output($data);

また、ヘルパーのインスタンス取得や、そのインスタンスのパブリックメソッドの呼び出しができます。

// Progress ヘルパーの取得と使用
$progress = $this->helper('Progress');
$progress->increment(10);
$progress->draw();

ヘルパーの作成 ​

CakePHP は、いくつかの Shell ヘルパーを用意していますが、あなたのアプリケーションや プラグインの中で、新たに作成することができます。例として、装飾的なヘッダーを生成するための 単純なヘルパーを作成してみましょう。Shell ヘルパーのクラス名には ShellHelper という サフィックスを付けます。最初に src/Console/Helper/HeadingShellHelper.php を作成し、 以下のように記述します。

// src/Console/Helper/HeadingShellHelper.php
class HeadingShellHelper extends BaseShellHelper
{
    public function output($args)
    {
        $args += ['', '#', 3];
        $marker = str_repeat($args[1], $args[2]);
        $this->_consoleOutput->out($marker . ' ' . $args[0] . ' ' . $marker);
    }
}

BaseShellHelper は Composer のオートローダーで読み込まれるので、App::uses() は 必要ありません。output() の引数は 1 つの配列として渡します。 以下のように、あるシェルコマンドの中でこの新しいヘルパーを使用することができます。

// 両側に ### を追加
$this->helper('heading')->output(['It works!']);

// 両側に ~~~~ を追加
$this->helper('heading')->output(['It works!', '~', 4]);

組込ヘルパー ​

Table ヘルパー ​

TableHelper は、アスキーアートの表の作成を支援します。使い方は、とてもシンプルです。

$data = [
    ['Header 1', 'Header', 'Long Header'],
    ['short', 'Longish thing', 'short'],
    ['Longer thing', 'short', 'Longest Value'],
];
$this->helper('table')->output($data);

// 出力結果
+--------------+---------------+---------------+
| Header 1     | Header        | Long Header   |
+--------------+---------------+---------------+
| short        | Longish thing | short         |
| Longer thing | short         | Longest Value |
+--------------+---------------+---------------+

Progress ヘルパー ​

ProgressHelper は2つの異なる方法で利用されます。シンプルなモードは、 処理が完了するまでに呼び出されるコールバックを、オプション配列の最初の要素として 渡すことができます。

$this->helper('progress')->output([
    function ($progress) {
        // ここで作業します
        $progress->increment(20);
    },
]);

追加のオプションを渡すことで、プログレスバーの制御ができます。

  • total プログレスバーの全アイテム数。デフォルトは 100 です。
  • width プログレスバーの幅。デフォルトは 80 です。
  • callback プログレスバーを更新するループ中で呼ばれるコールバック。

全てのオプションを使用した例です。

$this->helper('progress')->output([
    'total' => 10,
    'width' => 20,
    'callback' => function ($progress) {
        $progress->increment(2);
    },
]);

Progress ヘルパーは、必要であればプログレスバーの増加や再描画を手動で行うことができます。

$progress = $this->helper('Progress');
$progress->init([
    'total' => 10,
    'width' => 20,
]);

$progress->increment(4);
$progress->draw();

Based on the CakePHP Cookbook. Content licensed under CC BY-NC-SA 4.0. Not affiliated with the Cake Software Foundation.