#yiiフレームワークとは
ざっと言うと、PHPのフレームワークで、
読み方は「イーフレームワーク」です
何やらjQueryとかが最初からパッケージされていて?
MVCベースで、オブジェクト指向な人に嬉しい設計になっているとかいないとか?
ただすいません、自分の知識はここまでです(苦笑
自分は偉そうに「yiiフレームワークとは何か・・」など語れないので
あとは たなかひさてるさんのslideshare あたりを参考にしてください
現時点では日本語の関連書籍もないとのことなので、
自分も今からチュートリアルなどを触りながら勉強して
学んだこと感じたことをここに備忘録代わりに書き記していきます
#yiiをダウンロードしてくる
平行して勉強しているAWSのEC2をWEBサーバとして
ここにyiiを入れていこうと思います
ですので、AWSのEC2に基本的なLAMP環境を作ってみる(2) で作った環境をベースにしていきます
まずは、macのターミナルからSSH接続です
こちらのEC2はLAMP環境が揃ってる前提です
ssh -i ~/.ssh/(任意の名前).pem ec2-user@(EC2インスタンスのPublicIP)
で、ルートになっておきます
$ sudo -i
次にyiiを入れるのですが、
アーカイブファイルを落として解凍する方法と
Composerを使う方法があるようです
(公式リファレンスより)
Composerはまた違う機会に勉強しようかと思うので、
今回は前者の方で・・・
また、今回のyiiフレームワークは、1.1を選択してます
執筆時点でyii2という選択肢もあったのですが、
yiiのノリをまずは掴むため、情報がまだネットに多い1.1を使うことにしました
まずは、webのルートになる場所へ
# cd /var/www/html/
で、アーカイブを落としました
# wget https://github.com/yiisoft/yii/releases/download/1.1.16/yii-1.1.16.bca042.tar.gz
# ls
yii-1.1.16.bca042.tar.gz
ls
で確認。落ちてきました
次に解凍です
# tar zxvf yii-1.1.16.bca042.tar.gz
# ls
yii-1.1.16.bca042 yii-1.1.16.bca042.tar.gz
ls
で確認。解凍できました
次にこのディレクトリ名だと扱いにくいので、名前を変えます
# mv yii-1.1.16.bca042 yii
# ls
yii yii-1.1.16.bca042.tar.gz
ls
で確認。yiiディレクトリができました
次にアーカイブはもう不要なので消します
# rm -f yii-1.1.16.bca042.tar.gz
# ls
yii
これで、/var/www/html/yii
だけになりました
#yiiの必須要件をチェックしてみる
yiiが動く環境なのかどうかを、ブラウザで簡単に確認が出来るようです
http://(IPアドレス)/yii/requirements/
※ IPアドレスの部分はDNSがあれば、それで・・ということで
このURLにアクセスすると、一覧として出してくれます
全部緑であればOKなのですが、Warningはいくつか出るのではないかと・・・
ただ、Failedが出てなければ、あとで直せるということで
自分はこのまま進みます
#yiiのアプリケーションを作ってみる
公式リファレンス初めての Yii アプリケーションの作成を参考に
yiiのアプリケーションを作ってみました
yiiには、「yiic」というジェネレータツールがあるとのことなので、それを使ってみます
(読み方は「イーク」?)
では、yiicを叩きます
アプリケーションのディレクトリ名はとりあえずyiitest
にします
# php yii/framework/yiic webapp yiitest
Create a Web application under '/var/www/html/yiitest'? (yes|no) [no]:
上のコマンドは、先ほど作られたyiiの中のframework/yiic
というツールに対して命令をしています
すると、「じゃあ指定の場所にWEBアプリを作るよ?」って聞いてくるので、yes
と答えました
するとガガガっとファイルが作られていき
Your application has been created successfully under /var/www/html/yiitest.
と、メッセージが出されます
OKのようです
ブラウザで確認してみます
http://(IPアドレス)/yiitest/
My Web Application
というページが表示されました
これでOKですね!
#データベース設定と簡単なアプリケーション
LAMPなWEBアプリケーションなので、MySQLと連携させます
phpMyAdminなどで、yiitest
というテーブルとそれに対する全権持ちのユーザを作っておきました(そのあたりの作業は割愛)
次に、このデータベースにtbl_user
というテーブルを作りました
このテーブル定義は、yiicの時に自動的に/protected/data/schema.mysql.sql
というファイルが作られていて、その中身に書いてあるSQLから作りました
ちなみに中身はこんな感じです
CREATE TABLE tbl_user (
id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(128) NOT NULL,
password VARCHAR(128) NOT NULL,
email VARCHAR(128) NOT NULL
);
INSERT INTO tbl_user (username, password, email) VALUES ('test1', 'pass1', 'test1@example.com');
INSERT INTO tbl_user (username, password, email) VALUES ('test2', 'pass2', 'test2@example.com');
INSERT INTO tbl_user (username, password, email) VALUES ('test3', 'pass3', 'test3@example.com');
INSERT INTO tbl_user (username, password, email) VALUES ('test4', 'pass4', 'test4@example.com');
INSERT INTO tbl_user (username, password, email) VALUES ('test5', 'pass5', 'test5@example.com');
INSERT INTO tbl_user (username, password, email) VALUES ('test6', 'pass6', 'test6@example.com');
INSERT INTO tbl_user (username, password, email) VALUES ('test7', 'pass7', 'test7@example.com');
INSERT INTO tbl_user (username, password, email) VALUES ('test8', 'pass8', 'test8@example.com');
INSERT INTO tbl_user (username, password, email) VALUES ('test9', 'pass9', 'test9@example.com');
INSERT INTO tbl_user (username, password, email) VALUES ('test10', 'pass10', 'test10@example.com');
INSERT INTO tbl_user (username, password, email) VALUES ('test11', 'pass11', 'test11@example.com');
INSERT INTO tbl_user (username, password, email) VALUES ('test12', 'pass12', 'test12@example.com');
INSERT INTO tbl_user (username, password, email) VALUES ('test13', 'pass13', 'test13@example.com');
INSERT INTO tbl_user (username, password, email) VALUES ('test14', 'pass14', 'test14@example.com');
INSERT INTO tbl_user (username, password, email) VALUES ('test15', 'pass15', 'test15@example.com');
INSERT INTO tbl_user (username, password, email) VALUES ('test16', 'pass16', 'test16@example.com');
INSERT INTO tbl_user (username, password, email) VALUES ('test17', 'pass17', 'test17@example.com');
INSERT INTO tbl_user (username, password, email) VALUES ('test18', 'pass18', 'test18@example.com');
INSERT INTO tbl_user (username, password, email) VALUES ('test19', 'pass19', 'test19@example.com');
INSERT INTO tbl_user (username, password, email) VALUES ('test20', 'pass20', 'test20@example.com');
では、早速データベース設定をしてみます
vimで規定の「アプリケーション初期構成ファイル」を編集するようです
# vim protected/config/main.php
'db'=>array(
'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',
),
// uncomment the following to use a MySQL database
/*
'db'=>array(
'connectionString' => 'mysql:host=localhost;dbname=testdrive',
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
),
*/
db
という項目がありました
どうやら、sqliteがデフォルトで設定されているようです
これをMySQLを使うように設定変更するみたいです
uncomment the following to use a MySQL database
「MySQLデータベースを使うにはコメントを外してね」と書いてありますからね
逆にsqliteの方は使わないのでコメントしておきました
'connectionString' => 'mysql:host=<ホスト>;dbname=<データベース名>',
'username' => '<ユーザー名>',
'password' => '<パスワード>',
基本的には、上記を設定する感じですね
追加でタイムゾーンを直したりするらしいですが、
それはまた後ほどやります
今回はyiitest
というデータベースなので、dbnameとusernameはyiitest
にしました
ホストはサーバ内のMySQLなのでとりあえずlocalhost
で
#Giiでソースコードを作ってみる
「Gii」とは、公式リファレンスによると「強力なウェブベースのコードジェネレータ」とのことらしいです
まずは事前準備をしなければならないようです
vimで「アプリケーション初期構成ファイル」を編集します
# cd /var/www/html/yiitest
# vim protected/config/main.php
'modules'=>array(
// uncomment the following to enable the Gii tool
/*
'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'Enter Your Password Here',
// If removed, Gii defaults to localhost only. Edit carefully to taste.
'ipFilters'=>array('127.0.0.1','::1'),
),
*/
),
modules
という項目にgii
がありました
uncomment the following to enable the Gii tool
「Giiを有効にするにはコメント外してね」とあるので、外します
Enter Your Password Here
「パスワードを入れてね」とパスワードが必要ぽいので適当なものを入れておきました
ipFilters
の項目でIPのフィルタがかけられるようです
後ほどのジェネレータページにアクセスできるIPを制限しているようなので、
一旦この配列に'*'
という文字列を足しました(後で消す前提で)
'ipFilters'=>array('127.0.0.1','::1','*'), // こんな感じで書き換え
ブラウザで次のURLにアクセスしてみます
http://(IPアドレス)/yiitest/?r=gii
すると、Please enter your password
と何やらパスワードを聞かれます
ここには先ほど「アプリケーション初期構成ファイル」で設定したパスワードを入れました
するとWelcome to Yii Code Generator!
というページが表示されました!
- Controller Generator
- Crud Generator
- Form Generator
- Model Generator
- Module Generator
というメニューがあるので、まずはモデルから作ってみます
Model Generator
を選択します
Model Generator
ページにはフォームがたくさんありますが、
自分が編集したのはまずTable Prefix
です
今回テーブル名のプレフィクスはtbl_
なので、それを入力しました
次にTable Name
を入力しました
テーブルはtbl_user
なので、それを入力しますが、
入力するとModel Class
が自動で「User」と入力されました
下のpreviewボタンを押すと、models/User.php
というリンクが表示されました
クリックしてみると、PHPソースコードがふわっと表示されました!
<?php
/**
* This is the model class for table "tbl_user".
*
* The followings are the available columns in table 'tbl_user':
* @property integer $id
* @property string $username
* @property string $password
* @property string $email
*/
class User extends CActiveRecord
{
/**
* Returns the static model of the specified AR class.
* @param string $className active record class name.
* @return User the static model class
*/
public static function model($className=__CLASS__)
{
return parent::model($className);
}
(以下略...)
@property
のコメントを見ると、
先ほどデータベースに作ったテーブル定義がちゃんと反映されてるようです
これが生成されるようですね!
では早速、generateボタンと行きたいところですが、
これを押すとエラーになります
Giiが /var/www/html/yiitest/protected/models/
に
User.php
を作ろうとするのですが、
書込権限がないのでファイルを作れないためです
なので、以下を実行します
# cd /var/www/html/yiitest/protected/
# chmod 777 models/
あらためて、先述のgenerateボタンを押すと
エラーにはならず、The code has been generated successfully.
と表示されました
本当かどうか確かめます
# cd models/
# ls -la
合計 20
drwxrwxrwx 2 root root 4096 4月 5 23:51 .
drwxr-xr-x 14 root root 4096 4月 5 23:35 ..
-rw-r--r-- 1 root root 969 4月 5 23:35 ContactForm.php
-rw-r--r-- 1 root root 1779 4月 5 23:35 LoginForm.php
-rw-rw-rw- 1 apache apache 2278 4月 5 23:51 User.php
[root@ip-172-30-1-229 models]#
User.phpが作られてますね!
OKです