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
  2. displayField
  3. entityClass
  4. fields
  5. keyFields
  6. modelClass
  7. modelObject
  8. namespace
  9. pluralHumanName
  10. pluralVar
  11. primaryKey
  12. schema
  13. singularHumanName
  14. singularVar
  15. おわりに

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"
}

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

詳細なテーブル情報が取得できます。

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