0 follower

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

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 (例えば assetsruntime のコンテンツはバージョン管理すべきではありません) および .gitkeep (初期状態が空っぽではあるけれども重要なディレクトリを強制的にバージョン管理下に置きます) を生成します。

% YiiRoot/framework/yiic webapp WebRoot/testdrive git

サポートされているもう一つの VCS は Mercurial です。Mercurial を使用している場合は、 三番目のパラメータとして hg を渡して下さい。この機能はバージョン 1.1.11 以降で使用可能になりました。

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

ほとんどのウェブアプリケーションの裏側にはデータベースがあります。この最初のウェブアプリケーションも例外ではありません。 データベースを利用するには、まずアプリケーションにどのようにデータベースに接続するかを指示しなければなりません。 これはアプリケーション初期構成ファイル 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_pdophp_pdo_sqlite 拡張が有効になっている必要があります。

2. CRUD 操作の実装

これからが面白い部分です。 CRUD 操作 (Create 作成、Read 読み出し、Update 修正、Delete 削除) を今作成したばかりの tbl_user テーブルに対して実装します。 これは実際のアプリケーションでも共通に必要となる機能です。実際にコードを書く苦労をする代りに、強力なウェブベースのコードジェネレータを使用します -- すなわち Gii を使います。

情報: Gii はバージョン 1.1.2 以降で使用出来ます。それより前のバージョンでは、同じ目的を達するために、既に述べた yiic ツールを使うことが出来ました。詳細については、コマンドラインツールを使用するコード生成 を参照して下さい。.

Gii を構成する

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 にアクセスします。パスワードを求められますので、上記のアプリケーション初期構成に記述したばかりのパスワードを入力して下さい。

User モデルを生成する

ログイン後、Model Generator のリンクをクリックします。すると、下のようなモデル生成ページに移動します。

Model Generator

Model Generator

Table Name フィールドに tbl_user と入力します。Model Class フィールドには User と入力します。そして Preview ボタンを押すと、 新しく生成されるコードファイルを見ることが出来ます。さあ、Generate ボタンを押しましょう。User.php という新しいファイルが protected/models の下に生成されます。 後にこのガイドの中で説明するように、この User モデルクラスによって、その下層を構成するデータベースの tbl_user テーブルとオブジェクト指向の流儀で対話をすることが可能になります。

CRUD コードを生成する

モデルクラスファイルを生成した後で、ユーザデータに関する CRUD 操作を実装するコードを生成します。下の図のように、Gii で Crud Generator を選択します。

CRUD Generator

CRUD Generator

Model Class フィールドに User と入力します。Controller ID フィールドは user (小文字) を入力します。そして、Preview ボタンを押した後で Generate ボタンを押します。これで CRUD コードの生成は完了しました。

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

User admin page

Create new user page

Create new user page

Found a typo or you think this page needs improvement?
Edit it on github !