Bake ドキュメント
Bake プラグインは bake コンソールシェルを提供します。このシェルは、 pieceofcake2/cakephp で動作する CakePHP 2 アプリケーションのモデル、 コントローラー、ビュー、フィクスチャ、テスト、プラグイン、プロジェクトを生成します。CakePHP 2 のクックブックの Bake でコード生成 も参照してください。
インストール
Composer で、開発用の依存パッケージとしてプラグインをインストールします。 pieceofcake2/app スケルトンから作成したアプリケーションには、すでに含まれています。
composer require --dev pieceofcake2/bakeこのプラグインは cakephp-plugin タイプなので、composer/installers によってプラグインのディレクトリに インストールされます。正しい場所にインストールされるように、アプリケーションの composer.json で installer-paths を設定してください。
| 構成 | installer-paths |
|---|---|
モダン (config/、src/、templates/、plugins/) | "plugins/{$name}/": ["type:cakephp-plugin"] |
レガシー (app/Config/、app/Plugin/) | "app/Plugin/{$name}/": ["type:cakephp-plugin"] |
プラグインは config/bootstrap.php (レガシー構成では app/Config/bootstrap.php) で読み込みます。 すでに CakePlugin::loadAll() を使っている場合は必要ありません。
CakePlugin::load('Bake');Bake は開発用の依存パッケージなので、composer install --no-dev でデプロイした環境にはインストールされません。 インストールされていないプラグインを読み込むと MissingPluginException が投げられるので、インストールされている 環境でだけ読み込んでください。たとえば次のようにします。
if (Configure::read('debug')) {
CakePlugin::load('Bake');
}Bake の実行
プロジェクトルートで bin/cake (レガシー構成では app/Console/cake) を使って Bake を実行します。
# Bake a model
bin/cake bake model User
# Bake a controller
bin/cake bake controller Users
# Bake views
bin/cake bake view Users
# Bake the model, controller, views, fixture and tests of a model
bin/cake bake all User
# Bake a new plugin
bin/cake bake plugin MyPlugin名前を指定せずに bin/cake bake (または bin/cake bake model などのコマンド) を実行すると、対話モードが始まり、 生成の手順を案内します。database.php がまだない場合、Bake はまずそれを作成するか尋ねます。
ファイルはアプリケーションのディレクトリに書き込まれます。モダン構成のアプリケーションでは src/Model/、 src/Controller/ と templates/ に、レガシー構成のアプリケーションでは app/Model/、app/Controller/ と app/View/ に書き込まれます。
モダン構成のアプリケーションは、src/ と CakePHP のクラスを Composer のクラスマップでオートロードするので、 bake したクラスとテストには App::uses() の呼び出しがありません。例外は、コンポーネント、ヘルパー、ビヘイビアの テストでのテスト対象のクラスです (bake したばかりのクラスは、composer dump-autoload を実行するまでクラスマップに 含まれないためです)。レガシー構成のアプリケーション向けや、プラグインの中に bake したクラスでは、App::uses() の 呼び出しが残ります。
各コマンドの引数とオプションは --help で確認できます。
bin/cake bake controller --helpコマンド
| コマンド | 説明 |
|---|---|
all [<model>] | 1 つのモデルについて、モデル、コントローラー、ビューと、PHPUnit がインストールされていればそのフィクスチャとテストを bake します。 |
model [<name>] | バリデーションルールとアソシエーションを含むモデルを bake します。model all はすべてのモデルを bake します。 |
controller [<name>] | コントローラーを bake します。--public は CRUD アクション (index、view、add、edit、delete) を追加し、--admin は Routing.prefixes のいずれかに対してそれらを追加します。controller all はすべてのコントローラーを bake します。 |
view [<controller>] [<action>] [<alias>] | コントローラーのビュー (index、view、add、edit)、または 1 つのビューを bake します。 |
fixture [<name>] | テストのフィクスチャを bake します。fixture all はすべてのテーブルのフィクスチャを bake します。 |
test [<type>] [<name>] | コントローラー、モデル、ヘルパー、コンポーネント、ビヘイビアのテストケースを bake します。 |
plugin [<name>] | 新しいプラグインのディレクトリ構成、AppController と AppModel を bake します。 |
db_config | database.php 設定ファイルを bake します。 |
project [<path>] | スケルトンから新しいアプリケーションを bake します。 |
プラグインの中に bake するには、bin/cake bake model ContactManager.Contact のように、名前を Plugin.Name の形で 指定します。
bake project は、プラグインに同梱されているレガシーな app/ 形式のスケルトン (Console/Templates/skel) を コピーします。別のディレクトリをコピーするには --skel を使います。モダン構成の新しいアプリケーションを始めるには、 代わりに composer create-project pieceofcake2/app を使ってください (pieceofcake2/app を参照)。
オプション
| オプション | コマンド | 説明 |
|---|---|---|
--connection、-c | all、model、controller、view、fixture | 使用するデータベース接続 (デフォルト: default)。 |
--plugin、-p | model、controller、view、fixture、test | bake する先のプラグイン。 |
--theme、-t | すべてのコマンド | 使用する Bake テーマ。 |
--force、-f | model、controller、view、fixture、test | 確認せずに既存のファイルを上書きします。 |
--public | controller | CRUD アクションを追加します。 |
--admin | controller、view | admin ルーティングプレフィックス用のアクションまたはビューを追加します。 |
--count、-n | fixture | 生成するレコードの数 (デフォルト: 1)。 |
--records、-r | fixture | 実際のテーブルからレコードをインポートします (--count 件、デフォルト 10)。 |
--schema、-s | fixture | スキーマをフィクスチャに書き込む代わりにインポートします。 |
--empty | project | 各ディレクトリに空のファイルを作成します。たとえば Git でディレクトリを残すためです。 |
--skel | project | 新しいアプリケーションのコピー元のディレクトリ。 |
Bake テーマ
Bake はテンプレートからコードを生成します。デフォルトのテンプレートは、プラグインの Console/Templates/default/ ディレクトリにあります。
Console/Templates/default/
├── actions/
│ └── controller_actions.ctp
├── classes/
│ ├── controller.ctp
│ ├── fixture.ctp
│ ├── model.ctp
│ └── test.ctp
└── views/
├── form.ctp
├── index.ctp
└── view.ctp生成されるコードをカスタマイズするには、bake テーマを作成します。bake テーマは、アプリケーションの src/Console/Templates/ (レガシー構成では app/Console/Templates/) か、プラグインの Console/Templates/ に置く ディレクトリで、変更したいテンプレートを入れます。テンプレートはデフォルトのテーマからコピーして編集します。
src/Console/Templates/myTheme/
├── classes/
│ ├── controller.ctp
│ ├── fixture.ctp
│ └── model.ctp
└── views/
├── form.ctp
├── index.ctp
└── view.ctpテーマのディレクトリには、actions/、classes/、views/ のディレクトリのうち少なくとも 1 つが必要です。 テーマにないテンプレートは、インストールされている他のテーマから、最後にはデフォルトのテーマから取得されます。
テーマは --theme で選択します。
bin/cake bake controller Users --theme myTheme複数のテーマがインストールされていて、テーマが指定されていない場合、Bake はどれを使うか尋ねます。
bake したビューと legacy テーマ
default テーマで bake したビューは CakePHP 5 の bake のテンプレートに倣っており、 pieceofcake2/app スケルトンのスタイル (CakePHP 5 のアプリケーション スケルトンのスタイルシートである normalize.min.css、milligram.min.css、fonts.css と cake.css) を使います:
index.ctp: 「New」ボタンのあるコンテンツボックス、並べ替えのできる列と View / Edit / Delete リンクを持つ レスポンシブなテーブル、そしてページネーター。view.ctpとform.ctp(add と edit): コンテンツボックスの横に「Actions」のサイドナビゲーション。 view はレコードをテーブルで表示し、その下にhasOne、hasMany、hasAndBelongsToManyアソシエーションの 関連レコードを表示します。
生成されるコードは、引き続き CakePHP 2 のヘルパー ($this->Form->input()、$this->Paginator->numbers()、 $this->Form->postLink() など) を使います。



