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] ** Problem(わるかったこと) [#k2016113] ** Try(次回挑戦) [#j7cdd8ee] ** 関連ページ [#b3a3b0e2] #lsx #newpage_subdir() ** コメント [#e2ce95fc] #comment |