Yii で最初の経験を積んでもらうために、この章では初めての Yii アプリケーションの作成方法を説明します。
新しい Yii アプリケーションを作成するために yiic
(コマンドラインツール) を使用し、
いくつかのタスクについてコード生成を自動化するために Gii
(強力なウェブベースのコードジェネレータ)
を使用します。便宜上、YiiRoot
は Yii をインストールしたディレクトリと仮定し、WebRoot
はウェブサーバのドキュメントルートであるとします。
コマンドラインから yiic
を次のように実行します。
% YiiRoot/framework/yiic webapp WebRoot/testdrive
注意:
yiic
を Mac OS, Linux, Unix で動かす場合には、yiic
ファイルのパーミッションを 変更して、実行可能にする必要があるかもしれません。 あるいは、別の方法として、以下のようにしてツールを起動しても良いでしょう。% cd WebRoot % php YiiRoot/framework/yiic.php webapp testdrive
これを実行すると WebRoot/testdrive
の下にスケルトンの Yii アプリケーションが作成されます。
このアプリケーションは、ほとんどの Yii アプリケーションで必要になるディレクトリ構造を持っています。
コードを一行も書かなくても、ウェブブラウザで以下のURLをアクセスすることで、初めての Yii アプリケーションをテストすることができます。
http://hostname/testdrive/index.php
これで見るように、このアプリケーションは、ホームページ、「について(about)」ページ、コンタクトページ、 ログインぺージの4ページからなります。コンタクトページは、ユーザがウェブマスターに問い合わせを 入力して送信するためのフォームを表示します。ログインページは、ユーザが許可が必要な内容にアクセスする前に 認証を受けるために使用されます。詳しい情報は以下の画面情報を見てください。
ホームページ
コンタクトページ
入力エラーがあるコンタクトページ
成功のメッセージがあるコンタクトページ
ログインページ
以下はアプリケーションのディレクトリ構造を示します。詳細な説明は 規約 を見てください。
testdrive/ index.php ウェブアプリケーションのエントリスクリプト index-test.php 機能テストのためのエントリスクリプト assets/ 発行されたリソースファイルを含む css/ CSS ファイルを含む images/ イメージファイルを含む themes/ アプリケーションテーマを含む protected/ 保護されたアプリケーションファイルを含む yiic Unix/Linux 用 yiic コマンドラインスクリプト yiic.bat ウインドウズ用 yiic コマンドラインスクリプト yiic.php yiic コマンドライン PHP スクリプト commands/ カスタム化した 'yiic' コマンドを含む shell/ カスタム化した 'yiic shell' コマンドを含む components/ 再利用可能なユーザコンポーネントを含む Controller.php 全てのコントローラクラスの基本クラス UserIdentity.php 認証のための 'UserIdentity' クラス config/ アプリケーション初期構成ファイルを含む console.php コンソールアプリケーション初期構成ファイル main.php ウェブアプリケーション初期構成ファイル test.php 機能テストのための初期構成ファイル controllers/ コントローラクラスファイルを含む SiteController.php デフォルトコントローラクラスファイル data/ サンプルデータベースを含む schema.mysql.sql サンプルの MySQL データベースの DB スキーマ schema.sqlite.sql サンプルの SQLite データベースの DB スキーマ testdrive.db サンプルの SQLite データベースファイル extensions/ サードパーティ拡張を含む messages/ 翻訳されたメッセージを含む models/ モデルクラスファイルを含む LoginForm.php 'login' アクションのためのフォームモデル ContactForm.php 'contact' アクションのためのフォームモデル runtime/ 一時的に生成されたファイルを含む views/ コントローラビューとレイアウトを含む layouts/ レイアウトビューファイルを含む main.php 全てのページで共有される基本レイアウト column1.php 単一カラムを使うページ用のレイアウト column2.php 2カラムを使うページ用のレイアウト site/ 'site' コントローラのためのビューを含む pages/ "静的" なページを含む about.php "について(about)" ページのビュー contact.php 'contact' アクションのためのビュー error.php 'error' アクションのためのビュー (外部エラーを表示) index.php 'index' アクションのためのビュー login.php 'login' アクションのためのビュー
上述されたアプリケーションジェネレータは、Git バージョン管理システムが必要とする
ファイルの生成もサポートしています。次のコマンドを実行すると、必要な .gitignore
(例えば assets
と runtime
のコンテンツはバージョン管理すべきではありません)
および .gitkeep
(初期状態が空っぽではあるけれども重要なディレクトリを強制的にバージョン管理下に置きます) を生成します。
% YiiRoot/framework/yiic webapp WebRoot/testdrive git
サポートされているもう一つの VCS は Mercurial です。Mercurial を使用している場合は、
三番目のパラメータとして hg
を渡して下さい。この機能はバージョン 1.1.11 以降で使用可能になりました。
ほとんどのウェブアプリケーションの裏側にはデータベースがあります。この最初のウェブアプリケーションも例外ではありません。
データベースを利用するには、まずアプリケーションにどのようにデータベースに接続するかを指示しなければなりません。
これはアプリケーション初期構成ファイル WebRoot/testdrive/protected/config/main.php
を以下のように修正することで行います。
return array(
......
'components'=>array(
......
'db'=>array(
'connectionString'=>'sqlite:protected/data/testdrive.db',
),
),
......
);
上記のコードは Yii に対して、アプリケーションは必要に応じて SQLite データベース WebRoot/testdrive/protected/data/testdrive.db
に接続すべきことを指示しています。この SQLite データベースは、作成したばかりのスケルトンアプリケーションに既に含まれていることに留意して下さい。
このデータベースには、一つだけ、下記のような tbl_user
という名前のテーブルが含まれています。
CREATE TABLE tbl_user ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, username VARCHAR(128) NOT NULL, password VARCHAR(128) NOT NULL, email VARCHAR(128) NOT NULL );
代りに MySQL のデータベースを試したい場合は、付属している MySQL のスキーマファイル WebRoot/testdrive/protected/data/schema.mysql.sql
を使ってデータベースを作成することが出来ます。
注意: Yii のデータベース機能を使うためには PHP PDO 拡張とドライバ固有の PDO 拡張を有効にする必要があります。 この test-drive アプリケーションでは
php_pdo
とphp_pdo_sqlite
拡張が有効になっている必要があります。
これからが面白い部分です。
CRUD 操作 (Create 作成、Read 読み出し、Update 修正、Delete 削除) を今作成したばかりの tbl_user
テーブルに対して実装します。
これは実際のアプリケーションでも共通に必要となる機能です。実際にコードを書く苦労をする代りに、強力なウェブベースのコードジェネレータを使用します -- すなわち Gii
を使います。
情報: Gii はバージョン 1.1.2 以降で使用出来ます。それより前のバージョンでは、同じ目的を達するために、既に述べた
yiic
ツールを使うことが出来ました。詳細については、コマンドラインツールを使用するコード生成 を参照して下さい。.
Gii を使うためには、最初に WebRoot/testdrive/protected/config/main.php
を次のように編集する必要があります。これは アプリケーション初期構成 ファイルとして知られるファイルです。
return array(
......
'import'=>array(
'application.models.*',
'application.components.*',
),
'modules'=>array(
'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'pick up a password here',
),
),
);
次に、ブラウザで URL http://hostname/testdrive/index.php?r=gii
にアクセスします。パスワードを求められますので、上記のアプリケーション初期構成に記述したばかりのパスワードを入力して下さい。
ログイン後、Model Generator
のリンクをクリックします。すると、下のようなモデル生成ページに移動します。
Model Generator
Table Name
フィールドに tbl_user
と入力します。Model Class
フィールドには User
と入力します。そして Preview
ボタンを押すと、
新しく生成されるコードファイルを見ることが出来ます。さあ、Generate
ボタンを押しましょう。User.php
という新しいファイルが protected/models
の下に生成されます。
後にこのガイドの中で説明するように、この User
モデルクラスによって、その下層を構成するデータベースの tbl_user
テーブルとオブジェクト指向の流儀で対話をすることが可能になります。
モデルクラスファイルを生成した後で、ユーザデータに関する CRUD 操作を実装するコードを生成します。下の図のように、Gii で Crud Generator
を選択します。
CRUD Generator
Model Class
フィールドに User
と入力します。Controller ID
フィールドは user
(小文字) を入力します。そして、Preview
ボタンを押した後で Generate
ボタンを押します。これで CRUD コードの生成は完了しました。
下記の URL をブラウズして、仕事の結果を楽しみましょう。
http://hostname/testdrive/index.php?r=user
このページは tbl_user
テーブルのユーザのエントリ一覧を表示します。
Create User
のリンクをクリックしてみてください。もし既にログインしていなければログインページに飛ばされます。
ログイン後は新規ユーザを追加するための入力フォームが現れます。入力を完了して Create
ボタンをクリックしてください。
何か入力にエラーがある場合は、親切なエラーメッセージが表示されて、入力内容が保存されることを防いでくれます。
ユーザ一覧に戻ると、新しく追加されたユーザをリスト上で見ることが出来るはずです。
上記のステップを繰り返してユーザをたくさん追加してみてください。1ページに表示するには多過ぎるようになると、 ユーザ一覧のページが自動的にユーザエントリをページ分割して表示することに注目して下さい。
admin/admin
を使って管理者としてログインすると、以下の URL によってユーザ管理ページを見ることができます。
http://hostname/testdrive/index.php?r=user/admin
このページは、便利なテーブル形式でユーザの一覧表を表示します。テーブルのヘッダセルをクリックすると、 対応するカラムをソートすることが出来ます。また、データの各行にあるボタンをクリックすると、対応する行のデータを 閲覧、更新、または削除することが出来ます。別のページへ移動することも出来ます。さらに、関心のあるデータを探すために、 フィルターを使ったり検索をしたりすることも出来ます。
これら全ての便利な機能が、一行のコードを書く必要もなく、手に入るのです。
User admin page
Create new user page
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.