この記事について
CakePHPは、デフォルトでCake\View\Helper\FormHelper, Cake\View\Helper\HtmlHelperなどを含んでいます。これらを使用すると、自分でHTMLを直接コーディングしないでほぼPHP内でHTMLタグを自動作成してくれます。例えば、以下のようなコーディングができます。
echo $this->Html->image('cake_logo.png', ['alt' => 'CakePHP']);
これは、以下のHTMLを生成します。
<img src="/img/cake_logo.png" alt="CakePHP" />
でもどうやってこのようにHTMLヘルパークラスはHTMLタグを返却するのでしょう?自分も同じようなヘルパークラスを作れないのか?ということで、今回はHTMLヘルパークラスを紐解きながら、このようなヘルパークラスの作成方法を考えていきます。
実際にHTMLヘルパークラスを見てみよう
以下のリンクから、公式のHTMLヘルパーのコードを参考にできます。
https://github.com/cakephp/cakephp/blob/4.0.8/src/View/Helper/HtmlHelper.php
ここで特に気づいてほしいのは、Cake\View\StringTemplateTraitの使用です。
他のヘルパークラスを見ても同じように使われています。これさえうまく使いこなせれば、ヘルパークラスをかなりカスタマイズできそうです。
公式の説明を読んでもいまいち理解できないので、実際にStringTemplateTraitを使っているHTMLヘルパーをパクって自作ヘルパーを作っていきます。
設計、プラン
1. StringTemplateTraitを呼び出す
<?php
declare(strict_types=1);
namespace App\View\Helper;
use Cake\View\Helper;
//StringTemplateTraitを呼び出す
use Cake\View\StringTemplateTrait;
class FruitsHelper extends Helper
{
//StringTemplateTraitの使用を宣言
use StringTemplateTrait;
//ヘルパー内で他のヘルパークラスを使う場合、以下のように書く
protected $helpers = ['Url'];
ここは、ベーシックなヘルパーを作成するのと同じです。今回、URLヘルパーをFruitsヘルパーの中で使いたいので$helpersに設定しています。
2. $_defaultConfigにtemplatesを設定
編集中
3. renderメゾットの定義
編集中
4. フロント側でrenderメゾットを呼び出す
編集中
