0 follower

初めてのYiiアプリケーションの作成

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

Home page

Contact page

Contact page

Contact page with input errors

Contact page with input errors

Contact page with success

Contact page with success

Login page

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/             システムビューファイルを含む

1. データベースへの接続

ほとんどのウェブアプリケーションの裏側にはデータベースがあります。この最初のウェブアプリケーションも例外ではありません。 データベースを利用するには、まずアプリケーションにどのようにアプリケーションに接続するかを指示します。 これはアプリケーションコンフィギュレーションファイルWebRoot/testdrive/protected/config/main.phpを以下のように修正することで行います。

return array(
    ......
    'components'=>array(
        ......
        'db'=>array(
            'connectionString'=>'sqlite:protected/data/source.db',
        ),
    ),
    ......
);

上の例においては、componentsdbエントリを追加しています。 これにより、アプリケーションが必要に応じSQLiteデータベースWebRoot/testdrive/protected/data/source.dbに接続することを指示します。

注意: Yiiのデータベース機能を使うためにはPHP PDO拡張とドライバ固有のPDO拡張をイネーブルにする必要があります。 このtest-driveアプリケーションではphp_pdophp_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データベースをお使いの場合は上記のAUTOINCREMENTAUTO_INCREMENTに変更してください。

単純化のために、データベース中にひとつだけUserテーブルを作成します。 SQLiteデータベースファイルはWebRoot/testdrive/protected/data/source.dbにストアされます。ファイルだけでなくディレクトリについても、ウェブサーバプロセスから書き込めるようにしておいてください。

2. CRUD操作の実装

これからが面白い部分です。 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 Usercrud 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

User admin page

Create new user page

Create new user page