CakePHP 4 の bake controller 用テンプレ変数まとめ

はじめに

今日は CakePHP の bake controller 用 Twig テンプレートで使用可能な変数について、その中身をご紹介します。

動作確認に使用したのは CakePHP 4.2.1 (cakephp/bake 2.1.2) です。

今回のサンプルは、データベースの all_drinks テーブルを用いた SoftDrinks モデル作って bake controller コマンドを実行したものです。

/src/Model/Table/SoftDrinksTable.php
<?php
declare(strict_types=1);

namespace App\Model\Table;

use Cake\ORM\Table;

class SoftDrinksTable extends Table
{
    public function initialize(array $config): void
    {
        parent::initialize($config);

        $this->setTable('all_drinks');
    }
}
$ bin/cake bake controller SoftDrinks

ご紹介する変数は Twig テンプレートの中で、例えば下記のように使えます。

/plugins/MyBakeTheme/templates/bake/Controller/controller.twig
{# 1. actions の使用例 #}
{% for action in actions %}
public function {{ action }}() {
  //...
}
{% endfor %}

{# 8. modelObj の使用例 #}
$table = '{{ modelObj.getTable() }}';
目次
  1. actions
  2. baseNamespace
  3. components
  4. currentModelName
  5. defaultModel
  6. entityClassName
  7. helpers
  8. modelObj
  9. namespace
  10. plugin
  11. pluralHumanName
  12. pluralName
  13. prefix
  14. singularHumanName
  15. singularName
  16. おわりに

1. actions

デフォルトだと下記のようになります。

array(5) {
  [0]=>
  string(5) "index"
  [1]=>
  string(4) "view"
  [2]=>
  string(3) "add"
  [3]=>
  string(4) "edit"
  [4]=>
  string(6) "delete"
}

--actions で指定した場合は、その内容が入ります。

$ bin/cake bake controller SoftDrinks --actions one,two,three
array(3) {
  [0]=>
  string(3) "one"
  [1]=>
  string(3) "two"
  [2]=>
  string(5) "three"
}

2. baseNamespace

string(3) "App"

3. components

bake コマンドの --components オプションで渡した値が入ります。

$ bin/cake bake controller SoftDrinks --components SampleOne,SampleTwo
array(2) {
  [0]=>
  string(9) "SampleOne"
  [1]=>
  string(9) "SampleTwo"
}

4. currentModelName

string(10) "SoftDrinks"

5. defaultModel

string(31) "App\Model\Table\SoftDrinksTable"

6. entityClassName

string(9) "SoftDrink"

7. helpers

bake コマンドの --helpers オプションで渡した値が入ります。

$ bin/cake bake controller SoftDrinks --helpers SampleOne,SampleTwo
array(2) {
  [0]=>
  string(9) "SampleOne"
  [1]=>
  string(9) "SampleTwo"
}

8. modelObj

モデルの Table オブジェクトが入ります。

テーブル名を取得したい場合はこの変数が使えます。

object(App\Model\Table\SoftDrinksTable)#72 (8) {
  ["registryAlias"]=>
  string(10) "SoftDrinks"
  ["table"]=>
  string(10) "all_drinks"
  ["alias"]=>
  string(10) "SoftDrinks"
  ["entityClass"]=>
  string(26) "App\Model\Entity\SoftDrink"
  ["associations"]=>
  array(0) {
  }
  ["behaviors"]=>
  array(0) {
  }
  ["defaultConnection"]=>
  string(7) "default"
  ["connectionName"]=>
  string(7) "default"
}

9. namespace

string(3) "App"

10. plugin

bake controller コマンドで plugin オプションを指定した場合に入ります。
plugin オプションは -p か --plugin で指定します。

$ bin/cake bake controller SoftDrinks -p MySample
$ bin/cake bake controller SoftDrinks --plugin MySample
string(9) "MySample."

11. pluralHumanName

今回試したところでは下記が出力されたのですが、
bake のソースコードを見ても恐らく不具合かなと考えています。

string(10) "softDrinks"

本来は下記のように出力されると思います。

string(11) "Soft Drinks"

12. pluralName

string(10) "softDrinks"

13. prefix

bake controller コマンドで prefix オプションを指定した場合に入ります。

$ bin/cake bake controller SoftDrinks --prefix Admin
string(6) "\Admin"

14. singularHumanName

string(10) "Soft Drink"

15. singularName

string(9) "softDrink"

16. おわりに

Bake は使えるようになると作業効率化につながるのですが、コマンドのオプションが豊富で、コントローラ / モデル / テンプレート で使用可能な変数が異なり、また Twig の知識も必要になるので、敷居が高めかなと思っています。

まとまった時間が取れない場合は、最初は小さなオリジナル Bake テンプレ作りから始めて、少しずつ作り込んでいくのがいいのかなと考えています。

Bake テンプレづくりには CakePHP のデフォルトテンプレートが参考になると思いますので併せてご確認ください。
(コントローラのテンプレは下記にあります)

/vendor/cakephp/bake/templates/bake/Controller/controller.twig