cakeコンソールのBakeを使ったアプリケーションのセットアップ
CakePHP 1.3.0 での Bake の動きを調べてみました。
Cookbook って cake コンソールや Bake について、あんまり書いてないんですよね。
Bakeは色々と機能があるようなので、まずは最初のアプリケーションのセットアップと、データベース設定について、
bake project と bake db_config です。
環境
Mac | Mac OS X 10.5.8(Leopard) |
MAMP | 1.7.2 |
CakePHP | 1.3.0 |
php | 5.2.6 |
CakePHP本体(コア)のパス | /Users/myuser/Dev/cakephp1.3.0 |
作成するアプリケーション(APP)のパス | /Users/myuser/Dev/cakephp_baked |
/Users/myuser/Dev/cakephp1.3.0/app にアプリケーションフォルダがあるけど、コアとAPPは分離したい。
コアもAPPも、PDTのプロジェクトとして別々に登録してます。
なので cake -app オプションを使います。
cake コンソール
/Users/myuser/Dev/cakephp_baked はまだ無い状態からスタート。
cake コンソールの場所
$ cd $HOME/Dev/cakephp1.3.0/cake/console $ pwd /Users/myuser/Dev/cakephp1.3.0/cake/console
cake コンソールはコアの方にある。
絶対パスでAPPの場所を指定して cake コンソールを起動
$ ./cake -app $HOME/Dev/cakephp_baked Welcome to CakePHP v1.3.0 Console --------------------------------------------------------------- Current Paths: -app: cakephp_baked -working: /Users/myuser/Dev/cakephp_baked -root: /Users/myuser/Dev/ -core: /Users/myuser/Dev/cakephp1.3.0 以下略
相対パスでAPPの場所を指定して cake コンソールを起動
$ ./cake -app ../cakephp_baked Welcome to CakePHP v1.3.0 Console --------------------------------------------------------------- Current Paths: -app: cakephp_baked -working: /Users/myuser/Dev/cakephp1.3.0/../cakephp_baked -root: /Users/myuser/Dev/cakephp1.3.0/.. -core: /Users/myuser/Dev/cakephp1.3.0 中略 Example: -app relative/path/to/myapp or -app /absolute/path/to/myapp 以下略
相対パスでも使えるみたいですが、なんか汚い感じになっちゃってます。
一応、パスは間違ってるわけじゃないんですけどね。
相対パスは、consoleディレクトリからではなく、コアからの相対のようです。
Bakeについて
$ ./cake -app ../cakephp_baked bake help Welcome to CakePHP v1.3.0 Console --------------------------------------------------------------- App : cakephp_baked Path: /Users/myuser/Dev/cakephp1.3.0/../cakephp_baked --------------------------------------------------------------- CakePHP Bake: --------------------------------------------------------------- The Bake script generates controllers, views and models for your application. If run with no command line arguments, Bake guides the user through the class creation process. You can customize the generation process by telling Bake where different parts of your application are using command line arguments. --------------------------------------------------------------- Usage: cake bake <command> <arg1> <arg2>... --------------------------------------------------------------- Params: -app <path> Absolute/Relative path to your app folder. Commands: bake help shows this help message. bake all <name> bakes complete MVC. optional <name> of a Model bake project <path> bakes a new app folder in the path supplied or in current directory if no path is specified bake plugin <name> bakes a new plugin folder in the path supplied or in current directory if no path is specified. bake db_config bakes a database.php file in config directory. bake model bakes a model. run 'bake model help' for more info bake view bakes views. run 'bake view help' for more info bake controller bakes a controller. run 'bake controller help' for more info bake fixture bakes fixtures. run 'bake fixture help' for more info. bake test bakes unit tests. run 'bake test help' for more info.
bake project
$ ./cake -app ../cakephp_baked bake project Welcome to CakePHP v1.3.0 Console --------------------------------------------------------------- App : cakephp_baked Path: /Users/myuser/Dev/cakephp1.3.0/../cakephp_baked --------------------------------------------------------------- What is the full path for this app including the app directory name? Example:/Users/myuser/Dev/cakephp1.3.0/../cakephp_baked/myapp [/Users/myuser/Dev/cakephp1.3.0/../cakephp_baked/myapp] > /Users/myuser/Dev/cakephp_baked Bake Project Skel Directory: /Users/myuser/Dev/cakephp1.3.0/cake/console/templates/skel Will be copied to: /Users/myuser/Dev/cakephp_baked --------------------------------------------------------------- Look okay? (y/n/q) [y] > Do you want verbose output? (y/n) [n] > --------------------------------------------------------------- Created: cakephp_baked in /Users/myuser/Dev/cakephp_baked --------------------------------------------------------------- Creating file /Users/myuser/Dev/cakephp_baked/views/pages/home.ctp Wrote `/Users/myuser/Dev/cakephp_baked/views/pages/home.ctp` Welcome page created Random hash key created for 'Security.salt' Random seed created for 'Security.cipherSeed' CAKE_CORE_INCLUDE_PATH set to /Users/myuser/Dev/cakephp1.3.0 in webroot/index.php CAKE_CORE_INCLUDE_PATH set to /Users/myuser/Dev/cakephp1.3.0 in webroot/test.php Remember to check these value after moving to production server
これで /Users/myuser/Dev/cakephp_baked にアプリケーションがセットアップできました。
- app オプションでAPPのパスを指定してる訳ですが、デフォルト値として[/Users/myuser/Dev/cakephp1.3.0/../cakephp_baked/myapp]と /myapp が余計に付いてくるので、ちょっとめんどくさい。
define('CAKE_CORE_INCLUDE_PATH', DS . 'Users' . DS . 'myuser' . DS . 'Dev' . DS . 'cakephp1.3.0');
コアのパスを定義する定数 CAKE_CORE_INCLUDE_PATH もセットしてくれた様ですが、この様に絶対パスでの定義なので、運用環境へのデプロイ時には調整が必要になりそう。
$ ls /Users/myuser/Dev/cakephp_baked/ app_controller.php config libs plugins vendors app_helper.php controllers locale tests views app_model.php index.php models tmp webroot
基本的にコアにある /Users/myuser/Dev/cakephp1.3.0/app と同じだとは思いますが、appディレクトリからではなく cake/console/templates/skel/ からコピーされてます。
appディレクトリとの違いとしては、app_controller.php や controllers/pages_controller.php などが作られている事や、空のディレクトリに empty というファイルが無いといった所がありました。
追記
CakePHPでbake projectする際、tmp/logsやlibsなど空ディレクトリにemptyを入れておく方法 - kanonjiの日記
emptyを残したままbake projectする方法を見つけました。
bake db_config
$ ./cake -app ../cakephp_baked bake Welcome to CakePHP v1.3.0 Console --------------------------------------------------------------- App : cakephp_baked Path: /Users/myuser/Dev/cakephp1.3.0/../cakephp_baked --------------------------------------------------------------- Your database configuration was not found. Take a moment to create one. --------------------------------------------------------------- Database Configuration: --------------------------------------------------------------- Name: [default] > 以下略 $ ./cake -app ../cakephp_baked bake config 中略 Creating file /Users/myuser/Dev/cakephp1.3.0/../cakephp_baked/config/database.php File `/Users/myuser/Dev/cakephp1.3.0/../cakephp_baked/config/database.php` exists, overwrite? (y/n/q) [n] > y Wrote `/Users/myuser/Dev/cakephp1.3.0/../cakephp_baked/config/database.php`
アプリケーションが出来たので、次の操作をしようとBakeを実行すると、データベースの設定を求められます。
どうやら config/database.php が無い場合は、先に設定しないとだめみたい。
データベースの設定は bake db_config でやり直す事が出来ます。
最初から bake db_config を使っても同じです。
$ ./cake -app ../cakephp_baked bake Welcome to CakePHP v1.3.0 Console --------------------------------------------------------------- App : cakephp_baked Path: /Users/myuser/Dev/cakephp1.3.0/../cakephp_baked --------------------------------------------------------------- Interactive Bake Shell --------------------------------------------------------------- [D]atabase Configuration [M]odel [V]iew [C]ontroller [P]roject [F]ixture [T]est case [Q]uit What would you like to Bake? (D/M/V/C/P/F/T/Q)
データベース設定が済むと、Interactive Bake Shell が起動するようになります。
cake bakeだけで実行してみる
$ rm -fR /Users/myuser/Dev/cakephp_baked
いったんセットアップしたAPPを消します。
$ ./cake -app ../cakephp_baked bake
bake の後に何もオプションを付けないで起動すると、上記の bake project とデータベース設定までを続けて進められます。