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

create table products (
  id int not null,
  name varchar(50) not null,
  price int not null
)

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

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 というメソッドが無い。
  • まあ、だいたいこんな風に書く。
<?php
class ProductsController extends AppController {

	var $name = 'Products';

	function index() {

	}

}
?>

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

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

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

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

<p>これは products テーブルのためのビューです。</p>
<?php

?>

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

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

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

<?php
class ProductsController extends AppController {

	var $name = 'Products';

	function index() {
		$this->set('Products', $this->Product->find('all'));
	}
}
?>

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

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

<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 がスクリプト言語である利点を有効に活用しているのかなと。

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