Edited at
CakePHPDay 21

bakeコマンド

More than 1 year has passed since last update.

完全に失念かつすっかり来年の事を考え始めていたQiita初心者です。

bakeコマンドで初期化出来ればいいのに・・・というのは置きまして

本日はCake3におけるbakeに関して少し書いていこうと思います。

準備を怠ってしまったので足りない点や追記したい点は気づいたら修正していきたいと思います。初めはあまり内容がないかも


bakeコマンドのオプション

bakeコマンドを呼び出すには、cakeコマンドにbakeをパラメーターとして渡します。

オプションとして以下のようなものがあります。

12月26日追記

option
概要

all

behavior
xx

cell
Controllerのような動きをする部品

component
Controllerに処理を持たせない為に処理を記載

controller
テンプレートや遷移先をディスパッチ(り替え)

fixture
テスト用データの作成

form
リクエストデータの置き場所。3系から?

helper
viewにて使う関数を記載する

mailer
メール送信処理。あまり用途が浮かばず

migration
スキーマ作成用ファイルの作成

migration_snapshot
xx

model
テーブル、Entity、Fixture、テーブルTestを一括で作成

plugin
xx

shell
クーロンなどで用いるシェル

shell-helper
xx

template
基本的なアクションで使用されるindex/edit/viewを作成

test
xx

この中で比較的よく使うオプションはこのオプションなどではないかと思われます。

php

model

shell

all



※こちら少し偏ってたらすみません。migration等は色々融通きかないのでコピペして作ってしまう癖がありまして^^;

bin/cake bake model

上記のコマンドを実行すると実際に作成可能なModelの一覧が表示されるので一覧を元に以下コマンドを実行すると

bin/cake bake model xxxx(アッパーキャメル形式のテーブル名)

Tabel、Entity、Fixture、TableTestを同時に生成してくれます。開発の初期段階でスピードをあげるには便利です。既にファイルが存在していればファイルを上書くか対話形式にて確認されます

12月26日編集


bakeコマンドで作成される資源のテンプレート

ここから少しだけ技術よりになります。

bakeのテンプレートファイルは、Twigテンプレート構文を使用しています。

Cake3でbakeした際に作られる資源はcomposerにてcake3をインストールした際に出来る以下のフォルダ配下に格納されています。

vendor/cakephp/bake/src/Template/Bake/Template

以前AdventCalendarで話題にあがった障害も上記テンプレートを変更することによって

次回以降bakeにて作成された資源が問題なく作成されるようにすることができます。


障害概要

bakeにて作成されたControllerにてviewに渡した(set)変数のserializeが自動的に記載され、またajaxリクエストの際はRequestHandlerなるComponentの働きによってデータが出力されることにより意図していないデータが漏洩する可能性があるとのことでした。

※例.usesテーブルにpasswordカラムがあった場合、userテーブルをAPI形式にて更新し画面表示の為userテーブルのEntityをviewに渡している場合passwordのハッシュ値もjson(or xml)形式にて返却される

素早く対応はされたのですが運用中であればバージョンをあげたりすることは他に影響えることがあるので出来ないかと思います。

そういった際には上記フォルダに格納されているcontroller.ctpファイルをコピーし、

serialize処理を書く箇所を削除すれば次回以降bakeした際にserialize処理を行わない資源を自動的に作成することができます。

他にもTableを常にアプリ固有の基底クラスを継承したカタチにしたい場合、継承漏れを防ぐためにtable.ctpファイル内の記載でextendsするクラスを変更すれば、次回以降bakeの際には継承先を確認する必要なく、修正漏れ等のリスクを軽減することができます。

テンプレートをアプリに準じた形に変更すればするほど開発スピードは速くなると思いますので是非使っていってほしいです。bakeで作成されたviewのctpなどi18nがテンコ盛りで

そのままでは日本語向けのアプリではほとんど使えないものに

※忘れない方が難しい...レビューでの着眼点一覧でも作り時間があれば気付けますがアジャイルでは厳しくorz

明日は@chitokuさんの『CI Test 』に関してだそうです。