アンケートご協力のお願いgihyo.jpでは,2010年度に向けて豪華プレゼントが当たる読者属性アンケートを実施しております。ご協力ください。

gihyo.jp » DEVELOPER STAGE » 連載 » CakePHPで高速Webアプリ開発 » 第13回 ヘルパーの作り方

CakePHPで高速Webアプリ開発

第13回 ヘルパーの作り方

ヘルパーとは

CakePHPにはビューの処理を効率化するための「ヘルパー」と呼ばれる機構があります。また,単にビューの一部を部品化して再利用するだけであれば「エレメント」を使用する方法あります。エレメントは本連載の第8回で使用しています。

ヘルパーを使う機会

ヘルパーを作る機会は,絶対数的には少ないです。というのも,ビューの効率化はエレメントで事足りることが多いからです。第8回では使用していませんが,renderElementメソッドには引数を渡すこともできるので,関数呼び出しのように引数を付けてエレメントを使用することが可能です。エレメントはベタのphpファイルなので,とてもシンプルでデザイナーフレンドリーなことも強みです。

それでもヘルパーの作り方を学ぶことは良いことです。その理由は,ビュー内での複雑な計算や,コードの重複がいくつも発生するときなどにヘルパーが適しているからです。ヘルパーの本体はPHPのクラスであり,メソッドなどを自由に作れるので,効率的に記述できます。エレメントの場合,classやfunctionを作ることは想定されていないため,順次実行的にしか記述できません。

また,有志が公開している便利なヘルパーを使用する際,ヘルパーの作り方を知っていれば,マニュアル以上の理解を得ることができます。

本記事ではCakePHP1.1系でのヘルパーの作り方を解説します。

ヘルパーファイルの仕様

設置場所

ヘルパーは通常,1ヘルパー1ファイルで記述します。ファイルはapp/views/helpers/ディレクトリ内に設置します。helpersディレクトリがなければ,自分で作成してかまいません。app/views/helpers/ディレクトリ内にはヘルパーファイルのみが格納されます。

クラス名・ファイル名の命名規則

ヘルパーは1つのクラスとして定義します。クラス名は「ヘルパー名のCamelCase(単語の頭文字が大文字)+Helper」です。ファイル名はヘルパー名を小文字で,単語をアンダースコアで区切り,拡張子をphpとします。

たとえば「GihyoCommon」ヘルパーは,以下のようになります。

  • GihyoCommonHelperクラス
  • app/views/helpers/gihyo_common.php

クラス定義

GihyoCommonヘルパーのクラス定義は以下のようになります。CakePHPコアで定義されたHelperクラスを継承します。

<?php
class GihyoCommonHelper extends Helper {
}

このクラスに自由にプロパティやメソッドを作成してビューから呼び出すことができます。

ヘルパーを作ってみよう

では,GihyoCommonヘルパーとして,gihyo.jp のURLを返す機能を実装してみます。

app/views/helpers/gihyo_common.php

<?php
class GihyoCommonHelper extends Helper {
  var $_index_url = 'http://gihyo.jp/';
  function getIndexUrl() {
    return $this->output($this->_index_url)
  }
}

「$this->output(~)」は,/app/config/core.php で定義された AUTO_OUTPUT定数の設定よって,出力するか,文字列で返すかが決まるメソッドです。出力するか返り値にするかは動作としてはまったく別物です。返り値にしておくと,値を使って何かをしたいときに対応し易いです。出力にしておくと,echo文などが不要になるので記述が少なく済みます。どちらが良いかは,状況やお好み次第でしょう。ここでは AUTO_OUTPUT定数はfalseで,返り値になる前提で解説します。

このGihyoCommonヘルパーを使用する場合のコントローラの例が以下になります。

app/controllers/example_controller.php

<?php
class ExampleController extends AppController {
  var $uses = array();
  var $helpers = array('GihyoCommon');
  function index() {
  }
}

ヘルパーの使用において直接的に関係するのは以下の1行です。

  var $helpers = array('GihyoCommon');

この行で,GihyoCommonヘルパーを使用することを定義しています。

使用したいヘルパーがあるとき,コントローラの$helpersプロパティにヘルパー名の文字列を配列で定義します。

次に,GihyoCommonヘルパーのgetIndexUrlメソッドを使用するビューの例です。

app/views/example/index.thtml

<?php echo $gihyoCommon->getIndexUrl(); ?>

ビュー内では,ヘルパークラスのインスタンスが,ヘルパー名の頭文字が小文字の変数名で定義されています。コントローラやモデルとは異なった規則なので注意が必要です。

ヘルパー内から別のヘルパーを使用したいときは

ヘルパーからは別のヘルパーをそのまま使用することができません。最初から定義されているhtmlヘルパーも使用できません。

ヘルパー内から別のヘルパーを使用するには,準備が必要です。以下のように,ヘルパークラス内で$helpersプロパティに使用したい他のヘルパーを定義してください。

app/views/helpers/gihyo_common.php

<?php
class GihyoCommonHelper extends Helper {
  var $helpers = array('Html');
  var $_index_url = 'http://gihyo.jp/';
  function getIndexLink($title) {
    return $this->output($this->Html->link($title, $this->_index_url));
  }
}

定義したヘルパーは,ヘルパー名と同じ変数名で $thisの中にインスタンスが定義されます。定義されたインスタンスはビューの中で定義されているものと同じですので,ビューと同じように使用できます。

ヘルパーの基本的な知識は以上です。うまく使えばビューのコード量や複雑さを軽減することができますので,ぜひチャレンジしてみてください。

著者プロフィール

秋田真宏(あきたまさひろ)

株式会社ヨセミテ CTO。個人ブログは「akiyan.com」。1981年生まれ。

URLhttp://www.akiyan.com/

著書

  • Fast CakePHP

    Fast CakePHP

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

使ってみよう! Windows Live SDK/API

Windows Liveサービスの一部にはAPIやSDKとして提供されているものがあります。本連載では各API・SDKの紹介とそれらを利用したアプリケーションを開発していきます。

Lifelog~毎日保存したログから見えてくる個性

コンピュータを使って,日常のさまざまなことの記録(ログ)をとり,それを分析して活用することで,もう一段階上の「楽な生活」をめざす日々の研究報告です。

もっと便利に!jQueryでラクラクサイト制作(実践サンプル付き)

本連載では,実践サンプルとともに,jQueryを上手に活用してサイト制作の品質向上・効率化を実現するための実践テクニックを解説します。

Ruby Freaks Lounge

Rubyに関わる,執筆者自身の旬なテーマを扱った,リレー形式の連載です。

これでできる! クロスブラウザJavaScript入門

JavaScriptはウェブ制作において避けては通れない重要な言語ですが,JavaScriptに苦手意識を持たれている方は少なくないようです。 その最大の原因がクロスブラウザ対応という課題であり,本連載ではクロスブラウザ対応のテクニックを詳細に解説します。

ビジネスで成功するためのシステム運用管理のポイント

システムの多様化,技術進歩に伴い,ITシステムの運用管理の必要性が年々高まっています。本連載では,システムの運用管理とは何かについて,現場のニーズと具体的な指針を押さえながらを解説します。

2010年版SEO体得講座

本連載では,いまや企業サイトの戦略の1つとして欠かすことのできないSEOについて,最新トレンドからすぐに使えるTipsまでを紹介します。

小型Linuxサーバの最高峰 OpenBlockS 600活用指南

搭載メモリの増加,CPUクロックの向上など,あらゆる面が強化された期待の新モデルOpenBlockS 600。この記事ではOpenBlockS 600の紹介から,活用するためのさまざまなノウハウを紹介していきます。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス