CakePHP はマニュアル無しでサイトを作れるのか?

どういう手順でアプリケーションを作成するのか、ってことですね。

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。

[code lang=”php”]
<?php
class ProductsController extends AppController {

var $name = ‘Products’;
}
?>
[/code]

という訳で、コントローラーを作ります。

再び 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 テーブルを作ります。

[code lang=”sql”]
create table products (
id int not null,
name varchar(50) not null,
price int not null
)
[/code]

データも適当に入れておきます。

[code lang=”sql”]
insert into products values ( 1, ‘product 1st’, 1000 );
insert into products values ( 2, ‘product 2nd’, 1000 );
insert into products values ( 3, ‘product 3rd’, 1000 );
[/code]

再び http://cake.moonmile.net/Products のアドレスに接続します。

今度は、

  • ProductsController コントローラーに index というメソッドが無い。
  • まあ、だいたいこんな風に書く。

[code lang=”php”]
<?php
class ProductsController extends AppController {

var $name = ‘Products’;

function index() {

}

}
?>
[/code]

という訳で、index メソッドの中身を作ります。

再び、ブラウザをリロードすると、またエラーが変わります。

今度は ProductsController::index() に対応するビューが無いそうです。
ビューは、app/views/products/index.ctp に作りなさい、ということになっていますね。

ここでビューを適当に作ります。

[code lang=”php”]
<p>これは products テーブルのためのビューです。</p>
<?php

?>
[/code]

再び、ブラウザをリロードすると、

めでたくエラーがなくなります。

…って、テーブルが表示されていないので、コントローラーとビューを直します。

[code lang=”php”]
<?php
class ProductsController extends AppController {

var $name = ‘Products’;

function index() {
$this->set(‘Products’, $this->Product->find(‘all’));
}
}
?>
[/code]

Product モデルから検索して、ビューに Products という名前で引き渡します。

これに合わせて、ビューも変えていきます。

[code lang=”php”]
<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>
[/code]

ここまできたら、きちんと表示ができます。

こういう風にひな型を作るって感じでしょうね。

よくできているというか感心するのが、足りない部分を単純なコンパイルエラーの表示ではなくて、足りないファイル、足りないメソッドの内容までを表示しているところです。 ASP.NET MVC の場合は、こんな風にはできていなくて、コンパイルエラーにならないように、どうしても、モデル→コントローラー→ビューの順序で作る必要があります(エラーを見ながらやってもいいんでしょうけど)。

このあたりは、PHP がスクリプト言語である利点を有効に活用しているのかなと。

カテゴリー: CakePHP パーマリンク