RitoLabo

CakePHP3で独自のビューヘルパークラスを作成する~爆速と地味便利という最高の要素を添えて~

  • 公開:
  • カテゴリ: PHP CakePHP
  • タグ: PHP,helper,CakePHP,3.5,View

CakePHPのヘルパーと言えば、よくお世話になるFlashやForm、それにPaginatorなど色々(Textヘルパーは地味に便利)ありますが、自身でWebアプリケーションを構築時に、テンプレートへの描画を行っていて、降ってきたパラメータに対してすごく軽微な変換処理とか行いたくて、でもヘルパーとして提供されていなくて、だからコントローラに…書くと使いまわせないし、かと言ってわざわざコンポーネント化するのも…みたいな場合、ありませんか?

それ、ViewHelperで出来ます。

今回は独自のビューヘルパークラスを作成し、テンプレート上でそれを使って独自の処理を実装します。

アジェンダ
  1. ヘルパークラスファイルの作成
  2. ヘルパーの読み込み
  3. テンプレートでの出力

ヘルパークラスファイルの作成

まずは、ヘルパークラスファイルを作成します。bakeコマンドで生成できるので、CakePHPルートディレクトリへ移動し、以下のコマンドを叩きます。

# CakePHPのルートディレクトリへ移動する
cd /path/to/cakephp

# bakeコマンドでヘルパークラスファイルを生成する
bin/cake bake helper Hoge

# 実行結果
[demo@localhost cakephp]# bin/cake bake helper Hoge

Creating file /var/www/html/cakephp/src/View/Helper/HogeHelper.php
Wrote `/var/www/html/cakephp/src/View/Helper/HogeHelper.php`
Deleted `/var/www/html/cakephp/src/View/Helper/empty`

Baking test case for App\View\Helper\HogeHelper ...
Deleted `/var/www/html/cakephp/tests/TestCase/View/Helper/empty`

Creating file /var/www/html/cakephp/tests/TestCase/View/Helper/HogeHelperTest.php
Wrote `/var/www/html/cakephp/tests/TestCase/View/Helper/HogeHelperTest.php`

cakephp/src/View/Helper 配下に HogeHelper.php が生成されます。

cakephp
├─ src
│   ├─ View
│   │   ├─
Helper
│   │   │   └─
StatusHelper.php

このヘルパーファイルに、必要な機能を定義していきます。

cakephp/src/View/Helper/HogeHelper.php
<?php
namespace App\View\Helper;

use Cake\View\Helper;
use Cake\View\View;

class HogeHelper extends Helper
{

protected $_defaultConfig = [];

function get_fw_name(int $num)
{
switch ($num) {
case 1;
return 'Cakephp';
break;
case 2;
return 'Laravel';
break;
default:
return '';
break;
}
}

}

今回は、あるパラメータを受け取って、その番号に対応するPHPフレームワーク名を返す関数を定義しました。

ヘルパーの読み込み

最後に、定義したヘルパークラスを読み込み使えるようにします。

cakephp/src/View/AppView.php
<?php
namespace App\View;

use Cake\View\View;

class AppView extends View
{
public function initialize()
{
parent::initialize();
$this->loadHelper('Hoge');
}
}

ここで読み込む事で、テンプレートにてそれらのメソッドが使用可能になります。コントローラではないところがミソです。

これだけで定義は完了です。

テンプレートでの出力

それでは、ビューテンプレート内に記述して自作ヘルパーを呼び出してみます。

<?php
$num = 1;
echo $this->Hoge->get_fw_name($num);
?>

ブラウザから確認すると、

<pre>
Cakephp
</pre>

独自のHogeHelperで処理された値が返ってきました。

まとめ

以上で作業は完了です。
便利なヘルパー群ですが、自作のものも配置できるようになると一気に構築もはかどると思うので、是非試してみてください。