標準のHelperを拡張してカスタマイズする方法

CakePHP3、CakePHP4共通です。
CakePHP5ではAppView::loadHelper()がAppView::addHelper()に変更されています。
CakePHP2ではAppControllerの$helpersプロパティでHelperを指定します。
[参考記事] CakePHP2の場合

AppView.phpのinitialize()に次のように書くとViewでHelperを呼び出すことができます。

$this->loadHelper('【Viewでのプロパティ名】', ['className' => '【呼び出されるクラス名】']);

標準のHelper(組み込みヘルパー/コアヘルパー)を別のクラスを使用するよう指定できます。

$this->loadHelper('Form', ['className' => 'CustomForm']);

テンプレートを指定する場合は配列に追加します。

$this->loadHelper('Form', ['className' => 'CustomForm', 'templates' => 'form-templates']);

独自のHelperはsrc/View/Helper配下に配置します。


src/View/AppView.php

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
    {
        // 拡張Helperを使用する
        $this->loadHelper('Flash', ['className' => 'CustomFlash']);
        $this->loadHelper('Form', ['className' => 'CustomForm']);
        $this->loadHelper('Html', ['className' => 'CustomHtml']);
        $this->loadHelper('Paginator', ['className' => 'CustomPaginator']);
        $this->loadHelper('Url', ['className' => 'CustomUrl']);
    }
}

src/View/Helper/CustomFlashHelper.php

<?php
declare(strict_types=1);

namespace App\View\Helper;

use Cake\View\Helper\FlashHelper;

/**
 * FlashHelperの拡張ヘルパー
 *
 * @link https://book.cakephp.org/4/ja/views/helpers/flash.html
 */
class CustomFlashHelper extends FlashHelper
{
}

src/View/Helper/CustomFormHelper.php

<?php
declare(strict_types=1);

namespace App\View\Helper;

use Cake\View\Helper\FormHelper;

/**
 * FormHelperの拡張ヘルパー
 *
 * @property \Cake\View\Helper\HtmlHelper $Html
 * @property \Cake\View\Helper\UrlHelper $Url
 * @link https://book.cakephp.org/4/ja/views/helpers/form.html
 */
class CustomFormHelper extends FormHelper
{
}

src/View/Helper/CustomHtmlHelper.php

<?php
declare(strict_types=1);

namespace App\View\Helper;

use Cake\View\Helper\HtmlHelper;

/**
 * HtmlHelperの拡張ヘルパー
 *
 * @property \Cake\View\Helper\UrlHelper $Url
 * @link https://book.cakephp.org/4/ja/views/helpers/html.html
 */
class CustomHtmlHelper extends HtmlHelper
{
}

src/View/Helper/CustomPaginatorHelper.php

<?php
declare(strict_types=1);

namespace App\View\Helper;

use Cake\View\Helper\PaginatorHelper;

/**
 * PaginatorHelperの拡張ヘルパー
 *
 * @property \Cake\View\Helper\UrlHelper $Url
 * @property \Cake\View\Helper\NumberHelper $Number
 * @property \Cake\View\Helper\HtmlHelper $Html
 * @property \Cake\View\Helper\FormHelper $Form
 * @link https://book.cakephp.org/4/ja/views/helpers/paginator.html
 */
class CustomPaginatorHelper extends PaginatorHelper
{
}

src/View/Helper/CustomUrlHelper.php

<?php
declare(strict_types=1);

namespace Cake\View\Helper;

use Cake\View\Helper\UrlHelper;

/**
 * UrlHelperの拡張ヘルパー
 *
 * @link https://book.cakephp.org/4/ja/views/helpers/url.html
 */
class CustomUrlHelper extends UrlHelper
{
}

関連記事

スポンサーリンク

Raspberry Pi Zero WHのチップ・無線LANアンテナ(大きなチップはCPUではありません)

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る