ヘルパーはアプリケーションのプレゼンテーション層のコンポーネントに似たクラスです。プレゼンテーション用のロジックをもち、多くのビュー・エレメント・レイアウト間で共有されます。この章では独自のヘルパーの作成方法を示します。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>");
}
}
?>
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 ヘッダーや要素を作成するのに便利なメソッド |