Yiiで最初の経験を積むために、この章では最初のYiiアプリケーションの作成法を説明します。強力な'yiic'ツールを使用します。
これは数種類のタスクのためのコード生成を自動で行います。
便宜上、YiiRoot
はYiiをインストールしたディレクトリと仮定し、WebRoot
はウェブサーバのドキュメントルートします。
yiic
をコマンドラインから動かすには次のように行います。
% YiiRoot/framework/yiic webapp WebRoot/testdrive
注意:
yiic
をMac OSやLinuxやUnix上で動かす場合には、yiic
ファイルを実行可にします。 または、以下のようにツールを動作させます。% cd WebRoot/testdrive % php YiiRoot/framework/yiic.php webapp WebRoot/testdrive
これを実行するとWebRoot/testdrive
の下に骨格のYiiアプリケーションが作成されます。
このアプリケーションはほとんどのYiiアプリケーションに必要とされるディレクトリ構造を持ちます。
コードを一行も書かなくても、ウェブブラウザで以下のURLをアクセスすることで、最初のYiiアプリケーションをテストすることができます。
http://hostname/testdrive/index.php
これで見るように、このアプリケーションは、ホームページ、コンタクトページ、ログインぺージの3ページからなります。 ホームページはアプリケーション情報だけでなくユーザのログインステータスも表示します。 コンタクトページはユーザが入力して送信するためのフォームを表示します。 ログインページはユーザが特権内容にアクセスする前に認証を受けるために使用されます。 詳しい情報は以下の画面情報を見てください。
Home page
Contact page
Contact page with input errors
Contact page with success
Login page
以下はアプリケーションのディレクトリ構造を示します。ディレクトリ構造のより詳細な説明はコンベンションConventionsを見てください。
testdrive/ index.php ウェブアプリケーションのエントリスクリプト assets/ 発行されたリソースファイルを含む css/ CSSファイルを含む images/ イメージファイルを含む themes/ アプリケーションテーマを含む protected/ 保護されたアプリケーションファイルを含む yiic yiicコマンドラインスクリプト yiic.bat ウインドウズ用yiicコマンドラインスクリプト commands/ カスタム化した'yiic'コマンドを含む shell/ カスタム化した'yiic shell'コマンドを含む components/ 再利用可能なユーザコンポーネントを含む MainMenu.php 'MainMenu'ウイジェットクラス Identity.php 認証のための'Identity'クラス views/ ウイジェットのためのビュー mainMenu.php 'MainMenu'ウイジェットのビュー config/ コンフィギュレーションファイルを含む console.php コンソールアプリケーションコンフィギュレーションファイル main.php ウェブアプリケーションコンフィギュレーションファイル controllers/ コントローラクラスファイルを含む SiteController.php デフォルトコントローラクラスファイル extensions/ サードパーティ拡張を含む messages/ 翻訳されたメッセージを含む models/ モデルクラスファイルを含む LoginForm.php 'login'アクションのためのフォームモデル ContactForm.php 'contact'アクションのためのフォームモデル runtime/ 暫定的に生成されたファイルを含む views/ コントローラビューとレイアウトを含む layouts/ レイアウトビューファイルを含む main.php 全てのビューファイルのデフォルトレイアウト site/ 'site'コントローラのためのビューを含む contact.php 'contact'アクションのためのビュー index.php 'index'アクションのためのビュー login.php 'login'アクションのためのビュー system/ システムビューファイルを含む
ほとんどのウェブアプリケーションの裏側にはデータベースがあります。この最初のウェブアプリケーションも例外ではありません。
データベースを利用するには、まずアプリケーションにどのようにアプリケーションに接続するかを指示します。
これはアプリケーションコンフィギュレーションファイルWebRoot/testdrive/protected/config/main.php
を以下のように修正することで行います。
return array(
......
'components'=>array(
......
'db'=>array(
'connectionString'=>'sqlite:protected/data/source.db',
),
),
......
);
上の例においては、components
にdb
エントリを追加しています。
これにより、アプリケーションが必要に応じSQLiteデータベースWebRoot/testdrive/protected/data/source.db
に接続することを指示します。
注意: Yiiのデータベース機能を使うためにはPHP PDO拡張とドライバ固有のPDO拡張をイネーブルにする必要があります。 このtest-driveアプリケーションでは
php_pdo
とphp_pdo_sqlite
拡張がオンになっている必要があります。
最後に、上記コンフィギュレーションが有効となるように、SQLiteデータベースを準備する必要があります。 なんらかのSQLite管理ツールを使用して、以下のスキーマを持つデータベースを作成します。
CREATE TABLE User ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, username VARCHAR(128) NOT NULL, password VARCHAR(128) NOT NULL, email VARCHAR(128) NOT NULL );
注意: もしMySQLデータベースをお使いの場合は上記の
AUTOINCREMENT
をAUTO_INCREMENT
に変更してください。
単純化のために、データベース中にひとつだけUser
テーブルを作成します。
SQLiteデータベースファイルはWebRoot/testdrive/protected/data/source.db
にストアされます。ファイルだけでなくディレクトリについても、ウェブサーバプロセスから書き込めるようにしておいてください。
これからが面白い部分です。
CRUD操作(作成、読み出し、修正、削除)を今作成したばかりのUser
テーブルに対して実装します。
これは実際のアプリケーションで共通に必要となる機能です。
実際にコードを書く苦労を無くすために、強力なyiic
ツールを再び使用し、コードを自動生成します。
このプロセスは「スカッフォールディング(足場生成)」としても知られています。
コマンドラインから以下のコマンドを実行します。
% cd WebRoot/testdrive % protected/yiic shell Yii Interactive Tool v1.0 Please type 'help' for help. Type 'exit' to quit. >> model User generate User.php The 'User' class has been successfully created in the following file: D:\wwwroot\testdrive\protected\models\User.php If you have a 'db' database connection, you can test it now with: $model=User::model()->find(); print_r($model); >> crud User generate UserController.php generate create.php mkdir D:/wwwroot/testdrive/protected/views/user generate update.php generate list.php generate show.php Crud 'user' has been successfully created. You may access it via: http://hostname/path/to/index.php?r=user
上において、新しい骨格アプリケーションと応答するためにyiic shell
コマンドを使用しました。
プロンプトが出たら2つのサブコマンドを実行します。それらはmodel User
とcrud User
です。
前者はUser
テーブルのスキーマに基いてUser
モデルクラスを生成します。
後者はUser
モデルを読み込み、CRUD操作に必要なコードを実装します。
注意: たとえ要求チェッカーがシステム要求としてPDOと対応するPDOドライバがイネーブルになっていたとしても "...could not find driver"のようなエラーにぶつかるかもしれません。 その場合は以下のようにしてみてください。
% php -c path/to/php.ini protected/yiic.php shellここで
path/to/php.ini
は正しいPHP初期化ファイルです。
さて、作業の結果を以下のURLから見て楽しみましょう。
http://hostname/testdrive/index.php?r=user
これはUser
テーブルのユーザエントリのリストを表示するはずです。ただテーブルは空なので、今は何も表示されません。
New User
リンクをクリックしてみてください。もし既にログインしていなければログインページが現れます。
ログイン後は新規ユーザを追加するための入力フォームが現れます。入力を完了し、Create
ボタンをクリックしてください。
入力にエラーがあれば素敵なエラーページが表示され、入力はセーブされません。
ユーザリストに戻り、新しく追加されたユーザをリスト上で見ることができます。
ユーザをもっと追加するには上記のステップを繰り返してください。 もし一ページに表示するには多過ぎる場合には、ユーザリストページは自動的にページ分割されます。
もし管理者としてadmin/admin
を入力してログインする場合は、以下のURLにより管理者ページを見ることができます。
http://hostname/testdrive/index.php?r=user/admin
これにより、素敵なユーザエントリ表が表示されます。 テーブルの先頭をクリックすることで対応するカラムをソートすることができます。 そしてユーザリストページと同様に、管理者ページも、表示すべきユーザエントリが一ページには多過ぎる場合には、ページ分割が行われます。
これら全てのすてきな機能はコードを一行も書かなくても達成することができます!
User admin page
Create new user page
Signup or Login in order to comment.