どういう手順でアプリケーションを作成するのか、ってことですね。
CakePHPブログチュートリアル :: 開発例 :: マニュアル :: 1.2コレクション :: The Cookbook
http://book.cakephp.org/ja/view/219/CakePHPブログチュートリアル
最初はチュートリアルに手を付けるわけですが、さて、サイトを作る時はどこから作り始めるのか、というと、CakePHP は面白いことにブラウザに URL を入力するところから始めます。
ひとまず、ここまでデータベースを設定した後で、ユーザーがブラウザで入力するアドレスを入れます。
http://cake.moonmile.net/Products
すると、エラーがでます。当たり前ですが、このエラーを元に書き進めるわけです。
- ProductsController クラスが無いよ。
- app/controllers/products_controller.php のファイルに置けばいい。
- ひとまず、下記を貼りつければ OK。
1 2 3 4 5 6 | <?php class ProductsController extends AppController { var $name = 'Products' ; } ?> |
という訳で、コントローラーを作ります。
再び http://cake.moonmile.net/Products のアドレスに接続すると、エラーが変わります。
- モデルの Product のための products というテーブルが無いよ。
ってな感じです。
※ ただし、IIS+PHP+MySQL の環境では、ここで 500 のサーバーエラーが出ます。ちょっと、これは不便。何故、500 エラーなのかは不明ですが、Linux 上で PHP+MySQL の組み合わせでは、この通りに動きます。
※ 暫定ですが、/cake/libs/error.php の254 行目ぐらいにある missingTable 関数内の $this->controller->header(“HTTP/1.0 500 Internal Server Error”) の行をコメントアウトすると、テーブルが無いときの 500 エラーを回避できます。
そういう訳で、phpMysqlAdmin などを使って products テーブルを作ります。
1 2 3 4 5 | create table products ( id int not null , name varchar (50) not null , price int not null ) |
データも適当に入れておきます。
1 2 3 | insert into products values ( 1, 'product 1st' , 1000 ); insert into products values ( 2, 'product 2nd' , 1000 ); insert into products values ( 3, 'product 3rd' , 1000 ); |
再び http://cake.moonmile.net/Products のアドレスに接続します。
今度は、
- ProductsController コントローラーに index というメソッドが無い。
- まあ、だいたいこんな風に書く。
1 2 3 4 5 6 7 8 9 10 11 | <?php class ProductsController extends AppController { var $name = 'Products' ; function index() { } } ?> |
という訳で、index メソッドの中身を作ります。
再び、ブラウザをリロードすると、またエラーが変わります。
今度は ProductsController::index() に対応するビューが無いそうです。
ビューは、app/views/products/index.ctp に作りなさい、ということになっていますね。
ここでビューを適当に作ります。
1 2 3 4 | <p>これは products テーブルのためのビューです。</p> <?php ?> |
再び、ブラウザをリロードすると、
めでたくエラーがなくなります。
…って、テーブルが表示されていないので、コントローラーとビューを直します。
1 2 3 4 5 6 7 8 9 10 | <?php class ProductsController extends AppController { var $name = 'Products' ; function index() { $this ->set( 'Products' , $this ->Product->find( 'all' )); } } ?> |
Product モデルから検索して、ビューに Products という名前で引き渡します。
これに合わせて、ビューも変えていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <p>これは products テーブルのためのビューです。</p> <table> <tr> <th>id</th> <th>name</th> <th>price</th> </tr> <?php foreach ( $Products as $item ) : ?> <tr> <td><?php echo $item [ 'Product' ][ 'id' ] ?></td> <td><?php echo $item [ 'Product' ][ 'name' ] ?></td> <td><?php echo $item [ 'Product' ][ 'price' ] ?></td> </tr> <?php endforeach ; ?> </table> |
ここまできたら、きちんと表示ができます。
こういう風にひな型を作るって感じでしょうね。
よくできているというか感心するのが、足りない部分を単純なコンパイルエラーの表示ではなくて、足りないファイル、足りないメソッドの内容までを表示しているところです。 ASP.NET MVC の場合は、こんな風にはできていなくて、コンパイルエラーにならないように、どうしても、モデル→コントローラー→ビューの順序で作る必要があります(エラーを見ながらやってもいいんでしょうけど)。
このあたりは、PHP がスクリプト言語である利点を有効に活用しているのかなと。