CakePHP 4 の bake controller 用テンプレ変数まとめ
はじめに
今日は CakePHP の bake controller 用 Twig テンプレートで使用可能な変数について、その中身をご紹介します。
動作確認に使用したのは CakePHP 4.2.1 (cakephp/bake 2.1.2) です。
今回のサンプルは、データベースの all_drinks テーブルを用いた SoftDrinks モデル作って bake controller コマンドを実行したものです。
<?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 テンプレートの中で、例えば下記のように使えます。
{# 1. actions の使用例 #}
{% for action in actions %}
public function {{ action }}() {
//...
}
{% endfor %}
{# 8. modelObj の使用例 #}
$table = '{{ modelObj.getTable() }}';
- CakePHP 4 で 独自の Bake テンプレートを Theme としてつくり、作業効率を向上! / Twin Turbo Computing
- https://tt-computing.com/cake4-bake-theme
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"
- Summary of Inflector Methods and Their Output
(Inflector - CakePHP 4.x Strawberry Cookbook) - https://book.cakephp.org/4/en/core-libraries/inflector.html#summary-of-inflector-methods-and-their-output
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