概要
Railsのscaffoldのように必要なコードを自動生成してくれる、CakePHPのbakeを利用してみる。
下記URLを参考にしました。
http://book.cakephp.org/2.0/ja/console-and-shells/code-generation-with-bake.html
前提条件
- CakePHPの導入が済んでいること
- データベースの設定が済んでいること
- OSはLinuxを想定
導入が済んでいない場合は前回の記事を参照。
cakeに実行権限を付与する
bakeには「app/Console/cake」を実行する必要がある。実行権限がない場合は付与しておく。
1 |
$ chmod 755 app/Console/cake |
テーブルを用意する
生成するアプリの対象になるテーブルを用意する。
次回、ユーザ認証機能を作る予定でいるので、ユーザ名とパスワードを持ったテーブルを作ってみる。
1 2 3 4 5 6 7 8 |
CREATE TABLE users ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50), password VARCHAR(50), role VARCHAR(20), created DATETIME DEFAULT NULL, modified DATETIME DEFAULT NULL ); |
PHPUnitを入れておく
PHPUnitが入ってないと途中で「入ってないけどどうする?」みたいな警告が出るので、先に入れておく。
1 2 |
$ sudo pear channel-discover pear.phpunit.de $ sudo pear install phpunit/PHPUnit |
入れたらHTTPサーバの再起動もしておく。
1 |
$ /etc/init.d/httpd restart |
cake bakeでモデルを生成してみる
実行権限が付いたら、とりあえず実行してみる。
1 2 3 4 5 6 7 8 9 10 |
$ app/Console/cake bake [D]atabase Configuration [M]odel [V]iew [C]ontroller [P]roject [F]ixture [T]est case [Q]uit |
上記のような機能があるらしい。まずはモデルを作るので「M」と入力しEnter。
1 2 |
What would you like to Bake? (D/M/V/C/P/F/T/Q) > M |
どのデータベースを使うか聞かれるので、defaultのままEnter。
1 2 |
Use Database Config: (default/test) [default] > |
データベースを見て、どのテーブルからModelを生成するか提案してくれる。Userの番号を入力してEnter。
1 2 3 4 5 |
Possible Models based on your current database: 1. User Enter a number from the list above, type in the name of another model, or 'q' to exit [q] > 1 |
displayField(find(‘list’)した際の結果で利用されるフィールド)を聞かれるけど、今回は特に使う予定はないので「n」で。
1 2 3 |
A displayField could not be automatically detected would you like to choose one? (y/n) > n |
「validation設定しようぜ」と提案されるけど、今回は「n」で回避。「y」にすると、どのフィールドにどういった制約を付けるか選べる。
1 2 3 |
Would you like to supply validation criteria for the fields in your model? (y/n) [y] > n |
モデルのリレーションとかについても設定できるらしい。ここも「n」で回避。「y」を選ぶと1対1とか1対多でどのテーブルのどのフィールドとJOINするかみたいな質問がされる。
1 2 3 |
Would you like to define model associations (hasMany, hasOne, belongsTo, etc.)? (y/n) [y] > n |
「このモデルを生成するけど、良いかい?」と聞かれるので、「y」で。
1 2 3 4 5 6 7 8 |
--------------------------------------------------------------- The following Model will be created: --------------------------------------------------------------- Name: User DB Table: `mebocan`.`users` --------------------------------------------------------------- Look okay? (y/n) [y] > |
「このファイル作るよ。あとテストファイルも作っとく?」と聞かれるので、「y」でテストファイルも作ってしまう。
1 2 3 4 |
Creating file /var/www/html/app/Model/User.php Wrote `/var/www/html/app/Model/User.php` PHPUnit is not installed. Do you want to bake unit test files anyway? (y/n) [y] > y |
下記のテスト用PHPファイルが生成される。
1 2 |
app/Test/Fixture/UserFixture.php app/Test/Case/Model/UserTest.php |
「app/Model/User.php」にモデルも作成されている。生成されたモデルの内容はこちら。
1 2 3 4 5 6 7 8 9 |
<?php App::uses('AppModel', 'Model'); /** * User Model * */ class User extends AppModel { } |
とてもシンプル。validateとか自動で加えられるので、使い方がわからない最初の時は重宝しそう。
cake bakeでコントローラを生成してみる
次はコントローラ。cake bakeを呼び出し、「C」。
1 2 3 |
$ app/Console/cake bake > C |
Databaseはdefaultのまま。
1 2 |
Use Database Config: (default/test) [default] > |
モデルの時と同じく、作成可能なControllerが提案される。Usersの番号を選択。
1 2 3 4 5 6 |
Possible Controllers based on your current database: --------------------------------------------------------------- 1. Users Enter a number from the list above, type in the name of another controller, or 'q' to exit [q] > 1 |
index, add, view, editの4機能を持つ、シンプルなコントローラを作成する。routingとかは今回は特に設定しない。
1 2 3 4 5 6 7 |
Would you like to build your controller interactively? (y/n) [y] > n Would you like to create some basic class methods (index(), add(), view(), edit())? (y/n) [n] > y Would you like to create the basic class methods for admin routing? (y/n) [n] > n |
「これ作るけどOK?」と聞かれるので、「y」で。
1 2 3 4 5 6 7 8 9 |
Look okay? (y/n) [y] > y Baking controller class for Users... Creating file /var/www/html/app/Controller/UsersController.php Wrote `/var/www/html/app/Controller/UsersController.php` PHPUnit is not installed. Do you want to bake unit test files anyway? (y/n) [y] > |
これで「app/Controller/UsersController.php」に、index(一覧表示)、view(単品表示)、add(追加)、edit(更新)、delete(削除)の5つのメソッドを持つControllerが生成された。
ビューを作る
次はViewを作ってみる。「app/Console/cake bake」から「V」で。
1 2 3 |
$ app/Console/cake bake > V |
モデルやコントローラの時と同じく、default、Usersを選択。
1 2 3 4 5 6 7 8 |
Use Database Config: (default/test) [default] > Possible Controllers based on your current database: --------------------------------------------------------------- 1. Users Enter a number from the list above, type in the name of another controller, or 'q' to exit [q] > 1 |
最後に「n」を選べば、Viewが生成される。
1 2 3 |
Would you like bake to build your views interactively? Warning: Choosing no will overwrite Users views if it exist. (y/n) [n] > |
生成されたファイルは以下の4つ。
1 2 3 4 |
app/View/Users/index.ctp app/View/Users/view.ctp app/View/Users/add.ctp app/View/Users/edit.ctp |
出来上がったページを見てみる
MVCが揃ったので、これでページが見れるはず。実際にページを開いてみる。
http://localhost/users
ユーザの表示、登録、更新、削除機能があるページが表示される。便利。
次回予告
次回はここで作った機能を利用して、ユーザ認証を行う。

masato watanabe

最新記事 by masato watanabe (全て見る)
- CakePHPでExcel出力してみる - 2013年2月5日
- CakePHPでテーブルの情報をCSVに吐いたり読んだりしてみる - 2013年2月1日
- CakePHPのModelの動きを論理削除にしてみる - 2013年2月1日