0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CakePHP4で自作Templateを含んだヘルパーを作成してみる

0
Last updated at Posted at 2020-06-19

この記事について

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ヘルパーをパクって自作ヘルパーを作っていきます。

設計、プラン

以下のようなヘルパーを作りたいと思います。
image.png

1. StringTemplateTraitを呼び出す

FruitsHelper

<?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メゾットを呼び出す

編集中

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?