CakePHPでbake projectする際、tmp/logsやlibsなど空ディレクトリにemptyを入れておく方法

./cake -app /path/to/app/to/put bake [project]

新しくCakePHPアプリを作る際、appディレクトリをコピーせずに、bakeで作成しています。app_controller.php や app_model.php などを作成してくれますし、APP/config/core.php の Security.salt と Security.cipherSeed の生成もしてくれます。ついでに project つけずにbakeを実行すれば、bake project と bake db_config をまとめて実行できます。

cakeコンソールのBakeを使ったアプリケーションのセットアップ - kanonjiの日記 を参照

ただ、気になっていたのはAPP/tmp 以下のディレクトリやAPP/libs など、空ディレクトリに入っている empty というファイルが消えてしまう事です。git や svn では、空ディレクトリはリポジトリに入らないので、この empty が消えてると何かと不便だったんだけど、empty を消さずに bake でCakePHPアプリを作成する方法を見つけました。

結論

./cake -app /path/to/app/to/put -empty true bake [project]

-empty というパラメーターをつける事で出来ます。値にtrueを渡してますが、実はこれは何でもいいようです。

if (!empty($this->params['empty'])) {
$skip = array();
}

http://api13.cakephp.org/view_source/project-task/#l-158

ちょうどここが判別になるようなので、empty()でtrueにならない値だったら、$skip に空配列が入ります。

function bake($path, $skel = null, $skip = array('empty')) {

http://api13.cakephp.org/view_source/project-task/#l-130

$skipには、引数でこのようにarray('empty')が初期設定されてます。これのせいで empty というファイルがスキップされるようなので、-empty パラメーターで何らかの値を渡す事で、$skip = array()に出来るという形です。

環境

Mac Mac OS X 10.5.8(Leopard
MAMP 1.7.2
CakePHP 1.3.6
php 5.2.6