初めてPHPのフレームワーク（Yii）を使ってみる　その１

ちょっと大きめのお仕事を受けることになりました
初のECサイトです
[EC-CUBE](http://www.ec-cube.net/)を使おうかとか、昔取った杵柄とやらでガンガン生PHPを叩くかとか色々悩みましたが、予てからオススメを受けていたYiiというフレームワークを使ってみることにしました
なにしろ、私がまともにPHPを使っていた頃は、PHPはオブジェクト指向ですらなかったわけで、フレームワークというものがどういうものか、というところから理解しなければならないわけで...（先の長い話だ）
さて、本題。実際にフレームワークを使って、ちょっとしたECサイトのようなものを作ってみたいと思います

***

#Yiiフレームワークのインストールと設定
##インストール
[インストール](http://www.yiiframework.com/doc/guide/1.1/ja/quickstart.installation)
この辺りを読んでその通りにやれば大丈夫

##スケルトンアプリケーションの作成
以下のコマンドを実行して、基本になるスケルトンアプリケーションを作る
ついでに後でGiiを使うので、一時的にアクセス権を777に開放しておく

```bash:
$ cd htdocs
$ php yii/framework/yiic.php webapp ec_site
$ sudo chmod -R 777 ec_site
```

・・・めっちゃ簡単
##データベースの作成
今回は（も？）レンサバを使うので、悩む余地などなくMySQLを選択
`htdocs/ec_site/protected/config/main.php`を以下のように修正
ついでに、少し手順を進めたところで、timezoneがうんたらという警告が出て進まなくなるので、timezoneの設定もしておく

```php:htdocs/ec_site/protected/config/main.php
return array(
...
	'import'=>array(
		'application.models.*',
		'application.components.*',
	),

	// ↓この一行を追加
	'timeZone' => 'Asia/Tokyo',

	'modules'=>array(
...
	'components'=>array(
...
		// SQLiteをコメントアウト
		/*'db'=>array(
			'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',
		),*/
		// uncomment the following to use a MySQL database
		// MySQLをアンコメント
		'db'=>array(
			'connectionString' => 'mysql:host=<DBホスト>;dbname=ec_site',
			'emulatePrepare' => true,
			'username' => '<DB接続ユーザー名>',
			'password' => '<DB接続パスワード>',
			'charset' => 'utf8',
			'tablePrefix' => 'ec_',
			'initSQLs' => array("set time_zone='+9:00';"), // タイムゾーンを追加
		),
...
```

phpMyAdminでお手軽にDB操作
ec_siteというデータベースを新たに作成し、以下のsqlファイルを作成してインポート

```mysql:schema.mysql.sql
CREATE TABLE ec_user
(
    id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
    mailaddr VARCHAR(128) NOT NULL,
    password VARCHAR(128) NOT NULL,
    auth INTEGER DEFAULT 0 NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE ec_user_profile
(
	id INTEGER NOT NULL PRIMARY KEY,
    firstname VARCHAR(20) NOT NULL,
    lastname VARCHAR(20) NOT NULL,
    kana_firstname VARCHAR(20) NOT NULL,
    kana_lastname VARCHAR(20) NOT NULL,
    corporation VARCHAR(50),
    kana_corporation VARCHAR(50),
    post VARCHAR(20),
    zipcode VARCHAR(10) NOT NULL,
    address VARCHAR(100) NOT NULL,
    phone1 VARCHAR(20) NOT NULL,
    phone2 VARCHAR(20),
    fax VARCHAR(20),
    email2 VARCHAR(128),
    deliverable_zipcode VARCHAR(10),
    deliverable_address VARCHAR(100),
    point INTEGER DEFAULT 0 NOT NULL,
	CONSTRAINT FK_user_profile FOREIGN KEY (id)
		REFERENCES ec_user (id) ON DELETE CASCADE ON UPDATE RESTRICT
)  ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
```

テーブル名とか恥ずかしいからあんまりじっくり見ないでくだしあ///

##Giiのインストール
`htdocs/ec_site/protected/config/main.php`を編集してGiiを使えるようにする

```php:htdocs/ec_site/protected/config/main.php
return array(
...
	// autoloading model and component classes
	'import'=>array(
		'application.models.*',
...
	'modules'=>array(
		// uncomment the following to enable the Gii tool
		// アンコメントしてGiiを有効にする
		'gii'=>array(
			'class'=>'system.gii.GiiModule',
			'password'=>'<ここでGiiのパスワードを設定>',
			// If removed, Gii defaults to localhost only. Edit carefully to taste.
			'ipFilters'=>array('127.0.0.1','::1'),
		),
	),
...
```

***

下準備としてはこんなもんかな？