Edited at

初めてPHPのフレームワーク(Yii)を使ってみる その1

More than 3 years have passed since last update.

ちょっと大きめのお仕事を受けることになりました

初のECサイトです

EC-CUBEを使おうかとか、昔取った杵柄とやらでガンガン生PHPを叩くかとか色々悩みましたが、予てからオススメを受けていたYiiというフレームワークを使ってみることにしました

なにしろ、私がまともにPHPを使っていた頃は、PHPはオブジェクト指向ですらなかったわけで、フレームワークというものがどういうものか、というところから理解しなければならないわけで...(先の長い話だ)

さて、本題。実際にフレームワークを使って、ちょっとしたECサイトのようなものを作ってみたいと思います



Yiiフレームワークのインストールと設定


インストール

インストール

この辺りを読んでその通りにやれば大丈夫


スケルトンアプリケーションの作成

以下のコマンドを実行して、基本になるスケルトンアプリケーションを作る

ついでに後でGiiを使うので、一時的にアクセス権を777に開放しておく

$ 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の設定もしておく


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ファイルを作成してインポート


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を使えるようにする


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'),
),
),
...


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