LoginSignup
17
24

More than 5 years have passed since last update.

yiiフレームワークを使ってみる(1)

Last updated at Posted at 2015-04-05

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です

17
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
24