mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-06 16:16:53 +01:00
221 lines
11 KiB
Plaintext
221 lines
11 KiB
Plaintext
初めてのYiiアプリケーションの作成
|
|
==============================
|
|
|
|
Yiiで最初の経験を積むために、この章では最初のYiiアプリケーションの作成法を説明します。強力な'yiic'ツールを使用します。
|
|
これは数種類のタスクのためのコード生成を自動で行います。
|
|
便宜上、`YiiRoot`はYiiをインストールしたディレクトリと仮定し、`WebRoot`はウェブサーバのドキュメントルートします。
|
|
|
|
|
|
`yiic`をコマンドラインから動かすには次のように行います。
|
|
|
|
~~~
|
|
% YiiRoot/framework/yiic webapp WebRoot/testdrive
|
|
~~~
|
|
|
|
> Note|注意: `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ページからなります。
|
|
ホームページはアプリケーション情報だけでなくユーザのログインステータスも表示します。
|
|
コンタクトページはユーザが入力して送信するためのフォームを表示します。
|
|
ログインページはユーザが特権内容にアクセスする前に認証を受けるために使用されます。
|
|
詳しい情報は以下の画面情報を見てください。
|
|
|
|

|
|
|
|

|
|
|
|

|
|
|
|

|
|
|
|

|
|
|
|
|
|
以下はアプリケーションのディレクトリ構造を示します。ディレクトリ構造のより詳細な説明はコンベンション[Conventions](/doc/guide/basics.convention#directory)を見てください。
|
|
|
|
~~~
|
|
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`を以下のように修正することで行います。
|
|
|
|
~~~
|
|
[php]
|
|
return array(
|
|
......
|
|
'components'=>array(
|
|
......
|
|
'db'=>array(
|
|
'connectionString'=>'sqlite:protected/data/source.db',
|
|
),
|
|
),
|
|
......
|
|
);
|
|
~~~
|
|
|
|
上の例においては、`components`に`db`エントリを追加しています。
|
|
これにより、アプリケーションが必要に応じSQLiteデータベース`WebRoot/testdrive/protected/data/source.db`に接続することを指示します。
|
|
|
|
> Note|注意: Yiiのデータベース機能を使うためにはPHP PDO拡張とドライバ固有のPDO拡張をイネーブルにする必要があります。
|
|
このtest-driveアプリケーションでは`php_pdo`と`php_pdo_sqlite`拡張がオンになっている必要があります。
|
|
|
|
最後に、上記コンフィギュレーションが有効となるように、SQLiteデータベースを準備する必要があります。
|
|
なんらかのSQLite管理ツールを使用して、以下のスキーマを持つデータベースを作成します。
|
|
|
|
~~~
|
|
[sql]
|
|
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
|
|
);
|
|
~~~
|
|
|
|
> Note|注意: もしMySQLデータベースをお使いの場合は上記の`AUTOINCREMENT`を`AUTO_INCREMENT`に変更してください。
|
|
|
|
単純化のために、データベース中にひとつだけ`User`テーブルを作成します。
|
|
SQLiteデータベースファイルは`WebRoot/testdrive/protected/data/source.db`にストアされます。ファイルだけでなくディレクトリについても、ウェブサーバプロセスから書き込めるようにしておいてください。
|
|
|
|
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
|
|
mkdir D:/wwwroot/testdrive/protected/views/user
|
|
generate create.php
|
|
generate update.php
|
|
generate list.php
|
|
generate show.php
|
|
generate admin.php
|
|
generate _form.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操作に必要なコードを実装します。
|
|
|
|
> Note|注意: たとえ要求チェッカーがシステム要求として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
|
|
~~~
|
|
|
|
これにより、素敵なユーザエントリ表が表示されます。
|
|
テーブルの先頭をクリックすることで対応するカラムをソートすることができます。
|
|
そしてユーザリストページと同様に、管理者ページも、表示すべきユーザエントリが一ページには多過ぎる場合には、ページ分割が行われます。
|
|
|
|
これら全てのすてきな機能はコードを一行も書かなくても達成することができます!
|
|
|
|

|
|
|
|

|
|
|
|
<div class="revision">$Id: quickstart.first-app.txt 1264 2009-05-06 03:36:09Z qiang.xue $</div>
|