cake.generic.css を使うアプリケーション
古いスケルトンから作成したアプリケーションは、レイアウトで cake.generic.css を読み込んでいます。新しいマークアップは このスタイルシートに合わない (アクションのリンクがサイドの列として配置されず、ボタンとページネーターにスタイルが 付かない) ので、そうしたアプリケーションでは、同梱の legacy テーマでビューを bake してください。このテーマは 以前の Bake のリリースのテンプレートを維持しています。
bin/cake bake view Articles --theme legacy
bin/cake bake all Article --theme legacylegacy テーマに含まれるのはビューのテンプレートだけです。モデル、コントローラー、フィクスチャ、テストは default テーマから取得されます。このテーマが自動的に選択されることはありません。--theme を指定しなければ Bake は default テーマを使い、インストールされている複数のテーマのどれを使うか Bake が尋ねるときにも legacy テーマは候補に表示されません。
古いアプリケーションで新しいテンプレートを使う場合は、代わりに pieceofcake2/app の webroot/css/ からスタイルシートを (そして webroot/font/ からフォントを) コピーし、レイアウトで読み込んでください。
由来
このパッケージは cakephp/cakephp (Packagist では cakephp/cakephp、アップストリームの最終バージョンは 2.10.24) の bake コンソールシェルをもとに別のパッケージとして切り出したもので、 元の作者は CakePHP コミュニティ (Cake Software Foundation, Inc.) です。 pieceofcake2 が、モダンな PHP で動く CakePHP 2 向けに メンテナンスしています。オリジナルからの変更点は コミット履歴 で確認できます。
