ヘルパー

ヘルパーはアプリケーションのプレゼンテーション層のコンポーネントに似たクラスです。プレゼンテーション用のロジックをもち、多くのビュー・エレメント・レイアウト間で共有されます。この章では独自のヘルパーの作成方法を示します。CakePHP のコアヘルパーが目的を達する助けとなる基本のタスクを概観します。コアヘルパーの詳細は Built-in Helpers を見てください。

ヘルパーを使用する

コントローラに指定することで CakePHP でヘルパーを使用します。各コントローラは $helpers プロパティをもち、ビューで利用可能なヘルパーをリストします。ビューでヘルパーを有効にするには、コントローラの $helpers 配列にヘルパー名を追加します。

<?php
class BakeriesController extends AppController {
    var $helpers = array('Form', 'Html', 'Javascript', 'Time');
}
?>

アクション内からヘルパーを追加できます。そのアクションでのみ有効で、コントローラ内の他のアクションでは無効になります。これはコントローラをよりよい状態にするためにヘルパーを使用しない他のアクションに処理能力を保持します。

<?php
class BakeriesController extends AppController {
    function bake {
        $this->helpers[] = 'Time';
    }
    function mix {
        // Time ヘルパーはここではロードされず、無効です。
    }
}
?>

ヘルパーを作成する

コアヘルパー(または Cakeforge や Bakery にあるもの)が機能要求を満たさない場合、簡単にヘルパーを作成することできます。

では、ヘルパーを作成して、特別に作成された CSS 形式のリンクを出力してみましょう。そのリンクはアプリケーション内でさまざまなところで必要とされます。既存の CakePHP のヘルパー構造にロジックを合わせるために、/app/views/helpers 内に新しいクラスを作成する必要があります。ここでは LinkHelper というヘルパーにします。実際の PHP のクラスファイルは次のようになります:

<?php
/* /app/views/helpers/link.php */

class LinkHelper extends AppHelper {
    function makeEdit($title, $url) {
        // 特別な形式のリンクを作成するロジックをここに記述する
    }
}

?>

CakePHP のヘルパークラスには、便利ないくつかのメソッドがあります:

output(string $string)

この関数を使用してビューにデータを返します。

<?php
function makeEdit($title, $url) {
    // ヘルパーの出力関数を使用して、ビューに返す
    // 整形されたデータを処理します:
    return $this->output(
        "<div class=\"editOuter\">
         <a href=\"$url\" class=\"edit\">$title</a>
         </div>"
    );
}
?>

他のヘルパーを読み込む

別のヘルパーですでに存在する機能を使用したい場合があります。これを実現するには、コントローラと同じように $helpers 配列を使用してヘルパーを指定します。

<?php
/* /app/views/helpers/link.php (using other helpers) */
class LinkHelper extends AppHelper {
    var $helpers = array('Html');

    function makeEdit($title, $url) {
        // HTML ヘルパーを使用して整形されたデータを出力する
        // データのフォーマット:

        $link = $this->Html->link($title, $url, array('class' => 'edit'));

        return $this->output("<div class=\"editOuter\">$link</div>");
    }
}
?>

Callback method

Helpers feature a callback used by the parent controller class.

beforeRender()

The beforeRender method is called after the controller’s beforeRender method but before the controller’s renders views and layout.

独自のヘルパーを使用する

ヘルパーを作成し /app/views/helpers/ にそれを置くと、コントローラ内で特別変数 $helpers を使用してそれを読み込むことができます。

コントローラがこの新しいクラスを見つけると、ビュー内で使用することができ、helper の後に名付けた変数でアクセスできます:

<!-- 新しいヘルパーを使用してリンクを作成する -->
<?php echo $link->makeEdit('Change this Recipe', '/recipes/edit/5') ?>

$helpers 配列に FormHelper を指定することを覚えておいてください。Html と Session ヘルパー(セッションが有効な場合)は常に利用できます。

すべてのヘルパーで使用する機能を作成する

すべてのヘルパーは特別クラス AppHelper(モデルが AppModel を継承し、コントローラが AppController を継承しているのと同様に)を継承しています。すべてのヘルパーで利用可能な機能を作成するには、/app/app_helper.php を作成します。

<?php
class AppHelper extends Helper {
    function customMethod () {
    }
}
?>

コアヘルパー

CakePHP はビュー作成を目的とするヘルパーがあります。well-formed なマークアップ(フォームを含みます)を作成を補助し、テキスト・時間・数値の整形する目的があります。Ajax 機能をスピードアップさえもします。ここでは組み込みヘルパーの概要を記述します。詳細は 組み込みのヘルパー をみてください。

CakePHP Helper 詳細
Ajax ビュー内で Ajax 機能を作成するために Prototype JavaScript ライブラリを使用します。ドラッグアンドドロップ・ajax フォームやリンク・オブザーバなどのショートカットメソッドがあります。
Cache ビューの内容をキャッシュするためにコアで使用されます。
Form 内部でよく使用する HTML フォームやフォーム要素を作成し、バリデーション問題を処理します。
Html well-formed なマークアップを作成するのに便利なメソッド。イメージ, リンク, テーブル, ヘッダータグなどです。
Javascript JavaScripts で使用する値をエスケープするために使用します。JSON オブジェクト用にデータを出力したり、コードブロックを出力します。
Number 数値や通貨のフォーマット
Paginator モデルデータのペジネーションやソート
Rss RSS フィード用 XML データを出力する際に便利なメソッド
Session ビュー内でセッションの値を書き込む
Text スマートなリンク、ハイライト、スマートな単語の分割
Time 直近を検出(来年かどうか?)、見た目のよい文字列フォーマット(今日、10:30 am)、タイムゾーン変換
Xml XML ヘッダーや要素を作成するのに便利なメソッド