mirror of
https://github.com/yiisoft/yii2.git
synced 2025-12-18 14:28:57 +08:00
docs/guide-ja/* updated (#20088)
This commit is contained in:
@@ -135,6 +135,7 @@ RESTful ウェブ・サービス
|
||||
|
||||
* [クイック・スタート](rest-quick-start.md)
|
||||
* [リソース](rest-resources.md)
|
||||
* [コレクションのフィルタリング](rest-filtering-collections.md)
|
||||
* [コントローラ](rest-controllers.md)
|
||||
* [ルーティング](rest-routing.md)
|
||||
* [レスポンス形式の設定](rest-response-formatting.md)
|
||||
|
||||
@@ -57,7 +57,7 @@ $data = $cache->getOrSet($key, function () use ($user_id) {
|
||||
|
||||
キャッシュ・コンポーネントは通常グローバルに設定しアクセスできるように
|
||||
[アプリケーション・コンポーネント](structure-application-components.md) として登録されます。
|
||||
以下のコードは、二台のキャッシュ・サーバを用いる [Memcached](https://memcached.org/) を使うように
|
||||
以下のコードは、二台のキャッシュ・サーバを用いる [memcached](https://memcached.org/) を使うように
|
||||
`cache` アプリケーション・コンポーネントを構成する方法を示すものです。
|
||||
|
||||
```php
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
ビヘイビア
|
||||
==========
|
||||
|
||||
ビヘイビアは [[yii\base\Behavior]] またその子クラスのインスタンスです。ビヘイビアは
|
||||
[ミックスイン](https://ja.wikipedia.org/wiki/Mixin) としても知られ、既存の [[yii\base\Component|component]] クラスの
|
||||
ビヘイビアは [[yii\base\Behavior]] またその子クラスのインスタンスです。
|
||||
ビヘイビアは [ミックスイン](https://ja.wikipedia.org/wiki/Mixin) としても知られ、既存の [[yii\base\Component|component]] クラスの
|
||||
機能を、クラスの継承を変更せずに拡張することができます。コンポーネントにビヘイビアをアタッチすると、その
|
||||
コンポーネントにはビヘイビアのメソッドとプロパティが "注入" され、それらのメソッドとプロパティは、
|
||||
コンポーネント・クラス自体に定義されているかのようにアクセスできるようになります。また、ビヘイビアは、
|
||||
|
||||
@@ -541,7 +541,7 @@ $reader = $container->get('app\storage\DocumentsReader');
|
||||
|
||||
依存注入と [サービス・ロケータ](concept-service-locator.md) はともに、疎結合でよりテストしやすい方法でのソフトウェア構築を可能にする、
|
||||
定番のデザインパターンです。
|
||||
依存注入とサービス・ロケータへのより深い理解を得るために、 [Martin の記事](https://martinfowler.com/articles/injection.html)
|
||||
依存注入とサービス・ロケータをより深く理解するために、 [Martin の記事](https://martinfowler.com/articles/injection.html)
|
||||
を読むことを強くお勧めします。
|
||||
|
||||
Yii はその [サービス・ロケータ](concept-service-locator.md) を、依存注入 (DI) コンテナの上に実装しています。
|
||||
|
||||
@@ -129,4 +129,4 @@ return [
|
||||
モジュールからサービスを引き出そうとする全てのリクエストは、そのモジュールが要求に応じられない場合は、すべてその親に渡されます。
|
||||
|
||||
モジュール内のコンポーネントの構成情報は、親モジュール内のコンポーネントの構成情報とは決してマージされないことに注意して下さい。
|
||||
サービス・ロケータ・パターンによって私たちは名前の付いたサービスを定義することが出来ますが、同じ名前のサービスが同じ構成パラメータを使用すると想定することは出来ません。
|
||||
サービス・ロケータのパターンによって私たちは名前の付いたサービスを定義することが出来ますが、同じ名前のサービスが同じ構成パラメータを使用すると想定することは出来ません。
|
||||
|
||||
@@ -685,7 +685,7 @@ class m150101_185401_create_news_table extends Migration
|
||||
`safeDown()` では、先に行を削除して、次にテーブルを削除しています。
|
||||
|
||||
> Note: 全ての DBMS がトランザクションをサポートしている訳ではありません。また、トランザクションに入れることが出来ない DB クエリもあります。
|
||||
いくつかの例を [暗黙のコミット](https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html) で見ることが出来ます。
|
||||
そのいくつかの例を [暗黙のコミット](https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html) で見ることが出来ます。
|
||||
その場合には、代りに、`up()` と `down()` を実装しなければなりません。
|
||||
|
||||
|
||||
|
||||
@@ -299,7 +299,7 @@ $query->where([$column => $value]);
|
||||
値が自動的に一対のパーセント記号によって囲まれることに注意してください。
|
||||
|
||||
> Note: PostgreSQL を使っている場合は、`like` の代りに、大文字と小文字を区別しない比較のための
|
||||
> [`ilike`](https://www.postgresql.org/docs/8.3/functions-matching.html#FUNCTIONS-LIKE) を使うことも出来ます。
|
||||
> [`ilike`](https://www.postgresql.org/docs/8.3/static/functions-matching.html#FUNCTIONS-LIKE) を使うことも出来ます。
|
||||
|
||||
- `or like`: オペランド 2 が配列である場合に `LIKE` 述語が `OR` によって結合される以外は、
|
||||
`like` 演算子と同じです。
|
||||
|
||||
@@ -43,12 +43,14 @@ class SettingsController extends Controller
|
||||
{
|
||||
$settings = Setting::find()->indexBy('id')->all();
|
||||
|
||||
if (Model::loadMultiple($settings, Yii::$app->request->post()) && Model::validateMultiple($settings)) {
|
||||
if ($this->request->isPost) {
|
||||
if (Setting::loadMultiple($settings, $this->request->post()) && Setting::validateMultiple($settings)) {
|
||||
foreach ($settings as $setting) {
|
||||
$setting->save(false);
|
||||
}
|
||||
return $this->redirect('index');
|
||||
}
|
||||
}
|
||||
|
||||
return $this->render('update', ['settings' => $settings]);
|
||||
}
|
||||
@@ -71,10 +73,12 @@ use yii\widgets\ActiveForm;
|
||||
|
||||
$form = ActiveForm::begin();
|
||||
|
||||
foreach ($settings as $index => $setting) {
|
||||
echo $form->field($setting, "[$index]value")->label($setting->name);
|
||||
foreach ($settings as $id => $setting) {
|
||||
echo $form->field($setting, "[$id]value")->label($setting->name);
|
||||
}
|
||||
|
||||
echo Html::submitButton('Save');
|
||||
|
||||
ActiveForm::end();
|
||||
```
|
||||
|
||||
@@ -88,20 +92,29 @@ ActiveForm::end();
|
||||
```php
|
||||
public function actionCreate()
|
||||
{
|
||||
$count = count(Yii::$app->request->post('Setting', []));
|
||||
$settings = [new Setting()];
|
||||
for($i = 1; $i < $count; $i++) {
|
||||
$settings[] = new Setting();
|
||||
$settings = [];
|
||||
if ($this->request->isPost) {
|
||||
$count = count($this->request->post($setting->tableName())) - 1;
|
||||
for ($i = 0; $i < $count; $i++) {
|
||||
$settings[$i] = new Setting();
|
||||
}
|
||||
if (Setting::loadMultiple($settings, $this->request->post()) && Setting::validateMultiple($settings)) {
|
||||
foreach ($settings as $setting) {
|
||||
$setting->save(false);
|
||||
}
|
||||
return $this->redirect('index');
|
||||
}
|
||||
}
|
||||
$settings[] = new Setting();
|
||||
|
||||
// ...
|
||||
return $this->render('create', ['settings' => $settings]);
|
||||
}
|
||||
```
|
||||
|
||||
ここでは、デフォルトで一個のモデルを含む `$settings` 配列を初期値として作成し、少なくとも一個のテキスト・フィールドが常にビューに表示されるようにしています。
|
||||
そして、受信したインプットの行数に合せて、配列にモデルを追加しています。
|
||||
|
||||
ビューでは javascript を使ってインプットの行を動的に追加することが出来ます。
|
||||
ビューでは JavaScript を使ってインプットの行を動的に追加することが出来ます。
|
||||
|
||||
### 更新、作成、削除を一つのページに組み合わせる
|
||||
|
||||
|
||||
@@ -748,7 +748,7 @@ JS;
|
||||
|
||||
### Deferred 検証 <span id="deferred-validation"></span>
|
||||
|
||||
非同期のクライアント・サイドの検証をサポートする必要がある場合は、[Defered オブジェクト](https://api.jquery.com/category/deferred-object/) を作成することが出来ます。
|
||||
非同期のクライアント・サイドの検証をサポートする必要がある場合は、[Deferred オブジェクト](https://api.jquery.com/category/deferred-object/) を作成することが出来ます。
|
||||
例えば、AJAX によるカスタム検証を実行するために、次のコードを使うことが出来ます。
|
||||
|
||||
```php
|
||||
|
||||
@@ -354,13 +354,13 @@ $filter = new ActiveDataFilter([
|
||||
|
||||
$filterCondition = null;
|
||||
|
||||
// どのようなソースからでもフィルタをロードすることが出来ます。
|
||||
// 例えば、リクエスト・ボディの JSON からロードしたい場合は、
|
||||
// どのようなソースからでもフィルタをロードすることが出来ます。例えば、
|
||||
// リクエスト・ボディの JSON からロードしたい場合は、
|
||||
// 下記のように Yii::$app->request->getBodyParams() を使います。
|
||||
if ($filter->load(\Yii::$app->request->get())) {
|
||||
$filterCondition = $filter->build();
|
||||
if ($filterCondition === false) {
|
||||
// シリアライザがエラーを抽出するだろう
|
||||
// シリアライザがフィルタの抽出でエラーを出すかもしれない
|
||||
return $filter;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -777,4 +777,4 @@ yii gii/crud --controllerClass="backend\\controllers\PostController" \
|
||||
さらに読むべき文書
|
||||
------------------
|
||||
|
||||
- Arno Slatius による [Rendering Data in Yii 2 with GridView and ListView](https://www.sitepoint.com/rendering-data-in-yii-2-with-gridview-and-listview/)。
|
||||
- Arno Slatius による [Rendering Data in Yii 2 with GridView and ListView](https://www.sitepoint.com/rendering-data-in-yii-2-with-gridview-and-listview/)
|
||||
|
||||
@@ -75,7 +75,7 @@ return [
|
||||
- [[yii\i18n\Formatter::asDate()|date]] - 値は日付としてフォーマットされます。例えば `January 01, 2014`。
|
||||
- [[yii\i18n\Formatter::asTime()|time]] - 値は時刻としてフォーマットされます。例えば `14:23`。
|
||||
- [[yii\i18n\Formatter::asDatetime()|datetime]] - 値は日付および時刻としてフォーマットされます。例えば `January 01, 2014 14:23`。
|
||||
- [[yii\i18n\Formatter::asTimestamp()|timestamp]] - 値は [unix タイムスタンプ](https://ja.wikipedia.org/wiki/UNIX%E6%99%82%E9%96%93) としてフォーマットされます。例えば `1412609982`。
|
||||
- [[yii\i18n\Formatter::asTimestamp()|timestamp]] - 値は [unix タイムスタンプ](https://ja.wikipedia.org/wiki/UNIX%E6%99%82%E9%96%93) としてフォーマットされます。例えば `1412609982`
|
||||
- [[yii\i18n\Formatter::asRelativeTime()|relativeTime]] - 値は、その日時と現在との間隔として、人間に分かりやすい言葉でフォーマットされます。
|
||||
例えば `1 hour ago`。
|
||||
- [[yii\i18n\Formatter::asDuration()|duration]] - 値は継続時間として、人間に分かりやすい言葉でフォーマットされます。例えば `1 day, 2 minutes`。
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
* [HTTP Basic 認証](https://ja.wikipedia.org/wiki/Basic%E8%AA%8D%E8%A8%BC): アクセス・トークンはユーザ名として送信されます。
|
||||
この方法は、アクセス・トークンを API コンシューマ側で安全に保存することが出来る場合、
|
||||
例えば API コンシューマがサーバ上で走るプログラムである場合などにのみ使用されるべきです。
|
||||
例えば API コンシューマがサーバ上で走るプログラムである場合などのみに使用されるべきです。
|
||||
* クエリ・パラメータ: アクセス・トークンは API の URL、例えば、`https://example.com/users?access-token=xxxxxxxx`
|
||||
でクエリ・パラメータとして送信されます。
|
||||
ほとんどのウェブ・サーバはクエリ・パラメータをサーバのログに記録するため、この手法は、
|
||||
|
||||
190
docs/guide-ja/rest-filtering-collections.md
Normal file
190
docs/guide-ja/rest-filtering-collections.md
Normal file
@@ -0,0 +1,190 @@
|
||||
コレクションのフィルタリング
|
||||
============================
|
||||
|
||||
バージョン 2.0.13 以降、リソースのコレクションは [[yii\data\DataFilter]] コンポーネントを使ってフィルタにかけることが出来ます。
|
||||
このコンポーネントは、リクエスト経由で渡されるフィルタ条件の構築を可能にし、そして、拡張バージョンの [[yii\data\ActiveDataFilter]] の助力によって、
|
||||
[[yii\db\QueryInterface::where()]] にとって適切な形式でフィルタ条件を使う事を可能にします。
|
||||
|
||||
|
||||
## データ・プロバイダをフィルタリングのために構成する <span id="configuring-data-provider-for-filtering"></span>
|
||||
|
||||
[コレクション](rest-resources.md#collections) のセクションで言及されているように、
|
||||
[データ・プロバイダ](output-data-providers#data-providers) を使うと、並べ替えてページ付けしたリソースのリストを出力することが出来ます。
|
||||
また、データ・プロバイダを使って、そのリストをフィルタにかけることも出来ます。
|
||||
|
||||
```php
|
||||
$filter = new ActiveDataFilter([
|
||||
'searchModel' => 'app\models\PostSearch',
|
||||
]);
|
||||
|
||||
$filterCondition = null;
|
||||
// どのようなソースからでもフィルタをロードすることが出来ます。例えば、
|
||||
// リクエスト・ボディの JSON からロードしたい場合は、
|
||||
// 下記のように Yii::$app->request->getBodyParams() を使います。
|
||||
if ($filter->load(Yii::$app->request->get())) {
|
||||
$filterCondition = $filter->build();
|
||||
if ($filterCondition === false) {
|
||||
// シリアライザがフィルタの抽出でエラーを出すかもしれない
|
||||
return $filter;
|
||||
}
|
||||
}
|
||||
|
||||
$query = Post::find();
|
||||
if ($filterCondition !== null) {
|
||||
$query->andWhere($filterCondition);
|
||||
}
|
||||
|
||||
return new ActiveDataProvider([
|
||||
'query' => $query,
|
||||
]);
|
||||
```
|
||||
|
||||
`PostSearch` モデルが、どのプロパティと値がフィルタリングのために許容されるかを定義する役目を担います。
|
||||
|
||||
```php
|
||||
use yii\base\Model;
|
||||
|
||||
class PostSearch extends Model
|
||||
{
|
||||
public $id;
|
||||
public $title;
|
||||
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
['id', 'integer'],
|
||||
['title', 'string', 'min' => 2, 'max' => 200],
|
||||
];
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
そこで特別なビジネス・ロジックが必要でない場合には、検索ルールのためのスタンドアロンなモデルを準備する代わりに、
|
||||
[[yii\base\DynamicModel]] を使うことが出来ます。
|
||||
|
||||
```php
|
||||
$filter = new ActiveDataFilter([
|
||||
'searchModel' => (new DynamicModel(['id', 'title']))
|
||||
->addRule(['id'], 'integer')
|
||||
->addRule(['title'], 'string', ['min' => 2, 'max' => 200]),
|
||||
]);
|
||||
```
|
||||
|
||||
`searchModel` を定義することは、エンド・ユーザに許容するフィルタ条件を制御するために欠かすことが出来ません。
|
||||
|
||||
|
||||
## リクエストのフィルタリング <span id="filtering-request"></span>
|
||||
|
||||
通常、エンド・ユーザは許容された一つ以上のメソッド(これらはAPIドキュメントに明示的に記述されるべきものです)を使ってフィルタリング条件をリクエストで提供するものと期待されます。
|
||||
例えば、フィルタリングが JSON を使って POST メソッドで操作される場合は、
|
||||
下記と似たようなものになります。
|
||||
|
||||
```json
|
||||
{
|
||||
"filter": {
|
||||
"id": {"in": [2, 5, 9]},
|
||||
"title": {"like": "cheese"}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
上記の条件は、次のように解釈されます :
|
||||
- `id` は、2, 5, または 9 でなければならず、**かつD**
|
||||
- `title` は `cheese` という語を含まなければならない。
|
||||
|
||||
同一の条件が GET クエリの一部として送信される場合は、次のようになります :
|
||||
|
||||
```
|
||||
?filter[id][in][]=2&filter[id][in][]=5&filter[id][in][]=9&filter[title][like]=cheese
|
||||
```
|
||||
|
||||
デフォルトの `filter` キー・ワードは、[[yii\data\DataFilter::$filterAttributeName]] を設定して変更することが出来ます。
|
||||
|
||||
|
||||
## フィルタ制御キーワード <span id="filter-control-keywords"></span>
|
||||
|
||||
許容されているフィルタ制御キーワードは下記の通りです :
|
||||
|
||||
| キーワード | 意味 |
|
||||
|:--------------:|:-------------:|
|
||||
| `and` | `AND` |
|
||||
| `or` | `OR` |
|
||||
| `not` | `NOT` |
|
||||
| `lt` | `<` |
|
||||
| `gt` | `>` |
|
||||
| `lte` | `<=` |
|
||||
| `gte` | `>=` |
|
||||
| `eq` | `=` |
|
||||
| `neq` | `!=` |
|
||||
| `in` | `IN` |
|
||||
| `nin` | `NOT IN` |
|
||||
| `like` | `LIKE` |
|
||||
|
||||
オプションの [[yii\data\DataFilter::$filterControls]] を拡張して、上記のリストを拡張することが出来ます。
|
||||
例えば、下記のように、同一のフィルタ構築キーにいくつかのキーワードを与えて、複数のエイリアスを作成することが出来ます :
|
||||
|
||||
```php
|
||||
[
|
||||
'eq' => '=',
|
||||
'=' => '=',
|
||||
'==' => '=',
|
||||
'===' => '=',
|
||||
// ...
|
||||
]
|
||||
```
|
||||
|
||||
未定義のキーワードは、すべて、フィルタ制御とは認識されず、属性名として扱われることに注意して下さい。
|
||||
制御キーワードと属性名の衝突は避けなければなりません。
|
||||
(例えば、制御キーワードとしての 'like' と属性名としての 'like' が存在する場合、そのような属性に対して条件を指定することは不可能です。)
|
||||
|
||||
> Note: フィルタ制御を指定する時に、あなたのAPIが使用する実際のデータ交換形式に留意しましょう。
|
||||
すべての指定された制御キーワードがその形式にとって妥当なものであることを確認して下さい。
|
||||
例えば、XML ではタグ名は Letter クラスの文字でしか開始出来ませんから、`>`, `=`, `$gt` 等は XML スキーマに違反することになります。
|
||||
|
||||
> Note: 新しいフィルタ制御キーワードを追加する時は、演算子の結合規則および所期の動作に基づいて、期待されるクエリ結果を得るためには
|
||||
[[yii\data\DataFilter::$conditionValidators]] および/または [[yii\data\DataFilter::$operatorTypes]] をも
|
||||
更新する必要があるかどうか、必ず確認して下さい。
|
||||
|
||||
|
||||
## Null 値の扱い <span id="handling-the-null-values"></span>
|
||||
|
||||
JSON の式野中では `null` を使う事は容易ですが、文字通りの 'null' を文字列としての "null" と混乱させずに GET クエリを使ってを送信することは不可能です。
|
||||
バージョン 2.0.40 以降では、[[yii\data\DataFilter::$nullValue]] オプションを使って、文字通りの `null` に置換される単語(デフォルトでは、"NULL")を構成することが出来ます。
|
||||
|
||||
|
||||
## 属性のエイリアス <span id="aliasing-attributes"></span>
|
||||
|
||||
属性を別の名前で呼びたい場合や、結合された DB テーブルでフィルタをかけたい場合に、
|
||||
[[yii\data\DataFilter::$attributeMap]] を使ってエイリアスのマップを設定することが出来ます。
|
||||
|
||||
```php
|
||||
[
|
||||
'carPart' => 'car_part', // car_part 属性でフィルタするために carPart が使われる
|
||||
'authorName' => '{{author}}.[[name]]', // 結合された author テーブルの name 属性でフィルタするために authorName が使われる
|
||||
]
|
||||
```
|
||||
|
||||
## `ActiveController` のためにフィルタを構成する <span id="configuring-filters-for-activecontroller"></span>
|
||||
|
||||
[[yii\rest\ActiveController]] には一般的な一揃いの REST アクションが失踪されていますが、
|
||||
[[yii\rest\IndexAction::$dataFilter]] プロパティによってフィルタを使うことも簡単に出来ます。
|
||||
可能な方法のうちの一つは [[yii\rest\ActiveController::actions()]] を使ってそうすることです :
|
||||
|
||||
```php
|
||||
public function actions()
|
||||
{
|
||||
$actions = parent::actions();
|
||||
|
||||
$actions['index']['dataFilter'] = [
|
||||
'class' => \yii\data\ActiveDataFilter::class,
|
||||
'attributeMap' => [
|
||||
'clockIn' => 'clock_in',
|
||||
],
|
||||
'searchModel' => (new DynamicModel(['id', 'clockIn']))->addRule(['id', 'clockIn'], 'integer', ['min' => 1]),
|
||||
];
|
||||
|
||||
return $actions;
|
||||
}
|
||||
```
|
||||
|
||||
これで(`index` アクションによってアクセス可能な)コレクションを `id` と `clockIn` プロパティによってフィルタすることが出来ます。
|
||||
@@ -251,11 +251,3 @@ class PostController extends Controller
|
||||
REST API におけるコレクションはデータ・プロバイダであるため、データ・プロバイダの全ての機能、すなわち、ページネーションやソーティングを共有しています。
|
||||
|
||||
その一例を [クイック・スタート](rest-quick-start.md#trying-it-out) のセクションで見ることが出来ます。
|
||||
|
||||
### コレクションをフィルタリングする <span id="filtering-collections"></span>
|
||||
|
||||
バージョン 2.0.13 以降、Yii はコレクションをフィルタリングする便利な機能を提供しています。
|
||||
その一例を [クイック・スタート](rest-quick-start.md#trying-it-out) のガイドに見ることが出来ます。
|
||||
エンド・ボイントをあなた自身が実装しようとしている場合、フィルタリングは
|
||||
データ・プロバイダのガイドの [データ・フィルタを使ってデータ・プロバイダをフィルタリングする](output-data-providers.md#filtering-data-providers-using-data-filters
|
||||
のセクションで述べられている方法で行うことが出来ます。
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
RESTful API のリクエストを処理するとき、アプリケーションは、通常、レスポンス形式の設定に関して次のステップを踏みます。
|
||||
|
||||
1. レスポンス形式に影響するさまざまな要因、例えば、メディア・タイプ、言語、バージョンなどを決定します。
|
||||
1. レスポンス形式に影響しうるさまざまな要因、例えば、メディア・タイプ、言語、バージョンなどを決定します。
|
||||
このプロセスは [コンテント・ネゴシエーション](https://en.wikipedia.org/wiki/Content_negotiation) としても知られるものです。
|
||||
2. リソース・オブジェクトを配列に変換します。
|
||||
[リソース](rest-resources.md) のセクションで説明したように、この作業は [[yii\rest\Serializer]] によって実行されます。
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
クライアント・サイドとサーバ・サイドの両方のコードを完全に制御できるウェブ・アプリケーションとは違って、API はあなたの制御が及ばないクライアントによって使用されることを想定したものです。このため、API の後方互換性 (BC) は、可能な限り保たれなければなりません。
|
||||
BC を損なうかも知れない変更が必要な場合は、それを API の新しいバージョンにおいて導入し、バージョン番号を上げるべきです。そうすれば、既存のクライアントは、API の古いけれども動作するバージョンを使い続けることが出来ますし、新しいまたはアップグレードされたクライアントは、新しい API バージョンで新しい機能を使うことが出来ます。
|
||||
|
||||
> Tip: API のバージョン番号の設計に関する詳細情報は
|
||||
> Tip: API のバージョン番号の設計についての詳細な情報は
|
||||
[Semantic Versioning](https://semver.org/) を参照してください。
|
||||
|
||||
API のバージョン管理を実装する方法としてよく使われるのは、バージョン番号を API の URL に埋め込む方法です。
|
||||
|
||||
@@ -152,8 +152,9 @@ Yii アプリケーションに渡されるからです。
|
||||
信頼できるプロキシの情報を構成することが出来るようになっています。
|
||||
[[yii\web\Request::trustedHosts|trustedHosts]]、
|
||||
[[yii\web\Request::secureHeaders|secureHeaders]]、
|
||||
[[yii\web\Request::ipHeaders|ipHeaders]] および
|
||||
[[yii\web\Request::secureProtocolHeaders|secureProtocolHeaders]]
|
||||
[[yii\web\Request::ipHeaders|ipHeaders]]
|
||||
[[yii\web\Request::secureProtocolHeaders|secureProtocolHeaders]] および
|
||||
[[yii\web\Request::portHeaders|portHeaders]] (2.0.46 以降)
|
||||
|
||||
以下は、リバース・プロキシ・アレイの背後で動作するアプリケーションのための、request の構成例です
|
||||
(リバース・プロキシ・アレイは `10.0.2.0/24` のネットワークに設置されているとします)。
|
||||
|
||||
@@ -157,7 +157,7 @@ class SiteController extends Controller
|
||||
|
||||
ロール・ベース・アクセス制御 (RBAC) は、単純でありながら強力な集中型のアクセス制御を提供します。
|
||||
RBAC と他のもっと伝統的なアクセス制御スキーマとの比較に関する詳細については、
|
||||
[Wiki 記事](https://ja.wikipedia.org/wiki/%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%99%E3%83%BC%E3%82%B9%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E5%88%B6%E5%BE%A1) を参照してください。
|
||||
[Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%99%E3%83%BC%E3%82%B9%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E5%88%B6%E5%BE%A1) を参照してください。
|
||||
|
||||
Yii は、[NIST RBAC モデル](https://csrc.nist.gov/CSRC/media/Publications/conference-paper/1992/10/13/role-based-access-controls/documents/ferraiolo-kuhn-92.pdf) に従って、一般的階層型 RBAC を実装しています。
|
||||
RBAC の機能は、[[yii\rbac\ManagerInterface|authManager]] [アプリケーション・コンポーネント](structure-application-components.md) を通じて提供されます。
|
||||
|
||||
@@ -333,8 +333,8 @@ H5BP プロジェクトが提供する構成例を参考にすることも出来
|
||||
- Apache 2: <https://httpd.apache.org/docs/trunk/vhosts/examples.html#defaultallports>
|
||||
- Nginx: <https://www.nginx.com/resources/wiki/start/topics/examples/server_blocks/>
|
||||
|
||||
サーバの構成にアクセスする権限がない場合は、このような攻撃に対して防御するために、[[yii\filters\HostControl]]
|
||||
フィルタを設定することが出来ます。
|
||||
サーバの構成にアクセスする権限がない場合は、このような攻撃に対して防御するために、
|
||||
[[yii\filters\HostControl]] フィルタを設定することが出来ます。
|
||||
|
||||
```php
|
||||
// ウェブ・アプリケーション構成ファイル
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
けれども、場合によっては、明示的にアクセスされないときでも、リクエストごとにアプリケーション・コンポーネントのインスタンスを作成したいことがあります。
|
||||
そうするために、アプリケーションの [[yii\base\Application::bootstrap|bootstrap]] プロパティのリストにそのコンポーネントの ID を挙げることが出来ます。
|
||||
|
||||
また、カスタマイズしたコンポーネントをブートストラップするためにクロージャを用いることも出来ます。インスタンス化されたコンポーネントを返すことは要求されません。
|
||||
また、カスタマイズされたコンポーネントをブートストラップするためにクロージャを用いることも出来ます。インスタンス化されたコンポーネントを返すことは要求されません。
|
||||
単に [[yii\base\Application]] のインスタンス化の後にコードを走らせるだけのためにクロージャを使うことも出来ます。
|
||||
|
||||
例えば、次のアプリケーション構成情報は、`log` コンポーネントが常にロードされることを保証するものです。
|
||||
|
||||
@@ -276,7 +276,7 @@ if (YII_ENV_DEV) {
|
||||
このプロパティを使用して決定します。
|
||||
|
||||
言語を指定するのには、[IETF 言語タグ](https://ja.wikipedia.org/wiki/IETF%E8%A8%80%E8%AA%9E%E3%82%BF%E3%82%B0) に従うことが推奨されます。
|
||||
例えば、`en` は英語を意味し、`en-US` はアメリカ合衆国の英語を意味します。
|
||||
例えば、`en` は英語を意味しますが、`en-US` はアメリカ合衆国の英語を意味します。
|
||||
|
||||
このプロパティに関する詳細は [国際化](tutorial-i18n.md) のセクションで読むことが出来ます。
|
||||
|
||||
@@ -348,7 +348,7 @@ $width = \Yii::$app->params['thumbnail.size'][0];
|
||||
|
||||
[language](#language) プロパティと同様に、このプロパティは
|
||||
[IETF 言語タグ](https://ja.wikipedia.org/wiki/IETF%E8%A8%80%E8%AA%9E%E3%82%BF%E3%82%B0) に従って構成しなければなりません。
|
||||
例えば、`en` は英語を意味し、`en-US` はアメリカ合衆国の英語を意味します。
|
||||
例えば、`en` は英語を意味しますが、`en-US` はアメリカ合衆国の英語を意味します。
|
||||
|
||||
このプロパティに関する詳細は [国際化](tutorial-i18n.md) のセクションで読むことが出来ます。
|
||||
|
||||
|
||||
@@ -208,7 +208,7 @@ class FontAwesomeAsset extends AssetBundle
|
||||
### Bower と NPM のアセットのインストール <span id="bower-npm-assets"></span>
|
||||
|
||||
ほとんどの JavaScript/CSS パッケージは、[Bower](https://bower.io/) および/または [NPM](https://www.npmjs.com/) によって管理されています。
|
||||
PHP の世界には PHP の依存を管理する Composer がありますが、PHP のパッケージと全く同じように
|
||||
PHP の世界には Composer があって、PHP の依存を管理していますが、PHP のパッケージと全く同じように
|
||||
`composer.json` を使って Bower のパッケージも NPM のパッケージもロードすることが可能です。
|
||||
|
||||
このことを達成するために Composer の構成を少し修正しなければなりません。二つの方法があります。
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
コントローラ
|
||||
============
|
||||
|
||||
コントローラは [MVC](https://ja.wikipedia.org/wiki/Model_View_Controller) アーキテクチャの一部を成すものです。
|
||||
コントローラは [MVC](https://ja.wikipedia.org/wiki/Model_View_Controller) アーキテクチャの一部を構成するものです。
|
||||
それは [[yii\base\Controller]] を拡張したクラスのオブジェクトであり、リクエストの処理とレスポンスの生成について責任を負います。
|
||||
具体的には、コントローラは、[アプリケーション](structure-applications.md) から制御を引き継いだ後、
|
||||
入ってきたリクエストのデータを分析し、それを [モデル](structure-models.md) に引き渡して、
|
||||
|
||||
@@ -75,7 +75,7 @@ Image::thumbnail('@webroot/img/test-image.jpg', 120, 120)
|
||||
2. もし有れば、エクステンションによって提供されているクラス・オートローダをインストールする。
|
||||
3. 指示に従って、依存するエクステンションを全てダウンロードしインストールする。
|
||||
|
||||
エクステンションがクラス・オートローダを持っていなくても、[PSR-4 標準](https://www.php-fig.org/psr/psr-4/) に従っている場合は、Yii によって提供されているクラス・オートローダを使ってエクステンションのクラスをオートロードすることが出来ます。
|
||||
エクステンションがクラス・オートローダを持っていなくても、[PSR-4 標準](https://www.php-fig.org/psr/psr-4/) に従っている場合は、Yii が提供しているクラス・オートローダを使ってエクステンションのクラスをオートロードすることが出来ます。
|
||||
必要なことは、エクステンションのルート・ディレクトリのための [ルート・エイリアス](concept-aliases.md#defining-aliases) を宣言することだけです。
|
||||
例えば、エクステンションを `vendor/mycompany/myext` というディレクトリにインストールしたと仮定します。
|
||||
そして、エクステンションのクラスは `myext` 名前空間の下にあるとします。
|
||||
@@ -184,7 +184,7 @@ Yii のアプリケーションは、このファイルによって、どんな
|
||||
それぞれの依存パッケージについて、適切なバージョン制約 (例えば `1.*` や `@stable`) を指定することも忘れてはなりません。
|
||||
あなたのエクステンションを安定バージョンとしてリリースする場合は、安定した依存パッケージを使ってください。
|
||||
|
||||
たいていの JavaScript/CSS パッケージは、Composer ではなく、[Bower](https://bower.io/) および/または [NPM](https://www.npmjs.com/) を使って管理されています。
|
||||
たいていの JavaScript/CSS パッケージは、Composer の代りに、[Bower](https://bower.io/) および/または [NPM](https://www.npmjs.com/) を使って管理されています。
|
||||
Yii は [Composer アセット・プラグイン](https://github.com/fxpio/composer-asset-plugin) を使って、この種のパッケージを Composer によって管理することを可能にしています。
|
||||
あなたのエクステンションが Bower パッケージに依存している場合でも、次のように、
|
||||
`composer.json` に依存パッケージをリストアップすることが簡単に出来ます。
|
||||
|
||||
@@ -142,7 +142,7 @@ public function behaviors()
|
||||
### 認証メソッド・フィルタ <span id="auth-method-filters"></span>
|
||||
|
||||
認証メソッド・フィルタは、[HTTP Basic 認証](https://ja.wikipedia.org/wiki/Basic%E8%AA%8D%E8%A8%BC)、
|
||||
[OAuth 2](https://oauth.net/2/) など、様々なメソッドを使ってユーザを認証するために使われるものです。
|
||||
[OAuth 2](https://oauth.net/2/) などの様々なメソッドを使ってユーザを認証するために使われるものです。
|
||||
これらのフィルタ・クラスはすべて `yii\filters\auth` 名前空間の下にあります。
|
||||
|
||||
次の例は、[[yii\filters\auth\HttpBasicAuth]] の使い方を示すもので、HTTP Basic 認証に基づくアクセス・トークンを使ってユーザを認証しています。
|
||||
|
||||
@@ -107,8 +107,8 @@ DB と関係しないフィクスチャ (例えば、何らかのファイルや
|
||||
|
||||
## フィクスチャを使用する
|
||||
|
||||
[Codeception](https://codeception.com/) を使ってコードをテストしている場合は、フィクスチャのローディングとアクセスについては、
|
||||
内蔵されているサポートを使用することが出来ます。
|
||||
[Codeception](https://codeception.com/) を使ってコードをテストしている場合は、
|
||||
フィクスチャのローディングとアクセスについて、内蔵されているサポートを使用することが出来ます。
|
||||
|
||||
その他のテスト・フレームワークを使っている場合は、テスト・ケースで [[yii\test\FixtureTrait]]
|
||||
を使って同じ目的を達することが出来ます。
|
||||
|
||||
@@ -9,7 +9,7 @@ POST や GET のパラメータなどの環境変数を設定しておいてか
|
||||
経験則から言うと、特別なウェブ・サーバ設定や JavaScript による複雑な UI を持たない場合は、
|
||||
機能テストの方を選ぶべきです。
|
||||
|
||||
機能テストは Codeception フレームワークの助けを借りて実装されています。これにつては、優れたドキュメントがあります。
|
||||
機能テストは Codeception フレームワークの助けを借りて実装されています。これについては、優れたドキュメントがあります。
|
||||
|
||||
- [Codeception for Yii framework](https://codeception.com/for/yii)
|
||||
- [Codeception Functional Tests](https://codeception.com/docs/04-FunctionalTests)
|
||||
|
||||
@@ -9,7 +9,7 @@ Yii における単体テストは、PHPUnit と Codeception (こちらはオプ
|
||||
|
||||
- [Codeception for Yii framework](https://codeception.com/for/yii)
|
||||
- [Codeception Unit Tests](https://codeception.com/docs/05-UnitTests)
|
||||
- [PHPUnit のドキュメントの第2章以降](https://phpunit.readthedocs.io/en/9.5/writing-tests-for-phpunit.html).
|
||||
- [第2章から始まる PHPUnit のドキュメント](https://phpunit.readthedocs.io/en/9.5/writing-tests-for-phpunit.html)
|
||||
|
||||
## ベーシック・テンプレート、アドバンスト・テンプレートのテストを実行する
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ Yii は電子メールの作成と送信をサポートしています。
|
||||
実際のメール送信メカニズムはエクステンションによって提供されなければなりません。
|
||||
と言うのは、メール送信はプロジェクトが異なるごとに異なる実装が必要とされるでしょうし、通常、外部のサービスやライブラリに依存するものだからです。
|
||||
|
||||
ごく一般的な場合であれば、[yii2-swiftmailer](https://www.yiiframework.com/extension/yiisoft/yii2-swiftmailer) 公式エクステンションを使用することが出来ます。
|
||||
ごく一般的な場合であれば、yii2-symfonymailer](https://www.yiiframework.com/extension/yiisoft/yii2-symfonymailer) 公式エクステンションを使用することが出来ます。
|
||||
|
||||
|
||||
構成
|
||||
@@ -22,15 +22,10 @@ return [
|
||||
//....
|
||||
'components' => [
|
||||
'mailer' => [
|
||||
'class' => 'yii\swiftmailer\Mailer',
|
||||
'class' => 'yii\symfonymailer\Mailer',
|
||||
'useFileTransport' => false,
|
||||
'transport' => [
|
||||
'class' => 'Swift_SmtpTransport',
|
||||
'encryption' => 'tls',
|
||||
'host' => 'your_mail_server_host',
|
||||
'port' => 'your_smtp_port',
|
||||
'username' => 'your_username',
|
||||
'password' => 'your_password',
|
||||
'dsn' => 'smtp://user:pass@smtp.example.com:465',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user