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)

データベース Edit

  • MySQL 4.4(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
  • 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
      を追加する。

ソース管理、バグ管理 Edit

ルール 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