Cakephp PHP WEB開発

【Cakephp4】ヘルパーの拡張・別名設定

※本サイトはPR表記を含みます。

Cakephp のデフォルトのヘルパーに独自のメソッドを追加し、それを利用する方法です。

AppHtmlHelper: 拡張するファイルを作成

まず最初に拡張するメソッドのヘルパーファイルを作成します。

src/View/Helper/AppHtmlHelper.php

<?php
declare(strict_types=1);

namespace App\View\Helper;

use Cake\View\Helper\HtmlHelper;

class AppHtmlHelper extends HtmlHelper
{
    /**
     * カスタムボタンタグを生成
     *
     * @param string $text ボタンパーツ上に表示したいテキスト
     * @return string HTML: <button>タグ
     */
    public function customButton($text)
    {
        return '<button class="btn btn-default btn-xs">' . $text . '</button>';
    }
}

この例では、HtmlHelper を親として継承していますが、親ヘルパーの選択により、ある程度カテゴリ分けできそうです。
例えば、Form に関連するヘルパーを定義したい場合、FormHelperを継承すれば管理しやすくなります。

AppView: ヘルパーを別名で呼び出す

<?php
declare(strict_types=1);

namespace App\View;

use Cake\View\View;

class AppView extends View
{
    /**
     * Initialization hook method.
     *
     * Use this method to add common initialization code like loading helpers.
     *
     * e.g. `$this->loadHelper('Html');`
     *
     * @return void
     */
    public function initialize(): void
    {
        parent::initialize();
        $this->loadHelper('Html', ['className' => 'AppHtml']);
    }
}

AppView.php にて loadHelper() を利用し、Htmlヘルパーを定義します。そこに className オプションを設定することで、AppHtmlヘルパーに定義したメソッドを利用することができます。

実際に呼び出す時はテンプレート内で、

// テンプレート内で出力
<?= $this->Html->customButton('Click') ?>

とすることで利用できます。

-Cakephp, PHP, WEB開発
-