- 追加された行はこの色です。
- 削除された行はこの色です。
RIGHT:&tag(CakeShop);
#contentsx
* 1-A1 商品の詳細を表示する [#i50fa8d2]
最初のイテレーションなので、いろいろとやることがある。
インストール手順などは、メモで残しつつWiki上に書いていくこと!(忘れないうちに)
|~イテレーション番号|1|
|~対象ユースケース|A-商品を注文する|
|~期間|2007-01-29〜2007-02-04|
|~メンバー|opaken|
|~目標|調べることいっぱいだが、頑張って環境を一通り整理し、1画面でも見れるようにすること!|
** 基本仕様整理 [#s1e7a0fb]
-Wikiに基本仕様となるユースケースや特徴(要望)などをまとめる
** 動作環境構築 [#xd926744]
*** 開発ツール [#f7508506]
-Java Runtime Environment (JRE) 5.0 Update 10
http://java.sun.com/javase/downloads/index_jdk5.jsp
jre-1_5_0_10-windows-i586-p.exe
-Eclipse PHPIDE Download All in one package
http://downloads.zend.com/pdt/all-in-one/
pdt-0.7.0.I20070111_debugger-0.1.7-all-in-one-win32.zip
|~Eclipseのインストールフォルダ|C:\eclipse_pdt|
|~workspaceフォルダ|C:\eclipse_pdt\workspace|
-Pleiades(Eclipse プラグイン日本語化プラグイン)
http://mergedoc.sourceforge.jp/
pleiades_1.2.0.p7.zip
--設定方法
--eclipse.ini 最下行に以下の指定を追加
-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
-Aptanaプラグイン(Web2.0を支援する、HTML、JavaScriptエディター)
http://update.aptana.com/update/
-Subclipseプラグイン(Subversion)
http://subclipse.tigris.org/update_1.2.x
** ローカルサーバー環境 [#t74dc569]
-XAMPP Windows
http://sourceforge.net/project/showfiles.php?group_id=61776&package_id=89552
xampp-win32-1.5.5-installer.exe
--Apache 2.2.3
--MySQL 5.0.27
--PHP 5.2.0 + PHP 4.4.4 + PEAR
--PHP-Switch win32 1.0
--XAMPP Control Version 2.3 from www.nat32.com
--XAMPP Security 1.0
--SQLite 2.8.15
--OpenSSL 0.9.8d
--phpMyAdmin 2.9.1.1
--ADOdb 4.93
--Mercury Mail Transport System v4.01b
--FileZilla FTP Server 0.9.20
--Webalizer 2.01-10
--Zend Optimizer 3.0.2
--eAccelerator 0.9.5 for PHP 5.2.0 (please comment out in the php.ini)
*** データベース [#n398ebb2]
-MySQL 4.4(XAMPPに入っている)
-phpMyAdminを使ってDB操作をする
http://localhost/phpmyadmin/
-データベースは、とりあえずローカルのみ準備
|~ホスト|~DB名|~ユーザー|~パスワード|
|localhost|cakeshop|cakeshop|cakeshop|
-&color(Red){phpMyAdminの新規データベース作成時に、接続照合順序を「utf8_unicode_ci」にして作成すること!(これを忘れると後で文字化けします)};
-cakeshopユーザーには全ての特権を与えておく
*** サーバ [#kb080d97]
-Apache 2.2(XAMPPに入っている)
-エイリアスは、下記のように設定する
|~用途|~エイリアス|~URL|
|フロント系|/cakeshop|http://localhost/cakeshop|
|管理系|/cakekitchen|http://localhost/cakekitchen|
-XAMPPのインストール先は
C:\apachefriends
にする。
-PHPは4.4を使う。
--PHP switchを実行してXAMPPのPHPを4に切り替えておく。(Apacheを停止してからやりましょう)
--C:\apachefriends\apache\bin\php.iniに下記を追加する。
default_charset="UTF-8"
magic_quotes_gpc=off
mbstring.input_encoding="pass"
mbstring.internal_encoding="UTF-8"
mbstring.output_encoding="pass"
mbstring.language="japanese"
mbstring.substitute_charactor=""
http://localhost/xampp/phpinfo.php
にアクセスして確認する。
-phpにパスを通しておく。
--環境変数の設定で、PATHに
C:\apachefriends\xampp\php
を追加する。
*** ソース管理、バグ管理 [#y6f6717f]
-Subversion
svn+ssh://cre8system.sakura.ne.jp/home/cre8system/var/svn/repo/trunk/cakeshop
-Trac 0.10.3
http://dev.cre8system.jp/trac/
-文字コード
UTF-8に統一する!
*** ルール [#gee7c4d8]
-イテレーション番号
イテレーション番号−ユースケース番号+ユースケース毎の通番とする
(例)1-A1 = イテレーション1で「A 商品を注文する」ユースケースの1回目を意味する
-コーディングルールはどうする?
-Trac(チケット、マイルストーン)の運用はどうする?
-バージョンの付け方
cakeshop_0_1_イテレーション番号
とする。
イテレーション完了時にタグを付けて管理する。
-ドキュメント
Wiki上に書いていくこと。絵や図などは、手書きで残しておいても良い。(無くさないように)
-テストケース
コントローラ毎にテストケースを書いていくことにする。
*** アーキテクチャ(フレームワーク) [#qecb8a18]
-CakePHP 1.1を基盤として構築する。
--cake_1.1.12.4205.zip
-その他、ライブラリは随時、吟味しながら入れていく。
** テーブル設計 [#ta71fb83]
-[[CakeShop/テーブル設計]]を考える。
-とりあえず必要と思われる項目を入れる。
-基本的には商品の情報は1つのテーブルで管理する。
-在庫は、別のテーブルで管理するので、後で考える。
** テーブルの準備 [#ead4fa5c]
-phpMyAdminでテーブルを作る。
-とりあえず手入力・・・
--最終的にWikiの表組みからDDLに変換するツールを作りたいな・・・
** プロジェクトの準備 [#s2566e61]
-Eclipseで新規PHPプロジェクトを作成する。
プロジェクト名は、cakeshopにする。
-CakePHPの1.1系の最新をダウンロードする。
-Eclipseのworkspace/cakeshopに解凍したものを置く。
C:\eclipse_pdt\workspace\cakeshop
-もともとのappをコピーして、shopフォルダはフロント系、kitchenフォルダは管理系として用意する。
-.htaccessの修正が必要
--shop/.htaccessに下記を追加
RewriteBase /cakeshop
--shop/webroot/.htaccessに下記を追加
RewriteBase /cakeshop/webroot
--kitchen/.htaccessに下記を追加
RewriteBase /cakekitchen
--kitchen/webroot/.htaccessに下記を追加
RewriteBase /cakekitchen/webroot
-C:\apachefriends\xampp\apache\conf\httpd.confを修正
mod_rewriteを有効にする。(コメントを外す)
LoadModule rewrite_module modules/mod_rewrite.so
下記を最終行に追加
Alias /cakeshop "C:/eclipse_pdt/workspace/cakeshop/shop/"
<Directory "C:/eclipse_pdt/workspace/cakeshop/shop/">
Options FollowSymLinks Indexes MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Alias /cakekitchen "C:/eclipse_pdt/workspace/cakeshop/kitchen/"
<Directory "C:/eclipse_pdt/workspace/cakeshop/kitchen/">
Options FollowSymLinks Indexes MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
-database.phpの修正
--shop/config/database.php.defaultの名前をdatabase.phpに変更して下記のように修正
var $default = array('driver' => 'mysql',
'connect' => 'mysql_connect',
'host' => 'localhost',
'login' => 'cakeshop',
'password' => 'cakeshop',
'database' => 'cakeshop',
'encoding' => 'utf8',
'prefix' => '');
※encodingをutf8にできるように後でMySQLのコネクト部分のソースを修正する。
--kitchen/config/database.php.defaultの名前をdatabase.phpに変更して先程と同様に修正
** MySQL文字化け対応 [#h50403f4]
-CakePHPのMySQL用DBOを修正する。
--cake/libs/model/dbo/dbo_mysql.php
connect関数の所を下記のように修正
if (mysql_select_db($config['database'], $this->connection)) {
$this->connected = true;
// encoding add start
if(!empty($config['encoding'])){
$this->query("SET NAMES '".$config['encoding']."'");
}
// encoding add end
}
** 画面の確認 [#o91251ab]
-下記にアクセスして画面を確認する
--フロント側
http://localhost/cakeshop/
--管理側
http://localhost/cakekitchen/
-次のようなメッセージが表示されていれば、データベースに接続できているのでOK!
Your database configuration file is present.
Cake is able to connect to the database.
** 画面のテンプレートレイアウト [#m0ffedf0]
-よさげのレイアウトをいれておく。
-shopとkitchenで違うものにしておく。(見分けつけるように)
-[[CakePHP のおいしい食べ方 default.thtml 7 free designs for Cake PHP:http://cakephp.seesaa.net/article/20355864.html]]のテンプレートを使う。
--contented5.zip フロント側
--contented3.zip 管理側
-テンプレートファイル default.thtml をそれぞれのview/layoutフォルダにいれる。
-default.thtmlの下記の部分を修正する。(53行目)
if ($this->controller->Session->check('Message.flash')) $this->controller->Session->flash();
↓
if ($session->check('Message.flash')) $session->flash();
-スタイルシートのファイルは、それぞれのwebroot/cssフォルダにいれる。
-画像ファイルは、それぞれのwebroot/imgフォルダにいれる。
** デバッグモードにしておく [#sba25700]
-CakePHPのDEBUG定数を2にしておく
それぞれのフォルダのconfig/core.php
define('DEBUG', 2);
これで、画面にSQLが表示されるようになる。
** CRUDページ [#kba93067]
-bakeの代わりに使うdecorateをダウンロードしてcake/scriptフォルダにおいておく
[[CakePHP のおいしい食べ方 Scaffolding and Decorating your web app with CakePHP:http://cakephp.seesaa.net/article/25299712.html]]
-decorateを使ってkitchenフォルダにGoodsテーブルのCRUDを作る。
--最初にモデル(M)から作成する。
コマンドプロンプトで下記を実行
cd C:\eclipse_pdt\workspace\cakeshop
php cake\scripts\decorate.php -app kitchen
___ __ _ _ ___ __ _ _ __
| |__| |_/ |__ |__] |__| |__] == Decorated Bake ==
|___ | | | \_ |___ | | | | = SDozono/Cba =
---------------------------------------------------------------
[M]odel
[C]ontroller
[V]iew
Please select a class to Bake: (M/V/C)
> M
---------------------------------------------------------------
Model Bake:
---------------------------------------------------------------
Possible models based on your current database:
1. Item
Enter a number from the list above, or type in the name of another model.
> 1
Would you like to supply validation criteria for the fields in your model? (y/n)
[y] > n
Would you like to define model associations (hasMany, hasOne, belongsTo, etc.)?
(y/n)
[y] > n
---------------------------------------------------------------
The following model will be created:
---------------------------------------------------------------
Model Name: Item
DB Connection: default
Model Table: items
Validation: Array
(
)
---------------------------------------------------------------
Look okay? (y/n)
[y] > y
Creating file \kitchen\models\item.php
Wrote \kitchen\models\item.php
Cake test suite not installed. Do you want to bake unit test files anyway? (y/n
)
[y] > n
--次にコントローラ(C)を作る。
php cake\scripts\decorate.php -app kitchen
___ __ _ _ ___ __ _ _ __
| |__| |_/ |__ |__] |__| |__] == Decorated Bake ==
|___ | | | \_ |___ | | | | = SDozono/Cba =
---------------------------------------------------------------
[M]odel
[C]ontroller
[V]iew
Please select a class to Bake: (M/V/C)
> C
---------------------------------------------------------------
Controller Bake:
---------------------------------------------------------------
Controller name? Remember that Cake controller names are plural.
> items
Would you like bake to build your controller interactively?
Warning: Choosing no will overwrite Items controller if it exist. (y/n)
[y] > n
Creating file \kitchen\controllers\items_controller.php
Wrote \kitchen\controllers\items_controller.php
--最後にビュー(V)を作る。
php cake\scripts\decorate.php -app kitchen
___ __ _ _ ___ __ _ _ __
| |__| |_/ |__ |__] |__| |__] == Decorated Bake ==
|___ | | | \_ |___ | | | | = SDozono/Cba =
---------------------------------------------------------------
[M]odel
[C]ontroller
[V]iew
Please select a class to Bake: (M/V/C)
> V
---------------------------------------------------------------
View Bake:
---------------------------------------------------------------
Controller Name? (plural)
> items
Would you like bake to build your views interactively?
Warning: Choosing no will overwrite views if it exist. (y/n)
[y] > n
Creating file \kitchen\views\items\index.thtml
Wrote \kitchen\views\items\index.thtml
Creating file \kitchen\views\items\sindex.thtml
Wrote \kitchen\views\items\sindex.thtml
Creating file \kitchen\views\items\view.thtml
Wrote \kitchen\views\items\view.thtml
Creating file \kitchen\views\items\add.thtml
Wrote \kitchen\views\items\add.thtml
Creating file \kitchen\views\items\edit.thtml
Wrote \kitchen\views\items\edit.thtml
---------------------------------------------------------------
View Scaffolding Complete.
-テストデータをCRUDで完成したページから入力して作る。
http://localhost/cakekitchen/items/
** 商品表示ページの実装 [#l0796e82]
-商品詳細ページは、コントローラ名をitemsにする。
-CRUDで作ったものをコピーして流用する。
コントローラをコピー
kitchen/control/items_controller.php
↓
shop/control/items_controller.php
Viewをコピー
kitchen/items/view.php
↓
shop/items/index.php
-コントローラのviewメソッドをindexメソッドに変更し、その他の不要な部分を削除する。
<?php
class ItemsController extends AppController
{
//var $scaffold;
var $name = 'Items';
var $helpers = array('Html', 'Form', 'Session' );
function index($id) {
$this->set('item', $this->Item->read(null, $id));
}
}
?>
-Modelは、kitchen側のものをそのまま利用できるようにする。
--cake/config/paths.phpを修正
// モデルのパスが先に定義されていれば、そっちを使う
if(!defined('MODELS')) {
define ('MODELS', APP.'models'.DS);
}
--shop/webroot/index.phpでモデルのパスをkitchen側に向ける
if (!defined('APP_DIR')) {
//define('APP_DIR', 'DIRECTORY NAME OF APPLICATION';
define('APP_DIR', basename(dirname(dirname(__FILE__))));
}
// フロントでは、管理側(kitchen)のモデルを使用する
define ('MODELS', ROOT.DS.'kitchen'.DS.'models'.DS);
-shop側の商品詳細ページにアクセスしてみる。とりあえずテストデータで作った商品IDが1のものを表示してみる。
http://localhost/cakeshop/webroot/items/index/1
** テストケースの準備 [#pbd8c2c2]
-次回イテレーションで準備する。
** デモページの用意 [#y943ebf5]
-さくらのサーバーにアップしてデモ見れるようにしたいな。
-サブドメインの設定をする
|~用途|~フォルダ|~URL|
|フロント系|$HOME/www/cakeshop|http://cakeshop.cre8system.jp/|
|管理系|$HOME/www/cakekitchen|http://cakekitchen.cre8system.jp/|
-公開は次回イテレーションで準備する。
* ふりかえり [#c7784b4f]
イテレーション終わったら、ふりかえりをしましょう!
** Keep(よかったこと) [#a76b12e6]
-CakePHPの仕組みを理解できた。
-ローカルの環境もXAMPPなどを利用して簡単に構築できた。
-Wikiでイテレーションの作業予定(タスク)をまとめていくのは、Good!
--何をやるのかが整理できる。
--作業の結果メモを簡単に残していける。
** Problem(わるかったこと) [#k2016113]
-PHPのデバッグがうまくいかない。
--これの調査にすごく時間がかかった。
--あきらめが肝心!
-作業を自宅と事務所の二カ所でやっていたため、ソースをコミットし忘れると辛い。
** Try(次回挑戦) [#j7cdd8ee]
-常に動くものを完成させる姿勢で取り組むと、目標が見えやすいのでよかった。
-CakePHPの日本語ドキュメントがあったお陰で、早く理解することができた。感謝!
-Wikiでドキュメントをまとめていくのは、これからも続けていこう。
-ハマリ気味の時は、諦めて別の方針に切り替えることを考えよう。
-一人でもルールは肝心。整理することで、理解も深まると思う。
** イテレーション評価・得点 [#j90840b4]
今回のイテレーションは、準備がメインだったので調べることが多かった。
少し手間取ったところもあったが、画面を表示するというところまではたどり着いたので良かった。
評価としては、&color(Red){80点};!
** 関連ページ [#b3a3b0e2]
#lsx
#newpage_subdir()
** コメント [#e2ce95fc]
#comment