スポンサード リンク
Top > CakeShop > イテレーション > 1-A1 商品の詳細を表示する
スポンサード リンク

Tag: CakeShop

1-A1 商品の詳細を表示する Edit

最初のイテレーションなので、いろいろとやることがある。
インストール手順などは、メモで残しつつWiki上に書いていくこと!(忘れないうちに)

イテレーション番号1
対象ユースケースA-商品を注文する
期間2007-01-29〜2007-02-04
メンバーopaken
目標調べることいっぱいだが、頑張って環境を一通り整理し、1画面でも見れるようにすること!

基本仕様整理 Edit

  • Wikiに基本仕様となるユースケースや特徴(要望)などをまとめる

動作環境構築 Edit

開発ツール Edit

ローカルサーバー環境 Edit

  • 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)
  • XAMPPのインストール先は
    C:\apachefriends
    にする。

データベース Edit

  • MySQL 4.4(XAMPPに入っている)
    • XAMPPでMySQLのインストールに失敗した場合は、一旦アンインストールし、サービスとして先に登録されているMySQLのレジストリを削除する。
      ファイル名を指定して実行で、regedit.exeを起動し、レジストリから下記のキーを削除する。
      \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL
      その後、再起動してから、XAMPPを再インストールする。
  • phpMyAdminを使ってDB操作をする
    http://localhost/phpmyadmin/
  • データベースは、とりあえずローカルのみ準備
    ホストDB名ユーザーパスワード
    localhostcakeshopcakeshopcakeshop
  • phpMyAdminの新規データベース作成時に、接続照合順序を「utf8_unicode_ci」にして作成すること!(これを忘れると後で文字化けします)
  • cakeshopユーザーには全ての特権を与えておく

サーバ Edit

  • Apache 2.2(XAMPPに入っている)
  • エイリアスは、下記のように設定する
    用途エイリアスURL
    フロント系/cakeshophttp://localhost/cakeshop
    管理系/cakekitchenhttp://localhost/cakekitchen
  • 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
      を追加する。

ソース管理、バグ管理 Edit

  • Eclipseの設定
    [チーム] > [SVN] で SVNインタフェースを(Pure Java)に切り替えておく
  • 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に統一する!

ルール Edit

  • イテレーション番号
    イテレーション番号−ユースケース番号+ユースケース毎の通番とする
    (例)1-A1 = イテレーション1で「A 商品を注文する」ユースケースの1回目を意味する
  • コーディングルールはどうする?
  • Trac(チケット、マイルストーン)の運用はどうする?
  • バージョンタグの付け方
    リポジトリールート/tags/cakeshop/0_1_イテレーション番号
    とする。
    イテレーション完了時にタグを付けて管理する。
  • ドキュメント
    Wiki上に書いていくこと。絵や図などは、手書きで残しておいても良い。(無くさないように)
  • テストケース
    コントローラ毎にテストケースを書いていくことにする。

アーキテクチャ(フレームワーク) Edit

  • CakePHP 1.1を基盤として構築する。
    • cake_1.1.12.4205.zip
  • その他、ライブラリは随時、吟味しながら入れていく。

テーブル設計 Edit

  • CakeShop/テーブル設計を考える。
  • とりあえず必要と思われる項目を入れる。
  • 基本的には商品の情報は1つのテーブルで管理する。
  • 在庫は、別のテーブルで管理するので、後で考える。

テーブルの準備 Edit

  • phpMyAdminでテーブルを作る。
  • とりあえず手入力・・・
    • 最終的にWikiの表組みからDDLに変換するツールを作りたいな・・・

プロジェクトの準備 Edit

  • 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文字化け対応 Edit

  • 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
      }

画面の確認 Edit

  • 下記にアクセスして画面を確認する
  • 次のようなメッセージが表示されていれば、データベースに接続できているのでOK!
    Your database configuration file is present. 
    
    Cake is able to connect to the database.

画面のテンプレートレイアウト Edit

  • よさげのレイアウトをいれておく。
  • shopとkitchenで違うものにしておく。(見分けつけるように)
  • CakePHP のおいしい食べ方 default.thtml 7 free designs for Cake PHPのテンプレートを使う。
    • 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フォルダにいれる。

デバッグモードにしておく Edit

  • CakePHPのDEBUG定数を2にしておく
    それぞれのフォルダのconfig/core.php
    define('DEBUG', 2);
    これで、画面にSQLが表示されるようになる。

CRUDページ Edit

  • bakeの代わりに使うdecorateをダウンロードしてcake/scriptフォルダにおいておく
    CakePHP のおいしい食べ方 Scaffolding and Decorating your web app with CakePHP
  • 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/

商品表示ページの実装 Edit

  • 商品詳細ページは、コントローラ名を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

テストケースの準備 Edit

  • 次回イテレーションで準備する。

デモページの用意 Edit

  • さくらのサーバーにアップしてデモ見れるようにしたいな。
  • サブドメインの設定をする
    用途フォルダURL
    フロント系$HOME/www/cakeshophttp://cakeshop.cre8system.jp/
    管理系$HOME/www/cakekitchenhttp://cakekitchen.cre8system.jp/
  • 公開は次回イテレーションで準備する。

ふりかえり Edit

イテレーション終わったら、ふりかえりをしましょう!

Keep(よかったこと) Edit

  • CakePHPの仕組みを理解できた。
  • ローカルの環境もXAMPPなどを利用して簡単に構築できた。
  • Wikiでイテレーションの作業予定(タスク)をまとめていくのは、Good!
    • 何をやるのかが整理できる。
    • 作業の結果メモを簡単に残していける。

Problem(わるかったこと) Edit

  • PHPのデバッグがうまくいかない。
    • これの調査にすごく時間がかかった。
    • あきらめが肝心!
  • 作業を自宅と事務所の二カ所でやっていたため、ソースをコミットし忘れると辛い。

Try(次回挑戦) Edit

  • 常に動くものを完成させる姿勢で取り組むと、目標が見えやすいのでよかった。
  • CakePHPの日本語ドキュメントがあったお陰で、早く理解することができた。感謝!
  • Wikiでドキュメントをまとめていくのは、これからも続けていこう。
  • ハマリ気味の時は、諦めて別の方針に切り替えることを考えよう。
  • 一人でもルールは肝心。整理することで、理解も深まると思う。

イテレーション評価・得点 Edit

今回のイテレーションは、準備がメインだったので調べることが多かった。
少し手間取ったところもあったが、画面を表示するというところまではたどり着いたので良かった。
評価としては、80点

関連ページ Edit

ページ新規作成:

コメント Edit


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

スポンサード リンク

リロード   新規 編集 凍結 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2007-02-09 (金) 16:10:07 (4210d)