CakePHP 4 の bake template 用テンプレ変数まとめ
はじめに
今日は前回の「CakePHP 4 の bake controller 用テンプレ変数まとめ」に続き、
bake template 用 Twig テンプレートで使用可能な変数の内容をご紹介します。
動作確認に使用したのは CakePHP 4.2.1 (cakephp/bake 2.1.2) です。
今回のサンプルは、データベースの all_drinks テーブルを用いた SoftDrinks モデル作って bake template コマンドを実行したものです。SoftDrinks モデルには drink_types テーブルとのリレーションを設定しています。
/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');
$this->setPrimaryKey('id');
$this->setDisplayField('abbr');
$this->belongsTo('drink_types');
}
}
$ bin/cake bake template SoftDrinks
1. associations
array(1) {
["BelongsTo"]=>
array(1) {
["drink_types"]=>
array(9) {
["property"]=>
string(10) "drink_type"
["variable"]=>
string(10) "drinkTypes"
["primaryKey"]=>
array(1) {
[0]=>
string(2) "id"
}
["displayField"]=>
string(4) "name"
["foreignKey"]=>
string(13) "drink_type_id"
["alias"]=>
string(11) "drink_types"
["controller"]=>
string(11) "drink_types"
["fields"]=>
array(2) {
[0]=>
string(2) "id"
[1]=>
string(4) "name"
}
["navLink"]=>
bool(true)
}
}
}
2. displayField
Table クラスの setDisplayField() で指定した値が入ります。
string(4) "abbr"
未指定の場合は 'name' になります。
3. entityClass
string(26) "App\Model\Entity\SoftDrink"
4. fields
モデルのテーブルにあるフィールド(カラム)です。
array(4) {
[0]=>
string(2) "id"
[1]=>
string(13) "drink_type_id"
[2]=>
string(4) "abbr"
[3]=>
string(4) "name"
}
5. keyFields
belognsTo の foreignKey と、当該モデルの変数名形式の文字列が入ります。
array(1) {
["drink_type_id"]=>
string(10) "drinkTypes"
}
6. modelClass
string(10) "SoftDrinks"
7. modelObject
モデルの Table オブジェクトが入ります。
コントローラ用テンプレートとは変数名が異なるのでご注意ください。
object(App\Model\Table\SoftDrinksTable)#71 (8) {
["registryAlias"]=>
string(10) "SoftDrinks"
["table"]=>
string(10) "all_drinks"
["alias"]=>
string(10) "SoftDrinks"
["entityClass"]=>
string(26) "App\Model\Entity\SoftDrink"
["associations"]=>
array(1) {
[0]=>
string(11) "drink_types"
}
["behaviors"]=>
array(0) {
}
["defaultConnection"]=>
string(7) "default"
["connectionName"]=>
string(7) "default"
}
- modelObj
(CakePHP 4 の bake controller 用テンプレ変数まとめ / Twin Turbo Computing) - https://tt-computing.com/cake4-bake-cntlr-vars#model-obj
8. namespace
string(3) "App"
9. pluralHumanName
string(11) "Soft Drinks"
10. pluralVar
string(10) "softDrinks"
11. primaryKey
array(1) {
[0]=>
string(2) "id"
}
12. schema
詳細なテーブル情報が取得できます。
- Schema System - CakePHP 4.x Strawberry Cookbook
- https://book.cakephp.org/4/en/orm/schema-system.html
object(Cake\Database\Schema\TableSchema)#78 (7) {
["table"]=>
string(10) "all_drinks"
["columns"]=>
array(4) {
["id"]=>
array(9) {
["type"]=>
string(7) "integer"
["length"]=>
NULL
["unsigned"]=>
bool(false)
["null"]=>
bool(false)
["default"]=>
NULL
["comment"]=>
string(0) ""
["autoIncrement"]=>
bool(true)
["baseType"]=>
NULL
["precision"]=>
NULL
}
["drink_type_id"]=>
array(9) {
["type"]=>
string(7) "integer"
["length"]=>
NULL
["unsigned"]=>
bool(false)
["null"]=>
bool(false)
["default"]=>
NULL
["comment"]=>
string(0) ""
["baseType"]=>
NULL
["precision"]=>
NULL
["autoIncrement"]=>
NULL
}
["abbr"]=>
array(8) {
["type"]=>
string(6) "string"
["length"]=>
int(255)
["null"]=>
bool(false)
["default"]=>
NULL
["collate"]=>
string(15) "utf8_general_ci"
["comment"]=>
string(0) ""
["baseType"]=>
NULL
["precision"]=>
NULL
}
["name"]=>
array(8) {
["type"]=>
string(6) "string"
["length"]=>
int(255)
["null"]=>
bool(false)
["default"]=>
NULL
["collate"]=>
string(15) "utf8_general_ci"
["comment"]=>
string(0) ""
["baseType"]=>
NULL
["precision"]=>
NULL
}
}
["indexes"]=>
array(0) {
}
["constraints"]=>
array(1) {
["primary"]=>
array(3) {
["type"]=>
string(7) "primary"
["columns"]=>
array(1) {
[0]=>
string(2) "id"
}
["length"]=>
array(0) {
}
}
}
["options"]=>
array(2) {
["engine"]=>
string(6) "InnoDB"
["collation"]=>
string(15) "utf8_general_ci"
}
["typeMap"]=>
array(4) {
["id"]=>
string(7) "integer"
["drink_type_id"]=>
string(7) "integer"
["abbr"]=>
string(6) "string"
["name"]=>
string(6) "string"
}
["temporary"]=>
bool(false)
}
13. singularHumanName
string(10) "Soft Drink"
14. singularVar
string(9) "softDrink"
15. おわりに
今回はテンプレートを Bake する際の Twig テンプレートで使用可能な変数をご紹介しましたが、他にも Bake ヘルパーの関数も使うことができます。
例えば Bake ヘルパーの getViewFieldsData() 関数を使う場合は下記のようになります。
/plugins/MyBakeTheme/templates/bake/Template/add.twig
{{ dump(Bake.getViewFieldsData(fields, schema, associations)) }}
Bake ヘルパーについては別途まとめようと考えていますが、実体は下記ファイルにありますので、ご参照いただければと思います。
/vendor/cakephp/bake/src/View/Helper/BakeHelper.php