Browse Source

guide-ja/tutorial-* revised [ci skip] (#16213)

* guide-ja/tutorial-* revising WIP [ci skip]

* guide-ja/tutorial-* revising WIP [ci skip]

* guide-ja/tutorial-* revised [ci skip]

* guide-ja/db-query-builder.md typo fixed [ci skip]
tags/2.0.16
Nobuo Kihara 6 years ago committed by Alexander Makarov
parent
commit
221dc878f6
  1. 2
      docs/guide-ja/db-query-builder.md
  2. 58
      docs/guide-ja/tutorial-console.md
  3. 189
      docs/guide-ja/tutorial-core-validators.md
  4. 7
      docs/guide-ja/tutorial-docker.md
  5. 132
      docs/guide-ja/tutorial-i18n.md
  6. 9
      docs/guide-ja/tutorial-mailing.md
  7. 56
      docs/guide-ja/tutorial-performance-tuning.md
  8. 13
      docs/guide-ja/tutorial-shared-hosting.md
  9. 11
      docs/guide-ja/tutorial-start-from-scratch.md
  10. 11
      docs/guide-ja/tutorial-template-engines.md
  11. 26
      docs/guide-ja/tutorial-yii-as-micro-framework.md
  12. 66
      docs/guide-ja/tutorial-yii-integration.md

2
docs/guide-ja/db-query-builder.md

@ -237,7 +237,7 @@ $query->where(['id' => $userQuery]);
```php
// 脆弱なコード:
$column = $request->get('column');
$value = $request->get('value);
$value = $request->get('value');
$query->where([$column => $value]);
// $value は安全です。しかし、$column の名前はエンコードされません。
```

58
docs/guide-ja/tutorial-console.md

@ -5,8 +5,7 @@
コンソール・アプリケーションは、主として、ウェブ・サイトのために実行する必要のあるバックグラウンドのタスクやメンテナンスのタスクを作成するために使われるものです。
コンソール・アプリケーションの構造は Yii のウェブ・アプリケーションのそれと非常に良く似ています。
コンソール・アプリケーションは一つまたは複数の [[yii\console\Controller]] クラスから構成されます。
コントローラはコンソール環境ではしばしば「コマンド」と呼ばれます。
コンソール・アプリケーションは一つまたは複数の [[yii\console\Controller]] クラスから構成されます。コントローラはコンソール環境ではしばしば「コマンド」と呼ばれます。
また、各コントローラは、ウェブのコントローラと全く同じように、一つまたは複数のアクションを持つことが出来ます。
プロジェクト・テンプレートは、両方とも、既にコンソール・アプリケーションを持っています。
@ -43,7 +42,9 @@ yii <route> [--option1=value1 --option2=value2 ... argument1 argument2 ...]
上記において、`<route>` はコントローラ・アクションへのルートを示すものです。
オプション (options) はクラスのプロパティに代入され、引数 (arguments) はアクション・メソッドのパラメータとなります。
例えば、[[yii\console\controllers\MigrateController::$migrationTable|MigrateController::$migrationTable]] として `migrations` を指定し、マイグレーションの上限を 5 と指定して [[yii\console\controllers\MigrateController::actionUp()|MigrateController::actionUp()]] を呼び出すためには、次のようにします。
例えば、[[yii\console\controllers\MigrateController::$migrationTable|MigrateController::$migrationTable]] として `migrations` を指定し、
マイグレーションの上限を 5 と指定して [[yii\console\controllers\MigrateController::actionUp()|MigrateController::actionUp()]]
を呼び出すためには、次のようにします。
```
yii migrate/up 5 --migrationTable=migrations
@ -68,6 +69,7 @@ yii migrate/up 5 --migrationTable=migrations
*/
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
require __DIR__ . '/vendor/autoload.php';
require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';
@ -79,8 +81,7 @@ $exitCode = $application->run();
exit($exitCode);
```
このスクリプトはアプリケーションの一部として生成されるものです。
あなたの必要を満たすように、自由に編集して構いません。
このスクリプトはアプリケーションの一部として生成されるものです。あなたの必要を満たすように、自由に編集して構いません。
エラー発生時にスタック・トレースを見たくない、または、全体のパフォーマンスを上げたい、という場合は、`YII_DEBUG` 定数を `false` に設定することが出来ます。
ベーシック・プロジェクト・テンプレートでも、アドバンスト・プロジェクト・テンプレートでも、コンソール・アプリケーションのエントリ・スクリプトは、開発者に優しい環境を提供するために、デフォルトでデバッグを有効にしています。
@ -91,17 +92,21 @@ exit($exitCode);
上記のコードで見るように、コンソール・アプリケーションは、`console.php` という名前のそれ自身の構成情報ファイルを使用します。
このファイルの中で、さまざまな [アプリケーション・コンポーネント](structure-application-components.md)、取り分け、コンソール・アプリケーションのためのプロパティを構成しなければなりません。
ウェブ・アプリケーションとコンソール・アプリケーションが構成情報のパラメータと値を数多く共有する場合は、共通の部分を独立したファイルに移動して、そのファイルを両方のアプリケーション (ウェブとコンソール) の構成情報にインクルードすることを検討しても良いでしょう。
ウェブ・アプリケーションとコンソール・アプリケーションが構成情報のパラメータと値を数多く共有する場合は、共通の部分を独立したファイルに移動して、
そのファイルを両方のアプリケーション (ウェブとコンソール) の構成情報にインクルードすることを検討しても良いでしょう。
その例をアドバンスト・プロジェクト・テンプレートの中で見ることが出来ます。
> Tip: 場合によっては、エントリ・スクリプトで指定されているのとは異なるアプリケーション構成情報を使ってコンソール・コマンドを実行したいことがあります。
> 例えば、`yii migrate` コマンドを使ってテストのデータベースをアップグレードするとき、データベースが個々のテストスイートの中で構成されているような場合です。
> Tip: 場合によっては、エントリ・スクリプトで指定されているのとは異なるアプリケーション構成情報を使って
> コンソール・コマンドを実行したいことがあります。
> 例えば、`yii migrate` コマンドを使ってテストのデータベースをアップグレードするとき、
> データベースが個々のテストスイートの中で構成されているような場合です。
> 構成情報を動的に変更するためには、コマンドを実行するときに `appconfig` オプションを使ってカスタムの構成情報ファイルを指定するだけで大丈夫です。
>
> ```
> yii <route> --appconfig=path/to/config.php ...
> ```
コンソール・コマンドの補完 <span id="console-command-completion"></span>
--------------------------
@ -110,8 +115,7 @@ exit($exitCode);
### Bash の補完
bash completion がインストールされていることを確認して下さい。
ほとんどの bash のインストレーションでは、デフォルトで利用可能になっています。
bash completion がインストールされていることを確認して下さい。ほとんどの bash のインストレーションでは、デフォルトで利用可能になっています。
補完スクリプトを `/etc/bash_completion.d/` に置いて下さい。
@ -150,34 +154,35 @@ autoload -Uz compinit && compinit -i
exec $SHELL -l
```
あなた自身のコンソール・コマンドを作成する <span id="create-command"></span>
------------------------------------------
### コンソールのコントローラとアクション
コンソール・コマンドは、[[yii\console\Controller]] を拡張するコントローラ・クラスとして定義することが出来ます。
コントローラ・クラスの中で、コントローラのサブ・コマンドに対応する一つまたは複数のアクションを定義します。
各アクションの中で、その特定のサブ・コマンドのための適切なタスクを実装するコードを書きます。
コントローラ・クラスの中で、コントローラのサブ・コマンドに対応する一つまたは複数のアクションを定義します。各アクションの中で、その特定のサブ・コマンドのための適切なタスクを実装するコードを書きます。
コマンドを実行するときは、コントローラのアクションに対するルートを指定する必要があります。
例えば、ルート `migrate/create` は、[[yii\console\controllers\MigrateController::actionCreate()|MigrateController::actionCreate()]] アクション・メソッドに対応するサブコマンドを呼び出します。
例えば、ルート `migrate/create` は、[[yii\console\controllers\MigrateController::actionCreate()|MigrateController::actionCreate()]]
アクション・メソッドに対応するサブコマンドを呼び出します。
実行時に提供されたルートにアクション ID が含まれない場合は、(ウェブのコントローラの場合と同じように) デフォルトのアクションが実行されます。
### オプション
[[yii\console\Controller::options()]] メソッドをオーバーライドすることによって、コンソール・コマンド (controller/actionID) で利用できるオプションを指定することが出来ます。
このメソッドはコントローラ・クラスのパブリックなプロパティのリストを返さなければなりません。
コマンドを実行するときは、`--OptionName=OptionValue` という構文を使ってオプションの値を指定することが出来ます。これはコントローラ・クラスの `OptionName` プロパティに `OptionValue` を割り当てるものです。
コマンドを実行するときは、`--OptionName=OptionValue` という構文を使ってオプションの値を指定することが出来ます。
これはコントローラ・クラスの `OptionName` プロパティに `OptionValue` を割り当てるものです。
オプションのデフォルト値が配列型である場合、実行時にこのオプションをセットすると、オプションの値は、入力文字列をカンマで分離することによって、配列に変換されます。
オプションのデフォルト値が配列型である場合、実行時にこのオプションをセットすると、
オプションの値は、入力文字列をカンマで分離することによって、配列に変換されます。
### オプションのエイリアス
バージョン 2.0.8 以降、コンソールコマンドは、オプションにエイリアスを追加するための [[yii\console\Controller::optionAliases()]] メソッドを提供しています。
バージョン 2.0.8 以降、コンソールコマンドは、オプションにエイリアスを追加するための
[[yii\console\Controller::optionAliases()]] メソッドを提供しています。
エイリアスを定義するためには、コントローラで [[yii\console\Controller::optionAliases()]] をオーバーライドします。
例えば、
エイリアスを定義するためには、コントローラで [[yii\console\Controller::optionAliases()]] をオーバーライドします。例えば、
```php
namespace app\commands;
@ -213,8 +218,7 @@ class HelloController extends Controller
### 引数
オプションに加えてに、コマンドは引数を取ることも出来ます。
引数は、リクエストされたサブ・コマンドに対応するアクション・メソッドへのパラメータとして渡されます。
オプションに加えてに、コマンドは引数を取ることも出来ます。引数は、リクエストされたサブ・コマンドに対応するアクション・メソッドへのパラメータとして渡されます。
最初の引数は最初のパラメータに対応し、二番目の引数は二番目のパラメータに対応し、以下同様です。
コマンドが呼び出されたときに十分な数の引数が提供されなかったときは、対応するパラメータは、定義されていれば、宣言されているデフォルト値をとります。
デフォルト値が設定されておらず、実行時に値が提供されなかった場合は、コマンドはエラーで終了します。
@ -244,12 +248,12 @@ class ExampleController extends \yii\console\Controller
### 終了コード
終了コードを使うことはコンソール・アプリケーション開発のベスト・プラクティスです。
コマンドは何も問題が無かったことを示すために `0` を返すのが慣例です。
コマンドが 1 以上の値を返したときは、何かエラーを示唆するものとみなされます。
コマンドは何も問題が無かったことを示すために `0` を返すのが慣例です。コマンドが 1 以上の値を返したときは、何かエラーを示唆するものとみなされます。
返される数値がエラーコードであり、それによってエラーに関する詳細を見出すことが出来る場合もあります。
例えば、`1` は一般的な未知のエラーを示すものとし、`2` 以上の全てのコードは特定のエラー、例えば、入力エラー、ファイルが見つからない、等々を示すものとすることが出来ます。
コンソール・コマンドに終了コードを返させるためには、単にコントローラのアクション・メソッドで整数を返すようにします。
コンソール・コマンドに終了コードを返させるためには、
単にコントローラのアクション・メソッドで整数を返すようにします。
```php
public function actionIndex()
@ -284,8 +288,7 @@ public function actionIndex()
Yii のコンソール・コマンドは出力の書式設定をサポートしています。
これは、コマンドを走らせている端末がサポートしていない場合は、自動的に書式設定の無い出力にグレードダウンされます。
書式設定された文字列を出力することは簡単です。
ボールドのテキストを出力するには、次のようにします。
書式設定された文字列を出力することは簡単です。ボールドのテキストを出力するには、次のようにします。
```php
$this->stdout("Hello?\n", Console::BOLD);
@ -300,8 +303,7 @@ echo "Hello, my name is $name.";
### 表形式
バージョン 2.0.13 以降、表形式のデータをコンソールに表示するウィジェットが追加されています。
次のようにして使うことが出来ます。
バージョン 2.0.13 以降、表形式のデータをコンソールに表示するウィジェットが追加されています。次のようにして使うことが出来ます。
```php
echo Table::widget([

189
docs/guide-ja/tutorial-core-validators.md

@ -1,8 +1,7 @@
コア・バリデータ
================
Yii は、一般的に使われる一連のコア・バリデータを提供しています。
コア・バリデータは、主として、`yii\validators` 名前空間の下にあります。
Yii は、一般的に使われる一連のコア・バリデータを提供しています。コア・バリデータは、主として、`yii\validators` 名前空間の下にあります。
長ったらしいバリデータ・クラス名を使う代りに、*エイリアス* を使って使用するコア・バリデータを指定することが出来ます。
例えば、[[yii\validators\RequiredValidator]] クラスを参照するのに `required` というエイリアスを使うことが出来ます。
@ -39,7 +38,8 @@ public function rules()
- `strict`: 入力値の型が `trueValue``falseValue` の型と一致しなければならないかどうか。デフォルト値は `false`
> Note: HTML フォームで送信されたデータ入力値は全て文字列であるため、通常は、[[yii\validators\BooleanValidator::strict|strict]] プロパティは `false` のままにすべきです。
> Note: HTML フォームで送信されたデータ入力値は全て文字列であるため、通常は、
[[yii\validators\BooleanValidator::strict|strict]] プロパティは `false` のままにすべきです。
## [[yii\captcha\CaptchaValidator|captcha]] <span id="captcha"></span>
@ -50,11 +50,14 @@ public function rules()
]
```
このバリデータは、通常、[[yii\captcha\CaptchaAction]] および [[yii\captcha\Captcha]] と一緒に使われ、入力値が [[yii\captcha\Captcha|CAPTCHA]] ウィジェットによって表示された検証コードと同じであることを確認します。
このバリデータは、通常、[[yii\captcha\CaptchaAction]] および [[yii\captcha\Captcha]] と一緒に使われ、
入力値が [[yii\captcha\Captcha|CAPTCHA]] ウィジェットによって表示された検証コードと同じであることを確認します。
- `caseSensitive`: 検証コードの比較で大文字と小文字を区別するかどうか。デフォルト値は `false`
- `captchaAction`: CAPTCHA 画像を表示する [[yii\captcha\CaptchaAction|CAPTCHA アクション]] に対応する [ルート](structure-controllers.md#routes)。デフォルト値は `'site/captcha'`
- `skipOnEmpty`: 入力値が空のときに検証をスキップできるかどうか。デフォルト値は `false` で、入力が必須であることを意味します。
- `captchaAction`: CAPTCHA 画像を表示する [[yii\captcha\CaptchaAction|CAPTCHA アクション]] に対応する
[ルート](structure-controllers.md#routes)。デフォルト値は `'site/captcha'`
- `skipOnEmpty`: 入力値が空のときに検証をスキップできるかどうか。デフォルト値は `false` で、
入力が必須であることを意味します。
## [[yii\validators\CompareValidator|compare]] <span id="compare"></span>
@ -72,10 +75,12 @@ public function rules()
]
```
このバリデータは指定された入力値を他の値と比較し、両者の関係が `operator` プロパティで指定されたものであることを確認します。
このバリデータは指定された入力値を他の値と比較し、両者の関係が
`operator` プロパティで指定されたものであることを確認します。
- `compareAttribute`: その値が比較対象となる属性の名前。
このバリデータが属性を検証するのに使用されるとき、このプロパティのデフォルト値はその属性の名前に接尾辞 `_repeat` を付けた名前になります。
このバリデータが属性を検証するのに使用されるとき、このプロパティのデフォルト値はその属性の名前に接尾辞
`_repeat` を付けた名前になります。
例えば、検証される属性が `password` であれば、このプロパティのデフォルト値は `password_repeat` となります。
- `compareValue`: 入力値が比較される定数値。
このプロパティと `compareAttribute` の両方が指定された場合は、このプロパティが優先されます。
@ -90,14 +95,15 @@ public function rules()
* `<`: 検証される値が比較される値よりも小さいことを検証する。
* `<=`: 検証される値が比較される値よりも小さいか等しいことを検証する。
- `type`: デフォルトの比較タイプは '[[yii\validators\CompareValidator::TYPE_STRING|string]]' (文字列) であり、その場合、値は 1 バイトごとに比較されます。
数値を比較する場合は、必ず [[yii\validators\CompareValidator::$type|$type]] を '[[yii\validators\CompareValidator::TYPE_NUMBER|number]]' に設定して、数値としての比較を有効にして下さい。
数値を比較する場合は、必ず [[yii\validators\CompareValidator::$type|$type]] を '[[yii\validators\CompareValidator::TYPE_NUMBER|number]]' に設定して、
数値としての比較を有効にして下さい。
### 日付の値を比較する
compare バリデータは、文字列や数値を比較するためにしか使えません。
日付のような値を比較する必要がある場合は、二つの選択肢があります。
日付をある固定値と比較するときは、単に [[yii\validators\DateValidator|date]] バリデータを使って、その [[yii\validators\DateValidator::$min|$min]] や [[yii\validators\DateValidator::$max|$max]] のプロパティを指定すれば良いでしょう。
日付をある固定値と比較するときは、単に [[yii\validators\DateValidator|date]] バリデータを使って、
その [[yii\validators\DateValidator::$min|$min]] や [[yii\validators\DateValidator::$max|$max]] のプロパティを指定すれば良いでしょう。
フォームに入力された二つの日付、例えば、`fromDate` と `toDate` のフィールドを比較する必要がある場合は、
次のように、compare バリデータと date バリデータを組み合わせて使うことが出来ます。
@ -111,13 +117,14 @@ compare バリデータは、文字列や数値を比較するためにしか使
そして、有効な日付であった場合は、機械が読める形式に変換されます。
その後に、これらの二つの値が compare バリデータによって比較されます。
現在、date バリデータはクライアント・サイドのバリデーションを提供していませんので、これはサーバ・サイドでのみ動作します。
そのため、compare バリデータについても、[[yii\validators\CompareValidator::$enableClientValidation|$enableClientValidation]] は `false` に設定されています。
そのため、compare バリデータについても、[[yii\validators\CompareValidator::$enableClientValidation|$enableClientValidation]] は
`false` に設定されています。
## [[yii\validators\DateValidator|date]] <span id="date"></span>
[[yii\validators\DateValidator|date]] バリデータには 3 つの異なるショートカットがあります。
[[yii\validators\DateValidator|date]] バリデータには三つの異なる
ショートカットがあります。
```php
[
@ -128,10 +135,12 @@ compare バリデータは、文字列や数値を比較するためにしか使
```
このバリデータは、入力値が正しい書式の date、time、または datetime であるかどうかをチェックします。
オプションとして、入力値を UNIX タイムスタンプ (または、その他、機械による読み取りが可能な形式) に変換して、[[yii\validators\DateValidator::timestampAttribute|timestampAttribute]] によって指定された属性に保存することも出来ます。
オプションとして、入力値を UNIX タイムスタンプ (または、その他、機械による読み取りが可能な形式) に変換して、
[[yii\validators\DateValidator::timestampAttribute|timestampAttribute]] によって指定された属性に保存することも出来ます。
- `format`: 検証される値が従っているべき日付/時刻の書式。
これには [ICU manual](http://userguide.icu-project.org/formatparse/datetime#TOC-Date-Time-Format-Syntax) で記述されている日付/時刻のパターンを使うことが出来ます。
これには [ICU manual](http://userguide.icu-project.org/formatparse/datetime#TOC-Date-Time-Format-Syntax)
で記述されている日付/時刻のパターンを使うことが出来ます。
あるいは、PHP の `Datetime` クラスによって認識される書式に接頭辞 `php:` を付けた文字列でも構いません。
サポートされている書式については、<http://php.net/manual/ja/datetime.createfromformat.php> を参照してください。
このプロパティが設定されていないときは、`Yii::$app->formatter->dateFormat` の値を取ります。
@ -141,19 +150,25 @@ compare バリデータは、文字列や数値を比較するためにしか使
その場合は、元の値は検証実行後にタイムスタンプで上書きされます。
[DatePicker で日付の入力を扱う](https://github.com/yiisoft/yii2-jui/blob/master/docs/guide-ja/topics-date-picker.md) に使用例がありますので、参照してください。
バージョン 2.0.4 以降では、[[yii\validators\DateValidator::$timestampAttributeFormat|$timestampAttributeFormat]] と [[yii\validators\DateValidator::$timestampAttributeTimeZone|$timestampAttributeTimeZone]] を使って、この属性に対するフォーマットとタイム・ゾーンを指定することが出来ます。
バージョン 2.0.4 以降では、[[yii\validators\DateValidator::$timestampAttributeFormat|$timestampAttributeFormat]] と
[[yii\validators\DateValidator::$timestampAttributeTimeZone|$timestampAttributeTimeZone]] を使って、
この属性に対するフォーマットとタイム・ゾーンを指定することが出来ます。
`timestampAttribute` を使う場合、入力値が UNIX タイムスタンプに変換されること、そして、UNIX タイムスタンプは定義により UTC であることに注意して下さい。
すなわち、[[yii\validators\DateValidator::timeZone|入力のタイム・ゾーン]] から UTC への変換が実行されます。
- バージョン 2.0.4 以降では、タイムスタンプの [[yii\validators\DateValidator::$min|最小値]] または [[yii\validators\DateValidator::$max|最大値]] を指定することも出来ます。
- バージョン 2.0.4 以降では、タイムスタンプの [[yii\validators\DateValidator::$min|最小値]] または
[[yii\validators\DateValidator::$max|最大値]] を指定することも出来ます。
入力が必須でない場合には、date バリデータに加えて、default バリデータ (デフォルト値フィルタ) を追加すれば、空の入力値が `null` として保存されることを保証することが出来ます。
そうしないと、データベースに `0000-00-00` という日付が保存されたり、デート・ピッカーの入力フィールドが `1970-01-01` になったりしてしまいます。
入力が必須でない場合には、date バリデータに加えて、default バリデータ (デフォルト値フィルタ) を追加すれば、
空の入力値が `null` として保存されることを保証することが出来ます。そうしないと、データベースに `0000-00-00` という日付が保存されたり、
デート・ピッカーの入力フィールドが `1970-01-01` になったりしてしまいます。
```php
[
[['from_date', 'to_date'], 'default', 'value' => null],
[['from_date', 'to_date'], 'date'],
]
```
## [[yii\validators\DefaultValueValidator|default]] <span id="default"></span>
@ -177,8 +192,7 @@ compare バリデータは、文字列や数値を比較するためにしか使
その代りに、検証される属性が空のときに、その属性にデフォルト値を割り当てます。
- `value`: デフォルト値、または、デフォルト値を返す PHP コーラブル。
検証される属性が空のときにこのデフォルト値が割り当てられます。
PHP コーラブルのシグニチャは、次のものでなければなりません。
検証される属性が空のときにこのデフォルト値が割り当てられます。PHP コーラブルのシグニチャは、次のものでなければなりません。
```php
function foo($model, $attribute) {
@ -191,6 +205,7 @@ function foo($model, $attribute) {
データベース・スキーマによるデフォルト値は、モデルの [loadDefaultValues()](db-active-record.md#default-attribute-values)
によってロードすることが出来ます。
## [[yii\validators\NumberValidator|double]] <span id="double"></span>
```php
@ -200,13 +215,10 @@ function foo($model, $attribute) {
]
```
このバリデータは、入力値が実数値であるかどうかをチェックします。
[number](#number) バリデータと等価です。
このバリデータは、入力値が実数値であるかどうかをチェックします。[number](#number) バリデータと等価です。
- `max`: 上限値 (その値を含む)。
設定されていない場合は、バリデータが上限値をチェックしないことを意味します。
- `min`: 下限値 (その値を含む)。
設定されていない場合は、バリデータが下限値をチェックしないことを意味します。
- `max`: 上限値 (その値を含む)。設定されていない場合は、バリデータが上限値をチェックしないことを意味します。
- `min`: 下限値 (その値を含む)。設定されていない場合は、バリデータが下限値をチェックしないことを意味します。
## [[yii\validators\EachValidator|each]] <span id="each"></span>
@ -224,13 +236,13 @@ function foo($model, $attribute) {
これは、配列の *全ての* 要素が指定された検証規則による検証に成功するかどうかを調べるものです。
上の例では、`categoryIDs` 属性は配列を値として取らなければならず、配列の各要素は `integer` の検証規則によって検証されることになります。
- `rule`: 検証規則を指定する配列。
配列の最初の要素がバリデータのクラス名かエイリアスを指定します。
- `rule`: 検証規則を指定する配列。配列の最初の要素がバリデータのクラス名かエイリアスを指定します。
配列の残りの「名前・値」のペアが、バリデータ・オブジェクトを構成するのに使われます。
- `allowMessageFromRule`: 埋め込まれた検証規則によって返されるエラー・メッセージを使うかどうか。
デフォルト値は `true` です。これが `false` の場合は、`message` をエラー・メッセージとして使います。
> Note: 属性が配列でない場合は、検証が失敗したと見なされ、`message` がエラー・メッセージとして返されます。
> Note: 属性が配列でない場合は、検証が失敗したと見なされ、
`message` がエラー・メッセージとして返されます。
## [[yii\validators\EmailValidator|email]] <span id="email"></span>
@ -257,33 +269,36 @@ function foo($model, $attribute) {
```php
[
// a1 の値が属性 "a1" で表されるカラムに存在する必要がある
// a1 の入力値が a1 のカラムに存在する必要がある
['a1', 'exist'],
// a1 の値が属性 "a2" で表されるカラムに存在する必要がある
// a1 の入力値が a2 のカラムに存在する必要がある
['a1', 'exist', 'targetAttribute' => 'a2'],
// a1 の値が "a1" のカラム、a2 の値が "a2" のカラムに存在する必要がある
// 両者はともにエラー・メッセージを受け取る
// a1 と a2 の両方が存在する必要がある。両者はともにエラー・メッセージを受け取る
[['a1', 'a2'], 'exist', 'targetAttribute' => ['a1', 'a2']],
// a1 の値が "a1" のカラム、a2 の値が "a2" のカラムに存在する必要がある
// a1 のみがエラー・メッセージを受け取る
// a1 と a2 の両方が存在する必要がある。a1 のみがエラー・メッセージを受け取る
['a1', 'exist', 'targetAttribute' => ['a1', 'a2']],
// a2 の値が "a2" のカラム、a1 の値が "a3" のカラムに存在する必要がある
// a1 がエラー・メッセージを受け取る
// a2 の値が a2 のカラム、a1 の値が a3 のカラムに存在する必要がある。a1 がエラー・メッセージを受け取る
['a1', 'exist', 'targetAttribute' => ['a2', 'a1' => 'a3']],
// a1 の値が "a1" のカラムに存在する必要がある
// a1 が配列である場合は、その全ての要素が "a1" のカラムに存在する必要がある
// a1 が存在する必要がある。a1 が配列である場合は、その全ての要素が存在する必要がある
['a1', 'exist', 'allowArray' => true],
// type_id が ProductType クラスで定義されているテーブルの id カラムに存在する必要がある
['type_id', 'exist', 'targetClass' => ProductType::class, 'targetAttribute' => ['type_id' => 'id']],
// 同上。定義済みの "type" リレーションを使用。
['type_id', 'exist', 'targetRelation' => 'type'],
]
```
このバリデータは、入力値が [アクティブ・レコード](db-active-record.md) の属性によって表されるテーブルのカラムに存在するかどうかをチェックします。
`targetAttribute` を使って [アクティブ・レコード](db-active-record.md) の属性を指定し、`targetClass` によって対応するクラスを指定することが出来ます。
これらを指定しない場合は、検証されるモデルの属性とクラスの値が使用されます。
`targetAttribute` を使って [アクティブ・レコード](db-active-record.md) の属性を指定し、
`targetClass` によって対応するクラスを指定することが出来ます。
これらを指定しない場合は、検証されるモデルの属性とクラスが使用されます。
このバリデータは、一つまたは複数のカラムに対する検証に使用することが出来ます
(複数のカラムに対する検証の場合は、それらの属性の組み合せが存在しなければならないことを意味します)。
@ -293,15 +308,14 @@ function foo($model, $attribute) {
- `targetAttribute`: `targetClass` において、入力値の存在を検証するために使用される属性の名前。
設定されていない場合は、現在検証されている属性の名前が使用されます。
複数のカラムの存在を同時に検証するために配列を使うことが出来ます。
配列の値は存在を検証するのに使用される属性であり、配列のキーはその値が検証される属性です。
配列の値は存在を検証するのに使用される属性であり、配列のキーは入力値が検証される属性です。
キーと値が同じ場合は、値だけを指定することが出来ます。
- `filter`: 入力値の存在をチェックするのに使用される DB クエリに適用される追加のフィルタ。
これには、文字列、または、追加のクエリ条件を表現する配列を使うことが出来ます
(クエリ条件の書式については、[[yii\db\Query::where()]] を参照してください)。
または、`function ($query)` というシグニチャを持つ無名関数でも構いません。
`$query` は関数の中で修正できる [[yii\db\Query|Query]] オブジェクトです。
- `allowArray`: 入力値が配列であることを許容するか否か。
デフォルト値は `false`
- `allowArray`: 入力値が配列であることを許容するか否か。デフォルト値は `false`
このプロパティが `true` で入力値が配列であった場合は、配列の全ての要素がターゲットのカラムに存在しなければなりません。
`targetAttribute` を配列で指定して複数のカラムに対して検証しようとしている場合は、このプロパティを `true` に設定することが出来ないことに注意してください。
@ -326,13 +340,10 @@ function foo($model, $attribute) {
リストは、配列、または、空白かカンマで区切られたファイルの MIME タイプからなる文字列 (例えば、"image/jpeg, image/png") で指定することが出来ます。
特殊文字 `*` によるワイルドカードのマスクを使って、一群の MIME タイプに一致させることも出来ます。
例えば `image/*` は、`image/` で始まる全ての MIME タイプ (`image/jpeg`, `image/png` など) を通します。
MIME タイプ名は大文字と小文字を区別しません。
デフォルト値は `null` であり、すべての MIME タイプが許可されることを意味します。
MIME タイプ名は大文字と小文字を区別しません。デフォルト値は `null` であり、すべての MIME タイプが許可されることを意味します。
MIME タイプの詳細については、[一般的なメディア・タイプ](http://en.wikipedia.org/wiki/Internet_media_type#List_of_common_media_types) を参照してください。
- `minSize`: アップロードされるファイルに要求される最小限のバイト数。
デフォルト値は `null` であり、下限値が無いことを意味します。
- `maxSize`: アップロードされるファイルに許可される最大限のバイト数。
デフォルト値は `null` であり、上限値が無いことを意味します。
- `minSize`: アップロードされるファイルに要求される最小限のバイト数。デフォルト値は `null` であり、下限値が無いことを意味します。
- `maxSize`: アップロードされるファイルに許可される最大限のバイト数。デフォルト値は `null` であり、上限値が無いことを意味します。
- `maxFiles`: 指定された属性が保持しうる最大限のファイル数。
デフォルト値は 1 であり、入力値がアップロードされた一つだけのファイルでなければならないことを意味します。
この値が 2 以上である場合は、入力値は最大で `maxFiles` 数のアップロードされたファイルからなる配列でなければなりません。
@ -362,19 +373,18 @@ function foo($model, $attribute) {
このバリデータはデータを検証しません。
代りに、入力値にフィルタを適用して、それを検証される属性に書き戻します。
- `filter`: フィルタを定義する PHP コールバック。
これには、グローバル関数の名前、無名関数などを指定することが出来ます。
関数のシグニチャは ``function ($value) { return $newValue; }` でなければなりません。
このプロパティは必須項目です。
- `skipOnArray`: 入力値が配列である場合にフィルタをスキップするか否か。
デフォルト値は `false`
- `filter`: フィルタを定義する PHP コールバック。これには、グローバル関数の名前、無名関数などを指定することが出来ます。
関数のシグニチャは ``function ($value) { return $newValue; }` でなければなりません。このプロパティは必須項目です。
- `skipOnArray`: 入力値が配列である場合にフィルタをスキップするか否か。デフォルト値は `false`
フィルタが配列の入力を処理できない場合は、このプロパティを `true` に設定しなければなりません。
そうしないと、何らかの PHP エラーが生じ得ます。
> Tip: 入力値をトリムしたい場合は、[trim](#trim) バリデータを直接使うことが出来ます。
> Tip: `filter` のコールバックに期待されるシグニチャを持つ PHP 関数が多数存在します。
> 例えば、([intval](http://php.net/manual/ja/function.intval.php) や [boolval](http://php.net/manual/ja/function.boolval.php) などを使って) 型キャストを適用し、属性が特定の型になるように保証したい場合は、それらの関数をクロージャで包む必要はなく、単にフィルタの関数名を指定するだけで十分です。
> 例えば、([intval](http://php.net/manual/ja/function.intval.php) や [boolval](http://php.net/manual/ja/function.boolval.php)
> などを使って) 型キャストを適用し、属性が特定の型になるように保証したい場合は、
> それらの関数をクロージャで包む必要はなく、単にフィルタの関数名を指定するだけで十分です。
>
> ```php
> ['property', 'filter', 'filter' => 'boolval'],
@ -403,7 +413,6 @@ function foo($model, $attribute) {
- `minHeight`: 画像の高さの最小値。デフォルト値は `null` であり、下限値がないことを意味します。
- `maxHeight`: 画像の高さの最大値。デフォルト値は `null` であり、上限値がないことを意味します。
## [[yii\validators\IpValidator|ip]] <span id="ip"></span>
```php
[
@ -434,17 +443,14 @@ function foo($model, $attribute) {
デフォルト値は `false`
- `normalize`: CIDR を持たないアドレスに、最も短い (IPv4 では 32、IPv6 では 128) CIDR プレフィクスを追加するか否か。
`subnet``false` 以外の場合にのみ動作します。
例えば、
`subnet``false` 以外の場合にのみ動作します。例えば、
* `10.0.1.5``10.0.1.5/32` に正規化され、
* `2008:db0::1``2008:db0::1/128` に正規化されます
デフォルト値は `false`
- `negation`: 検証の対象となるアドレスが先頭に否定文字 `!` を持つことが出来るか否か。
デフォルト値は `false`
- `negation`: 検証の対象となるアドレスが先頭に否定文字 `!` を持つことが出来るか否か。デフォルト値は `false`
- `expandIPv6`: IPv6 アドレスを完全な記法に展開するか否か。
例えば、`2008:db0::1` は `2008:0db0:0000:0000:0000:0000:0000:0001` に展開されます。
デフォルト値は `false`
例えば、`2008:db0::1` は `2008:0db0:0000:0000:0000:0000:0000:0001` に展開されます。デフォルト値は `false`
- `ranges`: 許容または禁止される IPv4 または IPv6 の範囲の配列。
配列が空の場合、またはこのオプションが設定されていない場合は、全ての IP アドレスが許容されます。
@ -463,11 +469,10 @@ function foo($model, $attribute) {
```
この例では、`192.168.10.0/24` のサブネットを除いて、全ての IPv4 および IPv6 アドレスが許容されます。
IPv4 アドレス `192.168.10.128` も、制約の前にリストされているため、同様に許容されます。
- `networks`: `ranges` で使用する事が出来るネットワークのエイリアスの配列。
配列の形式は、
- `networks`: `ranges` で使用する事が出来るネットワークのエイリアスの配列。配列の形式は、
* キー - エイリアス名
* 値 - 文字列の配列。文字列は、範囲、IP アドレス、または、他のエイリアスとすることが出来ます。
また、文字列は (`negation` オプションとは独立に) `!` によって否定することが出来ます。
また、文字列は (`negation` オプションとは独立に) `!` によって否定することが出来ます。
デフォルトで、次のエイリアスが定義されています。
@ -482,7 +487,6 @@ IPv4 アドレス `192.168.10.128` も、制約の前にリストされている
> Info: このバリデータは、バージョン 2.0.7 以降で利用することが出来ます。
## [[yii\validators\RangeValidator|in]] <span id="in"></span>
```php
@ -529,7 +533,8 @@ IPv4 アドレス `192.168.10.128` も、制約の前にリストされている
このバリデータは、入力値が指定された正規表現に一致するかどうかをチェックします。
- `pattern`: 入力値が一致すべき正規表現。このプロパティを設定することは必須です。そうしないと、例外が投げられます。
- `pattern`: 入力値が一致すべき正規表現。このプロパティを設定することは必須です。
そうしないと、例外が投げられます。
- `not`: 検証結果を反転すべきかどうか。
デフォルト値は false で、入力値がパターンに一致したときにだけ検証が成功することを意味します。
このプロパティが true に設定されているときは、入力値がパターンに一致しない場合にだけ検証が成功したと見なされます。
@ -561,14 +566,15 @@ IPv4 アドレス `192.168.10.128` も、制約の前にリストされている
このバリデータは、入力値が提供されており、空ではないことをチェックします。
- `requiredValue`: 入力値として要求される値。
このプロパティが設定されていない場合は、入力値が空ではいけないことを意味します。
- `requiredValue`: 入力値として要求される値。このプロパティが設定されていない場合は、入力値が空ではいけないことを意味します。
- `strict`: 値を検証するときに、データ型をチェックするかどうか。デフォルト値は `false`
`requiredValue` が設定されていない場合、このプロパティが `true` であるときは、バリデータは入力値が厳密な意味で `null` であるかどうかをチェックします。
一方、このプロパティが `false` であるときは、値が空か否かの判断に緩い規則を使います。
`requiredValue` が設定されている場合、このプロパティが `true` であるときは、入力値と `requiredValue` を比較するときに型のチェックを行います。
`requiredValue` が設定されている場合、このプロパティが `true` であるときは、
入力値と `requiredValue` を比較するときに型のチェックを行います。
> Info: 値が空であるか否かを決定する方法については、独立したトピックとして、[空の入力値を扱う](input-validation.md#handling-empty-inputs) のセクションでカバーされています。
> Info: 値が空であるか否かを決定する方法については、独立したトピックとして、
> [空の入力値を扱う](input-validation.md#handling-empty-inputs) のセクションでカバーされています。
## [[yii\validators\SafeValidator|safe]] <span id="safe"></span>
@ -599,10 +605,12 @@ IPv4 アドレス `192.168.10.128` も、制約の前にリストされている
これは、次のいずれかの形式で指定することが出来ます。
* 一つの整数: 文字列がちょうどその長さでなければならない、その長さ。
* 一つの要素を持つ配列: 入力文字列の長さの最小値 (例えば、`[8]`)。これは `min` を上書きします。
* 二つの要素を持つ配列: 入力文字列の長さの最小値と最大値 (例えば、`[8, 128]`)。これは `min``max` の両方を上書きします。
* 二つの要素を持つ配列: 入力文字列の長さの最小値と最大値 (例えば、`[8, 128]`)。
これは `min``max` の両方を上書きします。
- `min`: 入力文字列の長さの最小値。設定されていない時は、長さの下限値がないことを意味します。
- `max`: 入力文字列の長さの最大値。設定されていない時は、長さの上限値がないことを意味します。
- `encoding`: 検証される入力文字列の文字エンコーディング。設定されていない時は、アプリケーションの [[yii\base\Application::charset|charset]] の値が使われ、デフォルトでは `UTF-8` となります。
- `encoding`: 検証される入力文字列の文字エンコーディング。設定されていない時は、
アプリケーションの [[yii\base\Application::charset|charset]] の値が使われ、デフォルトでは `UTF-8` となります。
## [[yii\validators\FilterValidator|trim]] <span id="trim"></span>
@ -614,8 +622,7 @@ IPv4 アドレス `192.168.10.128` も、制約の前にリストされている
]
```
このバリデータはデータの検証を実行しません。
その代りに、入力値の前後にあるホワイト・スペースをトリムします。
このバリデータはデータの検証を実行しません。その代りに、入力値の前後にあるホワイト・スペースをトリムします。
入力値が配列であるときは、このバリデータによって無視されることに注意してください。
@ -623,22 +630,19 @@ IPv4 アドレス `192.168.10.128` も、制約の前にリストされている
```php
[
// a1 の値が属性 "a1" で表されるカラムにおいてユニークである必要がある
// a1 の入力値が a1 のカラムにおいてユニークである必要がある
['a1', 'unique'],
// a1 の値が属性 "a2" で表されるカラムにおいてユニークである必要がある
// a1 の入力値が a2 のカラムにおいてユニークである必要がある
['a1', 'unique', 'targetAttribute' => 'a2'],
// a1 の値が "a1" のカラム、a2 の値が "a2" のカラムにおいてユニークである必要がある
// 両者はともにエラー・メッセージを受け取る
// a1 と a2 の両方がユニークである必要がある。両者がともにエラー・メッセージを受け取る
[['a1', 'a2'], 'unique', 'targetAttribute' => ['a1', 'a2']],
// a1 の値が "a1" のカラム、a2 の値が "a2" のカラムにおいてユニークである必要がある
// a1 のみがエラー・メッセージを受け取る
// a1 と a2 の両方がユニークである必要がある。a1 のみがエラー・メッセージを受け取る
['a1', 'unique', 'targetAttribute' => ['a1', 'a2']],
// a2 の値が "a2" のカラム、a1 の値が "a3" のカラムにおいてユニークである必要がある
// a1 がエラー・メッセージを受け取る
// a2 の値が a2 のカラム、a1 の値が a3 のカラムにおいてユニークである必要がある。a1 がエラー・メッセージを受け取る
['a1', 'unique', 'targetAttribute' => ['a2', 'a1' => 'a3']],
]
```
@ -652,13 +656,12 @@ IPv4 アドレス `192.168.10.128` も、制約の前にリストされている
- `targetAttribute`: `targetClass` において、入力値がユニークであることを検証するために使用される属性の名前。
設定されていない場合は、現在検証されている属性の名前が使用されます。
複数のカラムのユニーク性を同時に検証するために配列を使うことが出来ます。
配列の値はユニーク性を検証するのに使用される属性であり、配列のキーはその値が検証される属性です。
配列の値はユニーク性を検証するのに使用される属性であり、配列のキーはその入力値が検証される属性です。
キーと値が同じ場合は、値だけを指定することが出来ます。
- `filter`: 入力値のユニーク性をチェックするのに使用される DB クエリに適用される追加のフィルタ。
これには、文字列、または、追加のクエリ条件を表現する配列を使うことが出来ます
(クエリ条件の書式については、[[yii\db\Query::where()]] を参照してください)。
または、`function ($query)` というシグニチャを持つ無名関数でも構いません。
`$query` は関数の中で修正できる [[yii\db\Query|Query]] オブジェクトです。
または、`function ($query)` というシグニチャを持つ無名関数でも構いません。`$query` は関数の中で修正できる [[yii\db\Query|Query]] オブジェクトです。
## [[yii\validators\UrlValidator|url]] <span id="url"></span>
@ -677,12 +680,10 @@ IPv4 アドレス `192.168.10.128` も、制約の前にリストされている
デフォルト値は `['http', 'https']` であり、`http` と `https` の URL がともに有効と見なされることを意味します。
- `defaultScheme`: 入力値がスキームの部分を持たないときに前置されるデフォルトの URI スキーム。
デフォルト値は `null` であり、入力値を修正しないことを意味します。
- `enableIDN`: バリデータが IDN (国際化ドメイン名) を考慮すべきか否か。
デフォルト値は `false`
- `enableIDN`: バリデータが IDN (国際化ドメイン名) を考慮すべきか否か。デフォルト値は `false`
IDN の検証を使用するためには、`intl` PHP 拡張をインストールして有効化する必要があることに注意してください。
そうしないと、例外が投げられます。
> Note: このバリデータは URL スキームとホスト部分が正しいものであることを検証します。
URL の残りの部分はチェックしません。また、XSS や他の攻撃に対して防御するように設計されてもいません。
アプリケーション開発における脅威に対する防御について更に学習するために
[セキュリティのベスト・プラクティス](security-best-practices.md) を参照して下さい。
アプリケーション開発における脅威に対する防御について更に学習するために[セキュリティのベスト・プラクティス](security-best-practices.md) を参照して下さい。

7
docs/guide-ja/tutorial-docker.md

@ -1,9 +1,7 @@
Yii と Docker
=============
開発および配備の際に Yii アプリケーションを Docker コンテナとして実行することが出来ます。
コンテナは隔絶された軽量の仮想マシンのようなもので、そのサービスをホストのポートにマップします。
例えば、コンテナ内の 80 番ポートにあるウェブ・サーバが(ローカル)ホストの 8888 番で利用できます。
開発および配備の際に Yii アプリケーションを Docker コンテナとして実行することが出来ます。コンテナは隔絶された軽量の仮想マシンのようなもので、そのサービスをホストのポートにマップします。例えば、コンテナ内の 80 番ポートにあるウェブ・サーバが(ローカル)ホストの 8888 番で利用できます。
コンテナによって、開発用コンピュータと実運用サーバでソフトウェアのバージョンを全く同一にすること、迅速な配備、開発時におけるマルチ・サーバ・アーキテクチャのシミュレーションなど、数多くの問題を解決することが出来ます。
@ -82,7 +80,7 @@ Docker の基本的なコマンド:
*実行中の* `php` サービスの中で bash を実行
## Advanced topics
## 高度なトピック
### Yii フレームワークのテスト
@ -91,6 +89,7 @@ Docker の基本的なコマンド:
### データベース管理ツール
MySQL を (`mysql`) として実行するときは、以下のようにして phpMyAdmin コンテナをスタックに追加することが出来ます。
```
phpmyadmin:
image: phpmyadmin/phpmyadmin

132
docs/guide-ja/tutorial-i18n.md

@ -1,7 +1,8 @@
国際化
======
国際化 (I18N) とは、工学的な変更を伴わずにさまざまな言語と地域に順応できるように、ソフトウェア・アプリケーションを設計するプロセスを指します。
国際化 (I18N) とは、工学的な変更を伴わずにさまざまな言語と地域に順応できるように、
ソフトウェア・アプリケーションを設計するプロセスを指します。
潜在的なユーザが世界中にいるウェブ・アプリケーションにとっては、このことは特に重要な意味を持ちます。
Yii は、全ての領域にわたる国際化機能を提供し、メッセージの翻訳、ビューの翻訳、日付と数字の書式設定をサポートします。
@ -10,14 +11,18 @@ Yii は、全ての領域にわたる国際化機能を提供し、メッセー
### ロケール
ロケールとは、ユーザの言語、国、そして、ユーザが彼らのユーザ・インタフェイスにおいて目にすることを期待するすべての変異形式を定義する一連のパラメータです。
ロケールとは、ユーザの言語、国、そして、ユーザが彼らのユーザ・インタフェイスにおいて目にすることを期待する
すべての変異形式を定義する一連のパラメータです。
ロケールは、通常、言語 ID と地域 ID から成るロケール ID によって定義されます。
例えば、`en-US` という ID は、「英語とアメリカ合衆国」というロケールを意味します。
Yii アプリケーションで使用される全てのロケール ID は、一貫性のために、`ll-CC` の形式に正規化されなければなりません。
ここで `ll` は [ISO-639](http://www.loc.gov/standards/iso639-2/) に従った小文字二つまたは三つの言語コードであり、`CC` は [ISO-3166](http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html) に従った二文字の国コードです。
ロケールに関する更なる詳細は [ICU プロジェクトのドキュメント](http://userguide.icu-project.org/locale#TOC-The-Locale-Concept) に述べられています。
Yii アプリケーションで使用される全てのロケール ID は、一貫性のために、
`ll-CC` の形式に正規化されなければなりません。
ここで `ll` は [ISO-639](http://www.loc.gov/standards/iso639-2/) に従った小文字二つまたは三つの言語コードであり、
`CC` は [ISO-3166](http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html) に従った二文字の国コードです。
ロケールに関する更なる詳細は [ICU プロジェクトのドキュメント](http://userguide.icu-project.org/locale#TOC-The-Locale-Concept)
に述べられています。
### 言語
@ -30,7 +35,6 @@ Yii のアプリケーションでは二つの言語を使用します。すな
いわゆるメッセージ翻訳サービスは、主として、テキスト・メッセージをソース言語からターゲット言語に翻訳するものです。
### 構成
アプリケーションの言語は、アプリケーションの構成情報で次のように構成することが出来ます。
```php
@ -49,7 +53,8 @@ return [
このデフォルト値は変えないことが **推奨** されます。
なぜなら、通常は、英語から他の言語への翻訳者を見つける方が、非英語から非英語への翻訳者を見つけるより、はるかに簡単だからです。
[[yii\base\Application::$language|ターゲット言語]] は、エンド・ユーザの言語選択など、さまざまな要因に基づいて、動的に設定しなければならないことがよくあります。
[[yii\base\Application::$language|ターゲット言語]] は、エンド・ユーザの言語選択など、
さまざまな要因に基づいて、動的に設定しなければならないことがよくあります。
アプリケーションの構成情報で構成するかわりに、次の文を使ってターゲット言語を変更することが出来ます。
```php
@ -60,37 +65,34 @@ return [
> Tip: ソース言語がコードの部分によって異なる場合は、メッセージ・ソースごとにソース言語をオーバーライドすることが出来ます。
> これについては、次の説で説明します。
## メッセージ翻訳 <span id="message-translation"></span>
### ソース言語からターゲット言語へ
メッセージ翻訳サービスは、テキスト・メッセージをある言語 (通常は [[yii\base\Application::$sourceLanguage|ソース言語]]) から別の言語 (通常は [[yii\base\Application::$language|ターゲット言語]]) に翻訳するものです。
メッセージ翻訳サービスは、テキスト・メッセージをある言語 (通常は [[yii\base\Application::$sourceLanguage|ソース言語]])
から別の言語 (通常は [[yii\base\Application::$language|ターゲット言語]]) に翻訳するものです。
翻訳は、元のメッセージと翻訳されたメッセージを格納するメッセージ・ソースの中から、翻訳対象となったメッセージを探すことにより行われます。
メッセージが見つかれば、対応する翻訳されたメッセージが返されます。
メッセージが見つからなければ、元のメッセージが翻訳されずに返されます。
メッセージが見つかれば、対応する翻訳されたメッセージが返されます。メッセージが見つからなければ、元のメッセージが翻訳されずに返されます。
### 実装の仕方
メッセージ翻訳サービスを使用するためには、主として次の作業をする必要があります。
1. 翻訳する必要のある全てのテキスト・メッセージを [[Yii::t()]] メソッドの呼び出しの中に包む。
2. メッセージ翻訳サービスが翻訳されたメッセージを探すことが出来る一つまたは複数のメッセージ・ソースを構成する。
3. 翻訳者にメッセージを翻訳させて、それをメッセージ・ソースに格納する。
#### 1. テキスト・メッセージを包む
#### 1. テキスト・メッセージを包む
[[Yii::t()]] メソッドは次のように使います。
```php
echo \Yii::t('app', 'This is a string to translate!');
```
ここで、二番目のパラメータが翻訳されるべきテキスト・メッセージを示し、最初のパラメータはメッセージを分類するのに使用されるカテゴリ名を示します。
ここで、二番目のパラメータが翻訳されるべきテキスト・メッセージを示し、
最初のパラメータはメッセージを分類するのに使用されるカテゴリ名を示します。
#### 2. 一つまたは複数のメッセージ・ソースを構成する
[[Yii::t()]] メソッドは `i18n` [アプリケーション・コンポーネント](structure-application-components.md) の `translate` メソッドを呼んで実際の翻訳作業を実行します。
このコンポーネントはアプリケーションの構成情報の中で次のようにして構成することが出来ます。
@ -117,7 +119,8 @@ echo \Yii::t('app', 'This is a string to translate!');
##### シンボル `*` によるカテゴリのワイルドカード
`app*` は、`app` で始まる全てのメッセージ・カテゴリがこのメッセージ・ソースを使って翻訳されるべきであることを示しています。
`app*` は、`app` で始まる全てのメッセージ・カテゴリが
このメッセージ・ソースを使って翻訳されるべきであることを示しています。
#### 3. 翻訳者にメッセージを翻訳させて、それをメッセージ・ソースに格納する
@ -128,8 +131,7 @@ echo \Yii::t('app', 'This is a string to translate!');
> このセクションで後で紹介します。
PHP ファイルは、それぞれ、一つのカテゴリのメッセージに対応します。
デフォルトでは、ファイル名はカテゴリ名と同じでなければなりません。
`app/messages/nl-NL/main.ph` の例を示します。
デフォルトでは、ファイル名はカテゴリ名と同じでなければなりません。`app/messages/nl-NL/main.ph` の例を示します。
```php
<?php
@ -143,16 +145,19 @@ return [
```
##### ファイルのマッピング
ただし、[[yii\i18n\PhpMessageSource::fileMap|fileMap]] を構成して、別の命名方法によってカテゴリを PHP ファイルにマップすることも可能です。
上記の例では、(`ja-JP` がターゲット言語であると仮定すると) `app/error` のカテゴリは `@app/messages/ja-JP/error.php` という PHP ファイルにマップされます。
上記の例では、(`ja-JP` がターゲット言語であると仮定すると) `app/error` のカテゴリは
`@app/messages/ja-JP/error.php` という PHP ファイルにマップされます。
`fileMap` を構成しなければ、このカテゴリは `@app/messages/ja-JP/app/error.php` にマップされることになります。
##### 他のストレージ・タイプ
翻訳メッセージを格納するのには、PHP ファイル以外に、次のメッセージ・ソースを使うことも可能です。
翻訳メッセージを格納するのには、PHP ファイル以外に、
次のメッセージ・ソースを使うことも可能です。
- [[yii\i18n\GettextMessageSource]] - 翻訳メッセージを保持するのに GNU Gettext の MO ファイルまたは PO ファイルを使用する
- [[yii\i18n\DbMessageSource]] - 翻訳メッセージを保存するのにデータベース・テーブルを使用する
@ -168,7 +173,8 @@ return [
### メッセージ・パラメータ <span id="message-parameters"></span>
翻訳対象となるメッセージには、一つまたは複数のパラメータ (プレースホルダとも呼びます) を埋め込んで、与えられたパラメータ値で置き換えられるようにすることが出来ます。
翻訳対象となるメッセージには、一つまたは複数のパラメータ (プレースホルダとも呼びます) を埋め込んで、
与えられたパラメータ値で置き換えられるようにすることが出来ます。
様々なパラメータ値のセットを与えることによって、翻訳されるメッセージを動的に変化させることが出来ます。
次の例では、`'Hello, {username}!'` というメッセージの中のプレースホルダ `{username}``'Alexander'``'Qiang'` にそれぞれ置き換えられます。
@ -193,11 +199,11 @@ echo \Yii::t('app', 'Hello, {username}!', [
// 日本語翻訳: '{username} さん、こんにちは!'
```
プレースホルダには、*名前付きプレースホルダ* と *序数プレースホルダ* のどちらかを使用する事が出来ます。
ただし、一つのメッセージに両方を使うことは出来ません。
プレースホルダには、*名前付きプレースホルダ* と *序数プレースホルダ* のどちらかを使用する事が出来ます。ただし、一つのメッセージに両方を使うことは出来ません。
上記の例は名前付きプレースホルダの使い方を示すものです。
すなわち、各プレースホルダは `{name}` という形式で書かれていますが、それに対して、キーが(波括弧なしの)プレースホルダ名であり、値がそのプレースホルダを置き換える値である連想配列を渡す訳です。
すなわち、各プレースホルダは `{name}` という形式で書かれていますが、それに対して、キーが(波括弧なしの)プレースホルダ名であり、
値がそのプレースホルダを置き換える値である連想配列を渡す訳です。
序数プレースホルダは、0 ベースの整数の序数をプレースホルダ名として使います。
このプレースホルダは、`Yii::t()` の呼び出しに出現する順序に従って、パラメータ値によって置き換えられます。
@ -226,7 +232,8 @@ echo \Yii::t('app', 'Price: {0}', $price);
### パラメータのフォーマット <span id="parameter-formatting"></span>
メッセージのプレースホルダにフォーマットの規則を追加して指定し、パラメータ値がプレースホルダを置き換える前に適切にフォーマットされるようにすることが出来ます。
メッセージのプレースホルダにフォーマットの規則を追加して指定し、
パラメータ値がプレースホルダを置き換える前に適切にフォーマットされるようにすることが出来ます。
次の例では、`price` のパラメータ値の型は数値として扱われ、通貨の形式でフォーマットされます。
```php
@ -249,9 +256,8 @@ echo \Yii::t('app', 'Price: {0,number,currency}', $price);
echo Yii::t('app', "Example of string with ''-escaped characters'': '{' '}' '{test}' {count,plural,other{''count'' value is # '#{}'}}", ['count' => 3]);
+```
このようなプレースホルダを指定する方法についての完全な説明は、[ICU ドキュメント](http://icu-project.org/apiref/icu4c/classMessageFormat.html) を参照してください。
このようなプレースホルダを指定する方法についての完全な説明は、[ICU ドキュメント](http://icu-project.org/apiref/icu4c/classMessageFormat.html)を参照してください。以下では、よくある使用方法をいくつか示します
以下では、よくある使用方法をいくつか示します。
#### 数値 <span id="number"></span>
@ -283,7 +289,9 @@ echo \Yii::t('app', 'Balance: {0,number,,000,000000}', $sum);
// 日本語出力: '差引残高: 000,012345'
```
カスタムフォーマットで使用される文字については、[ICU API リファレンス](http://icu-project.org/apiref/icu4c/classicu_1_1DecimalFormat.html) の "Special Pattern Characters" のセクションに記述されています。
カスタムフォーマットで使用される文字については、
[ICU API リファレンス](http://icu-project.org/apiref/icu4c/classicu_1_1DecimalFormat.html) の "Special Pattern Characters"
のセクションに記述されています。
数値は常に翻訳先のロケールに従ってフォーマットされます。
つまり、ロケールを変更せずに、小数点や桁区切りを変更することは出来ません。
@ -376,7 +384,8 @@ echo \Yii::t('app', 'I am {n,spellout,%spellout-ordinal} agent', ['n' => 47]);
'spellout,' と '%' の間に空白を入れてはならないことに注意してください。
あなたが使用しているロケールで利用可能なオプションのリストについては、[http://intl.rmcreative.ru/](http://intl.rmcreative.ru/) の "Numbering schemas, Spellout" を参照してください。
あなたが使用しているロケールで利用可能なオプションのリストについては、
[http://intl.rmcreative.ru/](http://intl.rmcreative.ru/) の "Numbering schemas, Spellout" を参照してください。
#### 序数 <span id="ordinal"></span>
@ -397,7 +406,8 @@ echo \Yii::t('app', '{n,ordinal,%digits-ordinal-feminine}', ['n' => 471]);
'ordinal,' と '%' の間に空白を入れてはならないことに注意してください。
あなたが使用しているロケールで利用可能なオプションのリストについては、[http://intl.rmcreative.ru/](http://intl.rmcreative.ru/) の "Numbering schemas, Ordinal" を参照してください。
あなたが使用しているロケールで利用可能なオプションのリストについては、
[http://intl.rmcreative.ru/](http://intl.rmcreative.ru/) の "Numbering schemas, Ordinal" を参照してください。
> Note: 上記のソース・メッセージを、プレースホルダのスタイルを守って日本語に翻訳すると、'あなたはこのサイトの{n,ordinal}の訪問者です' となります。
> しかし、その出力結果は、'あなたはこのサイトの第42の訪問者です' となり、意味は通じますが、日本語としては若干不自然なものになります。
@ -424,7 +434,8 @@ echo \Yii::t('app', '{n,duration,%in-numerals}', ['n' => 471227]);
'duration,' と '%' の間に空白を入れてはならないことに注意してください。
あなたが使用しているロケールで利用可能なオプションのリストについては、[http://intl.rmcreative.ru/](http://intl.rmcreative.ru/) の "Numbering schemas, Duration" を参照してください。
あなたが使用しているロケールで利用可能なオプションのリストについては、
[http://intl.rmcreative.ru/](http://intl.rmcreative.ru/) の "Numbering schemas, Duration" を参照してください。
> Note: このソース・メッセージを 'あなたはこのサイトに既に{n,duration}の間滞在しています' と翻訳した場合の出力結果は、'あなたはこのサイトに既に47の間滞在しています' となります。
> これも、プレースホルダのスタイルも含めて全体を翻訳し直す方が良いでしょう。
@ -433,8 +444,7 @@ echo \Yii::t('app', '{n,duration,%in-numerals}', ['n' => 471227]);
#### 複数形 <span id="plural"></span>
言語によって、複数形の語形変化はさまざまに異なります。
Yii は、さまざまな形式の複数形語形変化に対応したメッセージ翻訳のための便利な方法を提供しています。
言語によって、複数形の語形変化はさまざまに異なります。Yii は、さまざまな形式の複数形語形変化に対応したメッセージ翻訳のための便利な方法を提供しています。
それは、非常に複雑な規則に対しても、十分に機能するものです。
語形変化の規則を直接に処理する代りに、特定の状況における語形変化した言葉の翻訳を提供するだけで十分です。
@ -445,10 +455,8 @@ Yii は、さまざまな形式の複数形語形変化に対応したメッセ
echo \Yii::t('app', 'There {n,plural,=0{are no cats} =1{is one cat} other{are # cats}}!', ['n' => $n]);
```
上記の複数形規則の引数において、`=` はぴったりその値であることを意味します。
従って、`=0` はぴったりゼロ、`=1` はぴったり 1 を表します。
`other` はそれ以外の数を表します。
`#` は ターゲット言語に従ってフォーマットされた `n` の値によって置き換えられます。
上記の複数形規則の引数において、`=` はぴったりその値であることを意味します。従って、`=0` はぴったりゼロ、`=1` はぴったり 1 を表します。
`other` はそれ以外の数を表します。`#` は ターゲット言語に従ってフォーマットされた `n` の値によって置き換えられます。
複数形の規則が非常に複雑な言語もあります。
例えば、次のロシア語の例では、`=1` が `n = 1` にぴったりと一致するのに対して、`one` が `21``101` などに一致します。
@ -461,11 +469,11 @@ echo \Yii::t('app', 'There {n,plural,=0{are no cats} =1{is one cat} other{are #
特定のロケールに対してどんな引数を指定すべきかを学ぶためには、[http://intl.rmcreative.ru/](http://intl.rmcreative.ru/) の "Plural Rules, Cardinal" を参照してください。
あるいは、その代りに、[unicode.org の規則のリファレンス](http://cldr.unicode.org/index/cldr-spec/plural-rules) を参照することも出来ます。
> Note: 上記のロシア語のメッセージのサンプルは、主として翻訳メッセージとして使用されるものです。
> アプリケーションの [[yii\base\Application::$sourceLanguage|ソース言語]] を `ru-RU` にしてロシア語から他の言語に翻訳するという設定にしない限り、オリジナルのメッセージとしては使用されることはありません。
>
> `Yii::t()` の呼び出しにおいて、オリジナルのメッセージに対する翻訳が見つからない場合は、[[yii\base\Application::$sourceLanguage|ソース言語]] の複数形規則がオリジナルのメッセージに対して適用されます。
> `Yii::t()` の呼び出しにおいて、オリジナルのメッセージに対する翻訳が見つからない場合は、
> [[yii\base\Application::$sourceLanguage|ソース言語]] の複数形規則がオリジナルのメッセージに対して適用されます。
文字列が以下のようなものである場合のために `offset` というパラメータがあります。
@ -662,8 +670,7 @@ class Menu extends Widget
### フレームワーク・メッセージを翻訳する <span id="framework-translation"></span>
Yii には、検証エラーとその他いくつかの文字列に対するデフォルトの翻訳メッセージが付属しています。
これらのメッセージは、全て 'yii' というカテゴリの中にあります。
Yii には、検証エラーとその他いくつかの文字列に対するデフォルトの翻訳メッセージが付属しています。これらのメッセージは、全て 'yii' というカテゴリの中にあります。
場合によっては、あなたのアプリケーションのために、デフォルトのフレームワーク・メッセージの翻訳を修正したいことがあるでしょう。
そうするためには、`i18n` [アプリケーション・コンポーネント](structure-application-components.md) を以下のように構成してください。
@ -684,8 +691,7 @@ Yii には、検証エラーとその他いくつかの文字列に対するデ
### 欠落している翻訳の処理 <span id="missing-translations"></span>
ソースに翻訳が欠落している場合でも、Yii はリクエストされたメッセージの内容を表示します。
この振舞いは、原文のメッセージが正当かつ詳細なテキストである場合には、非常に好都合です。
しかし、場合によっては、それだけでは十分ではありません。
この振舞いは、原文のメッセージが正当かつ詳細なテキストである場合には、非常に好都合です。しかし、場合によっては、それだけでは十分ではありません。
リクエストされた翻訳がソースに欠落しているときに、何らかの特別な処理を実行する必要がある場合もあります。
そういう処理は、[[yii\i18n\MessageSource]] の [[yii\i18n\MessageSource::EVENT_MISSING_TRANSLATION|missingTranslation]] イベントを使うことによって達成できます。
@ -735,8 +741,7 @@ class TranslationEventHandler
### `message` コマンドを使う <a name="message-command"></a>
翻訳は [[yii\i18n\PhpMessageSource|php ファイル]]、[[yii\i18n\GettextMessageSource|.po ファイル]]、または [[yii\i18n\DbMessageSource|database]] に保存することが出来ます。
追加のオプションについてはそれぞれのクラスを参照してください。
翻訳は [[yii\i18n\PhpMessageSource|php ファイル]]、[[yii\i18n\GettextMessageSource|.po ファイル]]、または [[yii\i18n\DbMessageSource|database]] に保存することが出来ます。追加のオプションについてはそれぞれのクラスを参照してください。
まず最初に、構成情報ファイルを作成する必要があります。
どこに保存したいかを決めて、次のコマンドを発行してください。
@ -745,12 +750,10 @@ class TranslationEventHandler
./yii message/config-template path/to/config.php
```
作成されたファイルを開いて、あなたの要求に合わせてパラメータを修正します。
特に、下記の項目に注意を払ってください。
作成されたファイルを開いて、あなたの要求に合わせてパラメータを修正します。特に、下記の項目に注意を払ってください。
* `languages`: あなたのアプリケーションが翻訳されるべき言語を表す配列。
* `messagePath`: メッセージファイルを保存するパス。
これは、アプリケーションの構成情報で記述されている `i18n``basePath` と合致しなければなりません。
* `messagePath`: メッセージファイルを保存するパス。これは、アプリケーションの構成情報で記述されている `i18n``basePath` と合致しなければなりません。
'./yii message/config' コマンドを使って、CLI 経由で、指定したオプションを持つ設定ファイルを動的に生成することも可能です。
例えば、`languages` と `messagePath` のパラメータは、次のようにして設定することが出来ます。
@ -771,6 +774,8 @@ class TranslationEventHandler
./yii message path/to/config.php
```
また、オプションを指定して、抽出のパラメータを動的に変更することも出来ます。
これで、(あなたがファイル・ベースの翻訳を選択していた場合は) `messagePath` ディレクトリにファイルが出現します。
@ -779,9 +784,12 @@ class TranslationEventHandler
個々のテキスト・メッセージを翻訳する代りに、ビュー・スクリプト全体を翻訳したい場合があるでしょう。
この目的を達するためには、ビューを翻訳して、ターゲット言語と同じ名前のサブ・ディレクトリに保存するだけで大丈夫です。
例えば、`views/site/index.php` というビューをターゲット言語 `ru-RU` に翻訳したい場合は、翻訳したビューを `views/site/ru-RU/index.php` というファイルとして保存します。
このようにすると、[[yii\base\View::renderFile()]] メソッド、または、このメソッドを呼び出す他のメソッド (例えば [[yii\base\Controller::render()]]) を呼んで `views/site/index.php` をレンダリングするたびに、翻訳された `views/site/ru-RU/index.php` が代りにレンダリングされるようになります。
このようにすると、[[yii\base\View::renderFile()]] メソッド、または、このメソッドを呼び出す他のメソッド
(例えば [[yii\base\Controller::render()]]) を呼んで `views/site/index.php` をレンダリングするたびに、
翻訳された `views/site/ru-RU/index.php` が代りにレンダリングされるようになります。
> Note: [[yii\base\Application::$language|ターゲット言語]] が [[yii\base\Application::$sourceLanguage|ソース言語]] と同じ場合は、翻訳されたビューの有無にかかわらず、オリジナルのビューがレンダリングされます。
> Note: [[yii\base\Application::$language|ターゲット言語]] が [[yii\base\Application::$sourceLanguage|ソース言語]] と同じ場合は、
> 翻訳されたビューの有無にかかわらず、オリジナルのビューがレンダリングされます。
## 数値と日付の値を書式設定する <span id="date-number"></span>
@ -789,6 +797,11 @@ class TranslationEventHandler
詳細は [データ・フォーマッタ](output-formatting.md) のセクションを参照してください。
## 日付と数値をフォーマットする <span id="date-number"></span>
詳細は [データのフォーマット](output-formatting.md) のセクションを参照して下さい。
## PHP 環境をセットアップする <span id="setup-environment"></span>
Yii は、[[yii\i18n\Formatter]] クラスの数値や日付の書式設定や、[[yii\i18n\MessageFormatter]] を使うメッセージのフォーマッティングなど、ほとんどの国際化機能を提供するために [PHP intl 拡張](http://php.net/manual/ja/book.intl.php) を使います。
@ -796,12 +809,13 @@ Yii は、[[yii\i18n\Formatter]] クラスの数値や日付の書式設定や
だだし、このフォールバックの実装は、英語がターゲット言語である場合にのみ十分に機能するものす。
従って、国際化機能が必要とされる場合は、`intl` をインストールすることが強く推奨されます。
[PHP intl 拡張](http://php.net/manual/ja/book.intl.php) は、さまざまに異なる全てのロケールについて知識と書式の規則を提供する [ICU ライブラリ](http://site.icu-project.org/) に基礎を置いています。
[PHP intl 拡張](http://php.net/manual/ja/book.intl.php) は、さまざまに異なる全てのロケールについて知識と書式の規則を提供する
[ICU ライブラリ](http://site.icu-project.org/) に基礎を置いています。
ICU のバージョンが異なると、日付や数値のフォーマットの結果も異なる場合があります。
あなたのウェブ・サイトが全ての環境で同じ出力をすることを保証するためには、全ての環境において同じバージョンの PHP intl 拡張 (従って同じバージョンの ICU) をインストールすることが推奨されます。
あなたのウェブ・サイトが全ての環境で同じ出力をすることを保証するためには、
全ての環境において同じバージョンの PHP intl 拡張 (従って同じバージョンの ICU) をインストールすることが推奨されます。
どのバージョンの ICU が PHP によって使われているかを知るために、次のスクリプトを走らせることが出来ます。
このスクリプトは、使用されている PHP と ICU のバージョンを出力します。
どのバージョンの ICU が PHP によって使われているかを知るために、次のスクリプトを走らせることが出来ます。このスクリプトは、使用されている PHP と ICU のバージョンを出力します。
```php
<?php
@ -810,12 +824,10 @@ echo "ICU: " . INTL_ICU_VERSION . "\n";
echo "ICU Data: " . INTL_ICU_DATA_VERSION . "\n";
```
さらに、バージョン 49 以上の ICU を使用する事も推奨されます。
そうすることによって、このドキュメントで説明されている全ての機能を使うことが出来るようになります。
さらに、バージョン 49 以上の ICU を使用する事も推奨されます。そうすることによって、このドキュメントで説明されている全ての機能を使うことが出来るようになります。
例えば、49 未満の ICU は、複数形規則における `#` プレースホルダをサポートしていません。
入手できる ICU バージョン については、<http://site.icu-project.org/download> を参照してください。
バージョン番号の採番方式が 4.8 リリースの後に変更されたことに注意してください
(すなわち、ICU 4.8、ICU 49、ICU 50、等々となっています)。
バージョン番号の採番方式が 4.8 リリースの後に変更されたことに注意してください (すなわち、ICU 4.8、ICU 49、ICU 50、等々となっています)。
これに加えて、ICU ライブラリとともに出荷されるタイム・ゾーン・データベースの情報も古くなっている可能性があります。
タイム・ゾーン・データベースの更新に関する詳細は [ICU マニュアル](http://userguide.icu-project.org/datetime/timezone#TOC-Updating-the-Time-Zone-Data) を参照してください。

9
docs/guide-ja/tutorial-mailing.md

@ -131,8 +131,7 @@ Yii::$app->mailer->compose([
ビュー名をスカラーの文字列として渡した場合は、そのレンダリング結果は HTML ボディとして使われます。
そして、平文テキストのボディは HTML のボディから全ての HTML 要素を削除することによって作成されます。
ビューのレンダリング結果はレイアウトで包むことが出来ます。
レイアウトは、[[yii\mail\BaseMailer::htmlLayout]] と [[yii\mail\BaseMailer::textLayout]] を使ってセットアップすることが可能です。
ビューのレンダリング結果はレイアウトで包むことが出来ます。レイアウトは、[[yii\mail\BaseMailer::htmlLayout]] と [[yii\mail\BaseMailer::textLayout]] を使ってセットアップすることが可能です。
レイアウトは、通常のウェブ・アプリケーションのレイアウトと同じように働きます。
レイアウトは、メールの CSS スタイルや、その他の共有されるコンテントをセットアップするために使うことが出来ます。
@ -216,7 +215,8 @@ Yii は、そのようなチェックが出来ることを `yii\mail\BaseMailer:
メール・メッセージのファイルは通常のテキストエディタで開くことが出来ますので、実際のメッセージ・ヘッダやコンテントなどを閲覧することが出来ます。
このメカニズムは、アプリケーションのデバッグや単体テストを実行する際に、真価を発揮するでしょう。
> Note: メール・メッセージのファイルの内容は `\yii\mail\MessageInterface::toString()` によって作成されますので、あなたのアプリケーションで使用している実際のメール・エクステンションに依存したものになります。
> Note: メール・メッセージのファイルの内容は `\yii\mail\MessageInterface::toString()` によって作成されますので、
あなたのアプリケーションで使用している実際のメール・エクステンションに依存したものになります。
あなた自身のメール・ソリューションを作成する
@ -225,7 +225,6 @@ Yii は、そのようなチェックが出来ることを `yii\mail\BaseMailer:
あなた自身のカスタム・メール・ソリューションを作成するためには、二つのクラスを作成する必要があります。
すなわち、一つは `Mailer` であり、もう一つは `Message` です。
`yii\mail\BaseMailer``yii\mail\BaseMessage` をあなたのソリューションの基底クラスとして使うことが出来ます。
これらのクラスが、このガイドで説明された基本的なロジックを既に持っています。
しかし、それを使用することは強制されていません。
これらのクラスが、このガイドで説明された基本的なロジックを既に持っています。しかし、それを使用することは強制されていません。
`yii\mail\MailerInterface``yii\mail\MessageInterface` のインタフェイスを実装すれば十分です。
そして、あなたのソリューションをビルドするために、全ての抽象メソッドを実装しなければなりません。

56
docs/guide-ja/tutorial-performance-tuning.md

@ -2,28 +2,29 @@
============================
あなたのウェブ・アプリケーションのパフォーマンスに影響を及ぼす要因は数多くあります。
環境の要因もありますし、あなたのコードに関係する要因もあります。
また、Yii そのものに関係する要因もあります。
環境の要因もありますし、あなたのコードに関係する要因もあります。また、Yii そのものに関係する要因もあります。
このセクションでは要因のほとんどを列挙して、どのようにそれらを修正すればあなたのアプリケーションのパフォーマンスを向上させることが出来るかを説明します。
## PHP 環境を最適化する <span id="optimizing-php"></span>
PHP 環境を正しく構成することは非常に重要です。
最大のパフォーマンスを得るためには、
PHP 環境を正しく構成することは非常に重要です。最大のパフォーマンスを得るためには、
- 最新の安定した PHP バージョンを使うこと。
使用する PHP のメジャー・リリースを上げると、顕著なパフォーマンスの改善がもたらされることがあります。
- [Opcache](http://php.net/opcache) (PHP 5.5 以降) または [APC](http://php.net/apc) (PHP 5.4) を使って、バイト・コード・キャッシュを有効にすること。
- 最新の安定した PHP バージョンを使うこと。使用する PHP のメジャー・リリースを上げると、顕著なパフォーマンスの改善がもたらされることがあります。
- [Opcache](http://php.net/opcache) (PHP 5.5 以降) または [APC](http://php.net/apc) (PHP 5.4) を使って、
バイト・コード・キャッシュを有効にすること。
バイト・コード・キャッシュによって、リクエストが入ってくるたびに PHP スクリプトを解析してインクルードする時間の浪費を避けることが出来ます。
- [`realpath()` キャッシュをチューニングする](https://github.com/samdark/realpath_cache_tuner).
## デバッグ・モードを無効にする <span id="disable-debug"></span>
本番環境でアプリケーションを実行するときには、デバッグ・モードを無効にしなければなりません。
Yii は、`YII_DEBUG` という名前の定数の値を使って、デバッグ・モードを有効にすべきか否かを示します。
デバッグ・モードが有効になっているときは、Yii はデバッグ情報の生成と記録のために時間を余計に費やします。
[エントリ・スクリプト](structure-entry-scripts.md) の冒頭に次のコード行を置くことによってデバッグ・モードを無効にすることが出来ます。
[エントリ・スクリプト](structure-entry-scripts.md) の冒頭に次のコード行を置くことによってデ
バッグ・モードを無効にすることが出来ます。
```php
defined('YII_DEBUG') or define('YII_DEBUG', false);
@ -32,6 +33,7 @@ defined('YII_DEBUG') or define('YII_DEBUG', false);
> Info: `YII_DEBUG` のデフォルト値は `false` です。
従って、アプリケーション・コードの他のどこかでこのデフォルト値を変更していないと確信できるなら、単に上記の行を削除してデバッグ・モードを無効にしても構いません。
## キャッシュのテクニックを使う <span id="using-caching"></span>
さまざまなキャッシュのテクニックを使うと、あなたのアプリケーションのパフォーマンスを目に見えて改善することが出来ます。
@ -39,14 +41,17 @@ defined('YII_DEBUG') or define('YII_DEBUG', false);
そうすれば、リクエストごとに毎回同じ Markdown テキストの解析を繰り返すことを回避できるでしょう。
Yii によって提供されているキャッシュのサポートについて学ぶためには [キャッシュ](caching-overview.md) のセクションを参照してください。
## スキーマ・キャッシュを有効にする <span id="enable-schema-caching"></span>
スキーマ・キャッシュは、[アクティブ・レコード](db-active-record.md) を使おうとする場合には、いつでも有効にすべき特別なキャッシュ機能です。
ご存じのように、アクティブ・レコードは、賢いことに、あなたがわざわざ記述しなくても、DB テーブルに関するスキーマ情報 (カラムの名前、カラムのタイプ、外部キー制約など) を自動的に検出します。
ご存じのように、アクティブ・レコードは、賢いことに、あなたがわざわざ記述しなくても、
DB テーブルに関するスキーマ情報 (カラムの名前、カラムのタイプ、外部キー制約など) を自動的に検出します。
アクティブ・レコードはこの情報を取得するために追加の SQL クエリを実行しています。
スキーマ・キャッシュを有効にすると、取得されたスキーマ情報はキャッシュに保存されて将来のクエリで再利用されるようになります。
スキーマ・キャッシュを有効にするためには、[アプリケーションの構成情報](concept-configurations.md) の中で、`cache` [アプリケーション・コンポーネント](structure-application-components.md) にスキーマ情報を保存するように構成し、[[yii\db\Connection::enableSchemaCache]] を `true` に設定します。
スキーマ・キャッシュを有効にするためには、[アプリケーションの構成情報](concept-configurations.md) の中で、
`cache` [アプリケーション・コンポーネント](structure-application-components.md) にスキーマ情報を保存するように構成し、[[yii\db\Connection::enableSchemaCache]] を `true` に設定します。
```php
return [
@ -73,6 +78,7 @@ return [
];
```
## アセットを結合して最小化する <span id="optimizing-assets"></span>
複雑なウェブ・ページでは、多数の CSS や JavaScript のアセット・ファイルをインクルードすることがよくあります。
@ -80,6 +86,7 @@ HTTP リクエストの回数、および、これらのアセットの全体と
これによって、ページのロードにかかる時間とサーバの負荷を大きく削減することが出来ます。
詳細については、[アセット](structure-assets.md) のセクションを参照してください。
## セッションのストレージを最適化する <span id="optimizing-session"></span>
デフォルトでは、セッションのデータはファイルに保存されます。
@ -101,8 +108,7 @@ return [
// 以下を設定する
// 'db' => 'mydb',
// デフォルトの session テーブルをオーバーライドするためには
// 以下を設定する
// デフォルトの session テーブルをオーバーライドするためには以下を設定する
// 'sessionTable' => 'my_session',
],
],
@ -126,26 +132,32 @@ CREATE TABLE session (
ただし、キャッシュ・ストレージの中には、容量の上限に達したときにキャッシュされたデータをフラッシュするものがあることに注意してください。
この理由により、主として容量の上限が無い種類のキャッシュ・ストレージを使用すべきです。
あなたのサーバに [Redis](http://redis.io/) がある場合は、[[yii\redis\Session]] によって redis をセッション・ストレージとして使用することを強く推奨します。
あなたのサーバに [Redis](http://redis.io/) がある場合は、[[yii\redis\Session]] によって redis
をセッション・ストレージとして使用することを強く推奨します。
## データベースを最適化する <span id="optimizing-databases"></span>
DB クエリの実行とデータベースからのデータ取得がウェブ・アプリケーションのパフォーマンスの主たるボトルネックになることがよくあります。
[データ・キャッシュ](caching-data.md) の使用によってパフォーマンスの劣化を緩和することは出来ますが、問題を完全に解決することは出来ません。
データベースが膨大なデータを抱えている場合、キャッシュされたデータが無効化されたときに最新のデータを取得するためのコストは、データベースとクエリが適切に設計されていないと、法外なものになり得ます。
データベースが膨大なデータを抱えている場合、キャッシュされたデータが無効化されたときに最新のデータを取得するためのコストは、
データベースとクエリが適切に設計されていないと、法外なものになり得ます。
DB クエリのパフォーマンスを向上させるための一般的なテクニックは、フィルタの対象になるテーブル・カラムにインデックスを作成することです。
例えば、`username` によってユーザのレコードを検索する必要があるなら、`username` に対してインデックスを作成するべきです。
ただし、インデックスを付けると SELECT クエリを非常に速くすることが出来る代りに、INSERT、UPDATE、または DELTE のクエリが遅くなることに注意してください。
複雑な DB クエリについては、クエリの解析と準備の時間を節約するために、データベース・ビューを作成することが推奨されます。
最後にもう一つ大事なことですが、SELECT クエリで LIMIT を使ってください。
こうすることで、大量のデータが返されて、PHP のために確保されたメモリを使い尽くすということがなくなります。
## プレーンな配列を使う <span id="using-arrays"></span>
[アクティブ・レコード](db-active-record.md) は非常に使い勝手のよいものですが、データベースから大量のデータを取得する必要がある場合は、プレーンな配列を使うほどには効率的ではありません。
そういう場合は、アクティブ・レコードを使ってデータを取得する際に `asArray()` を呼んで、取得したデータがかさばるアクティブ・レコードのオブジェクトではなく配列として表現されるようにすることを考慮するのが良いでしょう。
そういう場合は、アクティブ・レコードを使ってデータを取得する際に `asArray()` を呼んで、
取得したデータがかさばるアクティブ・レコードのオブジェクトではなく配列として表現されるようにすることを考慮するのが良いでしょう。
例えば、
```php
@ -160,8 +172,7 @@ class PostController extends Controller
}
```
上記において、`$posts` は、テーブル行の配列としてデータを代入されることになります。
各行はプレーンな配列になります。
上記において、`$posts` は、テーブル行の配列としてデータを代入されることになります。各行はプレーンな配列になります。
`$i` 番目の行の `title` カラムにアクセスするためには、`$posts[$i]['title']` という式を使うことが出来ます。
クエリを構築するのに [DAO](db-dao.md) を使って、データをプレーンな配列に取得することも出来ます。
@ -169,7 +180,8 @@ class PostController extends Controller
## Composer オートローダを最適化する <span id="optimizing-autoloader"></span>
Composer のオートローダは、ほとんどのサードパーティのクラス・ファイルをインクルードするのに使われますので、次のコマンドを実行して Composer のオートローダを最適化することを考慮すべきです。
Composer のオートローダは、ほとんどのサードパーティのクラス・ファイルをインクルードするのに使われますので、
次のコマンドを実行して Composer のオートローダを最適化することを考慮すべきです。
```
composer dumpautoload -o
@ -183,10 +195,10 @@ composer dumpautoload -o
## オフラインでデータを処理する <span id="processing-data-offline"></span>
リクエストが何らかのリソース集約的な操作を必要とするものである場合は、そういう操作が終るまでユーザを待たせずに、オフラインモードで操作を実行する方策を考えるべきです。
リクエストが何らかのリソース集約的な操作を必要とするものである場合は、そういう操作が終るまでユーザを待たせずに、
オフラインモードで操作を実行する方策を考えるべきです。
オフラインでデータを処理するための方法が二つあります。
すなわち、プルとプッシュです。
オフラインでデータを処理するための方法が二つあります。すなわち、プルとプッシュです。
プルの方法では、リクエストが何らかの複雑な操作を必要とするたびに、タスクを作成してデータベースなどの持続的ストレージに保存します。
そうしておいて、別の独立したプロセス (例えばクロンジョブ) を使い、タスクを引き出して処理します。
@ -203,7 +215,7 @@ composer dumpautoload -o
あなたは、あなたのコードをプロファイルして、パフォーマンスのボトルネックを発見し、それに応じた適切な手段を講じるべきです。
次のプロファイリング・ツールが役に立つでしょう。
- [Yii のデバッグ・ツールバーとデバッガ](https://github.com/yiisoft/yii2-debug/blob/master/docs/guide-ja/README.md)
- [Yii のデバッグ・ツールバーとデバッガ](https://github.com/yiisoft/yii2-debug/blob/master/docs/guide-ja/README.md)
- [Blackfire](https://blackfire.io/)
- [XHProf](http://www.php.net/manual/ja/book.xhprof.php)
- [XDebug プロファイラ](http://xdebug.org/docs/profiler)

13
docs/guide-ja/tutorial-shared-hosting.md

@ -7,7 +7,8 @@
## ベーシック・プロジェクト・テンプレートを配備する
通例、共有ホスティング環境では、一つのウェブ・ルートしかありませんので、可能であればベーシック・プロジェクト・テンプレートを使用して下さい。
まず、[Yii をインストールする](start-installation.md) のセクションを参照して、プロジェクト・テンプレートをローカル環境にインストールします。
まず、[Yii をインストールする](start-installation.md) のセクションを参照して、
プロジェクト・テンプレートをローカル環境にインストールします。
そして、ローカル環境でアプリケーションが動くようにした後で、共有ホスティング環境でホスト出来るようにいくつかの修正を行います。
### ウェブ・ルートの名前を変える <span id="renaming-webroot"></span>
@ -34,7 +35,8 @@ www
### ウェブ・サーバのための追加設定 <span id="add-extras-for-webserver"></span>
使用されているウェブ・サーバが Apache である場合は、次の内容を持つ `.htaccess` ファイルを `web` (または `public_html` など、要するに、`index.php` があるディレクトリ) に追加する必要があります。
使用されているウェブ・サーバが Apache である場合は、次の内容を持つ `.htaccess` ファイルを `web`
(または `public_html` など、要するに、`index.php` があるディレクトリ) に追加する必要があります。
```
Options +FollowSymLinks
@ -54,12 +56,9 @@ nginx の場合は、追加の構成ファイルは必要がない筈です。
### 必要条件をチェックする
Yii を走らせるためには、あなたのウェブ・サーバは Yii の必要条件を満たさなければなりません。
最低限の必要条件は PHP 5.4 です。
Yii を走らせるためには、あなたのウェブ・サーバは Yii の必要条件を満たさなければなりません。最低限の必要条件は PHP 5.4 です。
必要条件をチェックするために、`requirements.php` をルート・ディレクトリからウェブ・ルート・ディレクトリにコピーして、
`http://example.com/requirements.php` という URL を使ってブラウザ経由で走らせます。
後でファイルを削除するのを忘れないでください。
`http://example.com/requirements.php` という URL を使ってブラウザ経由で走らせます。後でファイルを削除するのを忘れないでください。
## アドバンスト・プロジェクト・テンプレートを配備する

11
docs/guide-ja/tutorial-start-from-scratch.md

@ -3,7 +3,9 @@
> Note: このセクションはまだ執筆中です。
[ベーシック](https://github.com/yiisoft/yii2-app-basic) と [アドバンスト](https://github.com/yiisoft/yii2-app-advanced) のプロジェクト・テンプレートは、あなたの要求をほとんどカバーする優れたものですが、あなたのプロジェクトを開始するためのあなた自身のテンプレートを作成したいこともあるでしょう。
[ベーシック](https://github.com/yiisoft/yii2-app-basic) と [アドバンスト](https://github.com/yiisoft/yii2-app-advanced)
のプロジェクト・テンプレートは、あなたの要求をほとんどカバーする優れたものですが、
あなたのプロジェクトを開始するためのあなた自身のテンプレートを作成したいこともあるでしょう。
Yii におけるプロジェクト・テンプレートは、`composer.json` ファイルを含み、Composer パッケージとして登録されたレポジトリであるに過ぎません。
どのようなレポジトリでも、Composer パッケージとして特定し、`create-project` Composer コマンドによってインストール可能なものにすることが出来ます。
@ -30,7 +32,8 @@ git clone git@github.com:yiisoft/yii2-app-basic.git
`name`、`description`、`keywords`、`homepage`、`license` および `support` の値を、あなたの新しいテンプレートを説明するものに変更します。
また、`require`、`require-dev`、`suggest` や、その他のオプションも、あなたのテンプレートの要求に合うように調整します。
> Note: `composer.json` ファイルで、`extra` の下の `writable` パラメータを使って、アプリケーションがテンプレートを使って作成された後に設定されるべきファイル単位のアクセス権限を指定してください。
> Note: `composer.json` ファイルで、`extra` の下の `writable` パラメータを使って、
> アプリケーションがテンプレートを使って作成された後に設定されるべきファイル単位のアクセス権限を指定してください。
次に、あなたが好むデフォルトの状態に合うように、アプリケーションの構造と内容を実際に修正します。
最後に、あなたのテンプレートに適用できるように、README ファイルを更新します。
@ -42,8 +45,7 @@ git clone git@github.com:yiisoft/yii2-app-basic.git
あなたのテンプレートをオープンソース化するつもりなら、レポジトリをホストするのには [Github](http://github.com) が最適の場所です。
テンプレートを共同作業に使わないつもりであれば、どんな Git レポジトリサイトでも構いません。
次に、Composer のためにパッケージを登録する必要があります。
パブリックなテンプレートであれば、パッケージは [Packagist](https://packagist.org/) に登録すべきです。
次に、Composer のためにパッケージを登録する必要があります。パブリックなテンプレートであれば、パッケージは [Packagist](https://packagist.org/) に登録すべきです。
プライベートなテンプレートは、パッケージの登録が少々トリッキーです。
その説明については [Composer ドキュメント](https://getcomposer.org/doc/05-repositories.md#hosting-your-own) を参照してください。
@ -54,6 +56,5 @@ Yii の新しいプロジェクト・テンプレートを作成するのに必
これで、あなたのテンプレートを使ってプロジェクトを作成することが出来ます。
```
composer global require "fxp/composer-asset-plugin:^1.4.1"
composer create-project --prefer-dist --stability=dev mysoft/yii2-app-coolone new-project
```

11
docs/guide-ja/tutorial-template-engines.md

@ -1,7 +1,8 @@
テンプレートエンジンを使う
==========================
デフォルトでは、Yii は PHP をテンプレート言語として使いますが、[Twig](http://twig.sensiolabs.org/) や [Smarty](http://www.smarty.net/) などの他のレンダリング・エンジンをサポートするように Yii を構成することが出来ます。
デフォルトでは、Yii は PHP をテンプレート言語として使いますが、[Twig](http://twig.sensiolabs.org/) や
[Smarty](http://www.smarty.net/) などの他のレンダリング・エンジンをサポートするように Yii を構成することが出来ます。
`view` コンポーネントがビューのレンダリングに責任を持っています。
このコンポーネントのビヘイビアを構成することによって、カスタム・テンプレート・エンジンを追加することが出来ます。
@ -40,11 +41,9 @@
"yiisoft/yii2-smarty": "~2.0.0",
"yiisoft/yii2-twig": "~2.0.0",
```
上のコードを `composer.json``require` セクションに追加します。
変更をファイルに保存した後、コマンドラインで `composer update --prefer-dist` を実行することによってエクステンションをインストールすることが出来ます。
上のコードを `composer.json``require` セクションに追加します。変更をファイルに保存した後、コマンドラインで `composer update --prefer-dist` を実行することによってエクステンションをインストールすることが出来ます。
具体的にテンプレート・エンジンを使用する方法については、それぞれのドキュメントで詳細を参照してください。
- [Twig ガイド](https://github.com/yiisoft/yii2-twig/tree/master/docs/guide-ja)
- [Smarty ガイド](https://github.com/yiisoft/yii2-smarty/tree/master/docs/guide-ja)
- [Twig ガイド](https://www.yiiframework.com/extension/yiisoft/yii2-twig/doc/guide/)
- [Smarty ガイド](https://www.yiiframework.com/extension/yiisoft/yii2-smarty/doc/guide/)

26
docs/guide-ja/tutorial-yii-as-micro-framework.md

@ -1,24 +1,19 @@
# Yii をマイクロ・フレームワークとして使う
Yii はベーシック・テンプレートやアドバンスト・テンプレートに含まれる機能なしで使うことが簡単にできます。
言葉を換えれば、Yii は既にマイクロ・フレームワークです。
Yii を使うためにテンプレートによって提供されているディレクトリ構造を持つことは要求されていません。
Yii はベーシック・テンプレートやアドバンスト・テンプレートに含まれる機能なしで使うことが簡単にできます。言葉を換えれば、Yii は既にマイクロ・フレームワークです。Yii を使うためにテンプレートによって提供されているディレクトリ構造を持つことは要求されていません。
このことは、アセットやビューなどの事前定義されたテンプレート・コードを必要としない場合には、特に好都合です。
そのような場合の一つが JSON API です。以下に続くセクションで、どのようにしてそれを実現するかを示します。
このことは、アセットやビューなどの事前定義されたテンプレート・コードを必要としない場合には、特に好都合です。そのような場合の一つが JSON API です。以下に続くセクションで、どのようにしてそれを実現するかを示します。
## Yii をインストールする
プロジェクト・ファイルのためのディレクトリを作成し、ワーキング・ディレクトリをそのパスに変更します。
例で使用されているコマンドは UNIX ベースのものですが、同様のコマンドが Windows にもあります。
プロジェクト・ファイルのためのディレクトリを作成し、ワーキング・ディレクトリをそのパスに変更します。例で使用されているコマンドは UNIX ベースのものですが、同様のコマンドが Windows にもあります。
```bash
mkdir micro-app
cd micro-app
```
> Note: 続けるためには Composer についての知識が多少必要です。
Composer の使い方をまだ知らない場合は、時間を取って、[Composer Guide](https://getcomposer.org/doc/00-intro.md) を読んでください。
> Note: 続けるためには Composer についての知識が多少必要です。Composer の使い方をまだ知らない場合は、時間を取って、[Composer Guide](https://getcomposer.org/doc/00-intro.md) を読んでください。
`micro-app` ディレクトリの下に `composer.json` ファイルを作成し、あなたの好みのエディタを使って、下記を追加します。
@ -40,9 +35,7 @@ cd micro-app
## プロジェクトの構造を作成する
フレームワークをインストールしたら、次は、アプリケーションの [エントリ・ポイント](structure-entry-scripts.md) を作成します。
エントリ・ポイントは、アプリケーションを開こうとしたときに、一番最初に実行されるファイルです。
セキュリティ上の理由により、エントリ・ポイントを置くディレクトリは別にして、それをウェブ・ルートとします。
フレームワークをインストールしたら、次は、アプリケーションの [エントリ・ポイント](structure-entry-scripts.md) を作成します。エントリ・ポイントは、アプリケーションを開こうとしたときに、一番最初に実行されるファイルです。セキュリティ上の理由により、エントリ・ポイントを置くディレクトリは別にして、それをウェブ・ルートとします。
`web` ディレクトリを作成して、下記の内容を持つ `index.php` をそこに置きます。
@ -80,8 +73,7 @@ return [
> Info: 構成情報を `index.php` ファイルに持つことも出来ますが、別のファイルに持つことを推奨します。
> そうすれば、後で示しているように、同じ構成情報をコンソール・アプリケーションから使うことが出来ます。
これであなたのプロジェクトはコーディングの準備が出来ました。
プロジェクトのディレクトリ構造を決定するのは、名前空間に注意する限り、あなた次第です。
これであなたのプロジェクトはコーディングの準備が出来ました。プロジェクトのディレクトリ構造を決定するのは、名前空間に注意する限り、あなた次第です。
## 最初のコントローラを作成する
@ -120,7 +112,8 @@ micro-app/
```
まだウェブ・サーバをセットアップしていない場合は、[ウェブ・サーバの構成ファイル例](start-installation.md#configuring-web-servers) を参照すると良いでしょう。
もう一つのオプションは、PHP の内蔵ウェブ・サーバを利用する `yii serve` コマンドを使うことです。`micro-app/` ディレクトリから、次のコマンドを実行します。
もう一つのオプションは、PHP の内蔵ウェブ・サーバを利用する `yii serve` コマンドを使うことです。
`micro-app/` ディレクトリから、次のコマンドを実行します。
vendor/bin/yii serve --docroot=./web
@ -150,7 +143,8 @@ micro-app/
> Info: ここでは話を簡単にするために sqlite データベースを使用します。他のオプションについては [データベースのガイド](db-dao.md) を参照してください。
次に、[データベース・マイグレーション](db-migrations.md) を作成して、記事のテーブルを作成します。
既に述べたように、独立した構成情報ファイルがあることを確認してください。下記のコンソール・コマンドを実行するためには、それが必要です。
既に述べたように、独立した構成情報ファイルがあることを確認してください。
下記のコンソール・コマンドを実行するためには、それが必要です。
次のコマンドを実行すると、データベース・マイグレーション・ファイルが作成され、そして、マイグレーションがデータベースに適用されます。
vendor/bin/yii migrate/create --appconfig=config.php create_post_table --fields="title:string,body:text"

66
docs/guide-ja/tutorial-yii-integration.md

@ -2,14 +2,14 @@
============================
時々、Yii アプリケーションの中でサードパーティのコードを使用する必要があることがあります。
あるいは、サードパーティのシステムの中で Yii をライブラリとして使用したいこともあるでしょう。
このセクションでは、こういう目的をどうやって達成するかを説明します。
あるいは、サードパーティのシステムの中で Yii をライブラリとして使用したいこともあるでしょう。このセクションでは、こういう目的をどうやって達成するかを説明します。
Yii の中でサードパーティのライブラリを使う <span id="using-libs-in-yii"></span>
------------------------------------------
Yii アプリケーションの中でサードパーティのライブラリを使うために主として必要なことは、そのライブラリのクラスが適切にインクルードされること、または、オートロード可能であることを保証することです。
Yii アプリケーションの中でサードパーティのライブラリを使うために主として必要なことは、
そのライブラリのクラスが適切にインクルードされること、または、オートロード可能であることを保証することです。
### Composer パッケージを使う <span id="using-composer-packages"></span>
@ -20,7 +20,8 @@ Yii アプリケーションの中でサードパーティのライブラリを
2. `composer install` を実行して、指定したパッケージをインストールする。
インストールされた Composer パッケージ内のクラスは、Composer のオートローダを使ってオートロードすることが出来ます。
アプリケーションの [エントリ・スクリプト](structure-entry-scripts.md) に、Composer のオートローダをインストールするための下記の行があることを確認してください。
アプリケーションの [エントリ・スクリプト](structure-entry-scripts.md) に、
Composer のオートローダをインストールするための下記の行があることを確認してください。
```php
// Composer のオートローダをインストール
@ -37,7 +38,8 @@ require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
ここで `BasePath` は、アプリケーションの [base path](structure-applications.md#basePath) を表すものです。
ライブラリがそれ自身のオートローダを持っている場合は、それをアプリケーションの [エントリ・スクリプト](structure-entry-scripts.md) でインストールすることが出来ます。
複数のオートローダ・クラスの中で Yii のクラス・オートローダが優先されるように、ライブラリのオートローダは `Yii.php` ファイルをインクルードする前にインストールすることを推奨します。
複数のオートローダ・クラスの中で Yii のクラス・オートローダが優先されるように、
ライブラリのオートローダは `Yii.php` ファイルをインクルードする前にインストールすることを推奨します。
ライブラリがクラスオートローダを提供していない場合でも、クラスの命名規約が [PSR-4](http://www.php-fig.org/psr/psr-4/) に従っている場合は、ライブラリのクラスをオートロードするのに Yii のクラス・オートローダを使うことが出来ます。
必要なことは、ライブラリのクラスによって使われている全てのルート名前空間に対して [ルート・エイリアス](concept-aliases.md#defining-aliases) を宣言することだけです。
@ -56,11 +58,12 @@ require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
上記のどちらにも当てはまらない場合、おそらくそのライブラリは、クラス・ファイルを探して適切にインクルードするために、PHP の include path 設定に依存しているのでしょう。
この場合は、PHP include path の設定に関するライブラリの指示に従うしかありません。
最悪の場合として、ライブラリが全てのクラス・ファイルを明示的にインクルードすることを要求している場合は、次の方法を使ってクラスを必要に応じてインクルードすることが出来るようになります。
最悪の場合として、ライブラリが全てのクラス・ファイルを明示的にインクルードすることを要求している場合は、
次の方法を使ってクラスを必要に応じてインクルードすることが出来るようになります。
* ライブラリに含まれるクラスを特定する。
* アプリケーションの [エントリ・スクリプト](structure-entry-scripts.md) において、クラスと対応するファイル・パスを `Yii::$classMap` としてリストアップする。
例えば、
* アプリケーションの [エントリ・スクリプト](structure-entry-scripts.md) において、
クラスと対応するファイル・パスを `Yii::$classMap` としてリストアップする。例えば、
```php
Yii::$classMap['Class1'] = 'path/to/Class1.php';
Yii::$classMap['Class2'] = 'path/to/Class2.php';
@ -70,41 +73,30 @@ Yii::$classMap['Class2'] = 'path/to/Class2.php';
サードパーティのシステムで Yii を使う <span id="using-yii-in-others"></span>
-------------------------------------
Yii は数多くの優れた機能を提供していますので、サードパーティのシステム (例えば、WordPress、Joomla、または、他の PHP フレームワークを使って開発されるアプリケーション) を開発したり機能拡張したりするのをサポートするために Yii の機能のいくつかを使用したいことがあるでしょう。
Yii は数多くの優れた機能を提供していますので、サードパーティのシステム (例えば、WordPress、Joomla、または、他の PHP フレームワークを使って開発されるアプリケーション)
を開発したり機能拡張したりするのをサポートするために Yii の機能のいくつかを使用したいことがあるでしょう。
例えば、[[yii\helpers\ArrayHelper]] クラスや [アクティブ・レコード](db-active-record.md) をサードパーティのシステムで使いたいことがあるでしょう。
この目的を達するためには、主として、二つのステップを踏む必要があります。
すなわち、Yii のインストールと、Yii のブートストラップです。
サードパーティのシステムが Composer を使って依存を管理している場合は、単に下記のコマンドを実行すれば Yii をインストールすることが出来ます。
サードパーティのシステムが Composer を使って依存を管理している場合は、
単に下記のコマンドを実行すれば Yii をインストールすることが出来ます。
composer global require "fxp/composer-asset-plugin:~1.3.1"
composer require yiisoft/yii2
composer install
最初のコマンドは [composer アセット・プラグイン](https://github.com/francoispluchino/composer-asset-plugin/) をインストールします。
これは、Composer によって bower と npm の依存パッケージを管理できるようにするものです。
このことは、データベースなど、アセットに関係しない Yii の機能を使いたいだけの場合でも、Yii の Composer パッケージをインストールするために必要とされます。
[Yii のアセット発行の機能](structure-assets.md) を使いたい場合は、あなたの `composer.json``extra` セクションに次の構成も追加しなければなりません。
```json
{
...
"extra": {
"asset-installer-paths": {
"npm-asset-library": "vendor/npm",
"bower-asset-library": "vendor/bower"
}
}
}
```bash
composer require yiisoft/yii2
```
Composer に関する更なる情報や、インストールの過程で出現しうる問題に対する解決方法については、一般的な [Composer によるインストール](start-installation.md#installing-via-composer) のセクションを参照してください。
データベース抽象レイヤなど、アセットに関係しない Yii の機能だけを使用したい場合は、
Bower および NPM のパッケージのインストールを阻止する特別な composer パッケージが必要になります。
詳細については [cebe/assetfree-yii2](https://github.com/cebe/assetfree-yii2) を参照して下さい。
Composer に関する更なる情報や、インストールの過程で出現しうる問題に対する解決方法については、
一般的な [Composer によるインストール](start-installation.md#installing-via-composer) のセクションを参照してください。
そうでない場合は、Yii のリリースを [ダウンロード](http://www.yiiframework.com/download/) して、`BasePath/vendor` ディレクトリに解凍してください。
そうでない場合は、Yii のリリースを [ダウンロード](http://www.yiiframework.com/download/) して、
`BasePath/vendor` ディレクトリに解凍してください。
次に、サードパーティのシステムのエントリ・スクリプトを修正します。
次のコードをエントリ・スクリプトの先頭に追加してください。
次に、サードパーティのシステムのエントリ・スクリプトを修正します。次のコードをエントリ・スクリプトの先頭に追加してください。
```php
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
@ -115,10 +107,12 @@ new yii\web\Application($yiiConfig); // ここで run() を呼ばない
ごらんのように、上記のコードは典型的な Yii アプリケーションの [エントリ・スクリプト](structure-entry-scripts.md) と非常に良く似ています。
唯一の違いは、アプリケーションのインスタンスが作成された後に `run()` メソッドが呼ばれない、という点です。
`run()` を呼ぶと Yii がリクエスト処理のワークフローを制御するようになりますが、この場合はリクエストを処理する別のアプリケーションが既に存在していますので、これは必要ではないからです。
`run()` を呼ぶと Yii がリクエスト処理のワークフローを制御するようになりますが、
この場合はリクエストを処理する別のアプリケーションが既に存在していますので、これは必要ではないからです。
Yii アプリケーションでの場合と同じように、サードパーティ・システムが走っている環境に基づいて Yii のアプリケーション・インスタンスを構成する必要があります。
例えば、[アクティブ・レコード](db-active-record.md) の機能を使うためには、サードパーティ・システムによって使用されている DB 接続の設定を使って `db` [アプリケーション・コンポーネント](structure-application-components.md) を構成しなければなりません。
例えば、[アクティブ・レコード](db-active-record.md) の機能を使うためには、サードパーティ・システムによって使用されている DB 接続の設定を使って
`db` [アプリケーション・コンポーネント](structure-application-components.md) を構成しなければなりません。
これで、Yii によって提供されているほとんどの機能を使うことが出来ます。
例えば、アクティブ・レコード・クラスを作成して、それを使ってデータベースを扱うことが出来ます。

Loading…
Cancel
Save