Docs ja update 0127 [ci skip] (#13463)

* docs/guide-ja/intro-yii.md, docs/guide-ja/output-client-scripts.md updated [ci skip]

* docs/guide-ja/output-data-providers.md and output-data-widgets.md updated [ci skip]

* docs/guide-ja updates (WIP) [ci skip]
This commit is contained in:
Nobuo Kihara
2017-01-29 00:32:23 +09:00
committed by Alexander Makarov
parent 1cc327f108
commit 015f14e374
11 changed files with 251 additions and 81 deletions

View File

@ -178,14 +178,14 @@ RESTful ウェブサービス
ウィジェット ウィジェット
------------ ------------
* GridView: **未定** デモページへリンク * [GridView](http://www.yiiframework.com/doc-2.0/yii-grid-gridview.html)
* ListView: **未定** デモページへリンク * [ListView](http://www.yiiframework.com/doc-2.0/yii-widgets-listview.html)
* DetailView: **未定** デモページへリンク * [DetailView](http://www.yiiframework.com/doc-2.0/yii-widgets-detailview.html)
* ActiveForm: **未定** デモページへリンク * [ActiveForm](http://www.yiiframework.com/doc-2.0/guide-input-forms.html#activerecord-based-forms-activeform)
* Pjax: **未定** デモページへリンク * [Pjax](http://www.yiiframework.com/doc-2.0/yii-widgets-pjax.html)
* Menu: **未定** デモページへリンク * [Menu](http://www.yiiframework.com/doc-2.0/yii-widgets-menu.html)
* LinkPager: **未定** デモページへリンク * [LinkPager](http://www.yiiframework.com/doc-2.0/yii-widgets-linkpager.html)
* LinkSorter: **未定** デモページへリンク * [LinkSorter](http://www.yiiframework.com/doc-2.0/yii-widgets-linksorter.html)
* [Bootstrap ウィジェット](https://github.com/yiisoft/yii2-bootstrap/blob/master/docs/guide-ja/README.md) * [Bootstrap ウィジェット](https://github.com/yiisoft/yii2-bootstrap/blob/master/docs/guide-ja/README.md)
* [jQuery UI ウィジェット](https://github.com/yiisoft/yii2-jui/blob/master/docs/guide-ja/README.md) * [jQuery UI ウィジェット](https://github.com/yiisoft/yii2-jui/blob/master/docs/guide-ja/README.md)

View File

@ -46,7 +46,7 @@ Yii は現在、利用可能な二つのメジャーバージョン、すなわ
必要条件と前提条件 必要条件と前提条件
------------------ ------------------
Yii 2.0 は PHP 5.4.0 以上を必要とします。 Yii 2.0 は PHP 5.4.0 以上を必要とし、PHP 7 の最新バージョンで最高の力を発揮します。
個々の機能に対する詳細な必要条件は、全ての Yii リリースに含まれている必要条件チェッカを走らせることによって知ることが出来ます。 個々の機能に対する詳細な必要条件は、全ての Yii リリースに含まれている必要条件チェッカを走らせることによって知ることが出来ます。
Yii を使うためには、オブジェクト指向プログラミング (OOP) の基本的な知識が必要です。 Yii を使うためには、オブジェクト指向プログラミング (OOP) の基本的な知識が必要です。

View File

@ -1,70 +1,85 @@
クライアントスクリプトを扱う クライアントスクリプトを扱う
============================ ============================
> Note: この節はまだ執筆中です。 今日のウェブアプリケーションでは、静的な HTML ページがレンダリングされてブラウザに送信されるだけでなく、
JavaScript によって、既存の要素を操作したり、新しいコンテントを AJAX でロードしたりして、ブラウザに表示されるページを修正します。
この節では、JavaScript と CSS をウェブサイトに追加したり、それらを動的に調整するために Yii によって提供されているメソッドを説明します。
### スクリプトを登録する ## スクリプトを登録する <span id="register-scripts"></span>
[[yii\web\View]] オブジェクトに対してスクリプトを登録することが出来ます。 [[yii\web\View]] オブジェクトを扱う際には、フロントエンドスクリプトを動的に登録することが出来ます。
このための専用のメソッドが二つあります。 このための専用のメソッドが二つあります。
すなわち、インラインスクリプトのための [[yii\web\View::registerJs()|registerJs()]] と、外部スクリプトのための [[yii\web\View::registerJsFile()|registerJsFile()]] です。
インラインスクリプトは、設定のためや、動的に生成されるコードのために有用なものです。 - インラインスクリプトのための [[yii\web\View::registerJs()|registerJs()]]
次のようにして、これらを追加するメソッドを使うことが出来ます。 - 外部スクリプトのための [[yii\web\View::registerJsFile()|registerJsFile()]]
### インラインスクリプトを登録する <span id="inline-scripts"></span>
インラインスクリプトは、設定や、動的に生成されるコードのために有用なものです。
また、[ウィジェット](structure-widgets.md) に含まれる再利用可能なフロントエンドコードによって生成されるコード断片もインラインスクリプトです。
インラインスクリプトを追加するためのメソッド [[yii\web\View::registerJs()|registerJs()]] は、次のようにして使うことが出来ます。
```php ```php
$this->registerJs("var options = ".json_encode($options).";", View::POS_END, 'my-options'); $this->registerJs(
"$('#myButton').on('click', function() { alert('ボタンがクリックされました'); });",
View::POS_READY,
'my-button-handler'
);
``` ```
最初の引数は、ページに挿入したい実際の JS コードです。 最初の引数は、ページに挿入したい実際の JS コードです。これが `<script>` タグに包まれて挿入されます。
二番目の引数は、スクリプトがページのどの場所に挿入されるべきかを決定します。 二番目の引数は、スクリプトがページのどの位置に挿入されるべきかを決定します。
取りうる値は以下のとおりです。 取りうる値は以下のとおりです。
- [[yii\web\View::POS_HEAD|View::POS_HEAD]] - head セクション。 - [[yii\web\View::POS_HEAD|View::POS_HEAD]] - head セクション。
- [[yii\web\View::POS_BEGIN|View::POS_BEGIN]] - 開始の `<body>` の直後。 - [[yii\web\View::POS_BEGIN|View::POS_BEGIN]] - 開始の `<body>` の直後。
- [[yii\web\View::POS_END|View::POS_END]] - 終了の `</body>` の直前。 - [[yii\web\View::POS_END|View::POS_END]] - 終了の `</body>` の直前。
- [[yii\web\View::POS_READY|View::POS_READY]] - ドキュメントの `ready` イベントで実行するコード。これを指定すると、[[yii\web\JqueryAsset|jQuery]] が自動的に登録されます - [[yii\web\View::POS_READY|View::POS_READY]] - [ドキュメントの `ready` イベント](http://learn.jquery.com/using-jquery-core/document-ready/) でコードを実行するための指定
- [[yii\web\View::POS_LOAD|View::POS_LOAD]] - ドキュメントの `load` イベントで実行するコード。これを指定すると、[[yii\web\JqueryAsset|jQuery]] が自動的に登録されます。 これを指定すると、[[yii\web\JqueryAsset|jQuery]] が自動的に登録され、コードは適切な jQuery コードの中に包まれます。
これがデフォルトの位置指定です。
- [[yii\web\View::POS_LOAD|View::POS_LOAD]] - [ドキュメントの `load` イベント](http://learn.jquery.com/using-jquery-core/document-ready/) でコードを実行するための指定。
上記と同じく、これを指定すると、[[yii\web\JqueryAsset|jQuery]] が自動的に登録されます。
最後の引数は、スクリプトのユニークな ID です。これによってコードブロックを一意に特定し、同じ ID のスクリプトが既にある場合は、新しいものを追加するのでなく、それを置き換えます。 最後の引数は、スクリプトのコードブロックを一意に特定するために使われるスクリプトのユニークな ID です。
同じ ID のスクリプトが既にある場合は、新しいものを追加するのでなく、それを置き換えます。
ID を指定しない場合は、JS コードそれ自身が ID として扱われます。 ID を指定しない場合は、JS コードそれ自身が ID として扱われます。
この ID によって、同じコードが複数回登録されるのを防止します。
### スクリプトファイルを登録する <span id="script-files"></span>
[[yii\web\View::registerJsFile()|registerJsFile()]] の引数は、[[yii\web\View::registerCssFile()|registerCssFile()]] の引数と同様なものです。
以下に示す例では、`main.js` ファイルを、[[yii\web\JqueryAsset]] への依存関係とともに、登録します。
これは、`main.js` ファイルは `jquery.js` の後に追加される、ということを意味します。
このような依存関係の仕様が無ければ、`main.js``jquery.js` の間の相対的な順序は未定義となり、コードは動作しなくなるでしょう。
外部スクリプトは次のようにして追加することが出来ます。 外部スクリプトは次のようにして追加することが出来ます。
```php ```php
$this->registerJsFile('http://example.com/js/main.js', ['depends' => [\yii\web\JqueryAsset::className()]]); $this->registerJsFile(
'@web/js/main.js',
['depends' => [\yii\web\JqueryAsset::className()]]
);
``` ```
[[yii\web\View::registerJsFile()|registerJsFile()]] の引数は [[yii\web\View::registerCssFile()|registerCssFile()]] のそれと同じです。 これによって、アプリケーションの [base URL](concept-aliases.md#predefined-aliases) の下に配置されている `/js/main.js` スクリプトを読み込むタグが追加されます。
上記の例では、`main.js` ファイルを `JqueryAsset` に依存するものとして登録しています。
これは、`main.js` ファイルが `jquery.js` の後に追加されるようになることを意味します。
この依存関係を指定しない場合は、`main.js``jquery.js` の相対的な順序は未定義となります。
[[yii\web\View::registerCssFile()|registerCssFile()]] と同じように、外部 JS ファイルを登録するのに [[yii\web\View::registerJsFile()|registerJsFile()]] を使わずに、[アセットバンドル](structure-assets.md) を使うことが強く推奨されます。 ただし、外部 JS ファイルを登録するのには、 [[yii\web\View::registerJsFile()|registerJsFile()]] を使わずに、[アセットバンドル](structure-assets.md) を使うことが強く推奨されます。
なぜなら、そうする方が、柔軟性も高く、依存関係の構成も粒度を細かく出来るからです。
また、アセットバンドルを使えば、複数の JS ファイルを結合して圧縮すること
(アクセスの多いウェブサイトではそうすることが望まれます) が可能になります。
## CSS を登録する <span id="register-css"></span>
### アセットバンドルを登録する Javascript と同様に、[[yii\web\View::registerCss()|registerCss()]]
または [[yii\web\View::registerCssFile()|registerCssFile()]] を使って CSS を登録することが出来ます。
前者は CSS のコードブロックを登録し、後者は外部 CSS ファイルを登録するものです。
既に述べたように、CSS と JavaScript を直接に使う代りにアセットバンドルを使うことが望まれます。 ### インライン CSS を登録する <span id="inline-css"></span>
アセットバンドルを定義する方法の詳細は、ガイドの [アセットマネージャ](structure-assets.md) の節で知ることが出来ます。
既に定義されているアセットバンドルを使うことについては、次のように非常に簡明です。
```php
\frontend\assets\AppAsset::register($this);
```
### CSS を登録する
[[yii\web\View::registerCss()|registerCss()]] または [[yii\web\View::registerCssFile()|registerCssFile()]] を使って CSS を登録することが出来ます。
前者は CSS のコードブロックを登録し、後者は外部 CSS ファイルを登録します。
例えば、
```php ```php
$this->registerCss("body { background: #f00; }"); $this->registerCss("body { background: #f00; }");
``` ```
上記のコードは、以下の内容をページの head セクションに追加する結果となります。 上記のコードによって、結果として、下記の出力がページの `<head>` セクションに追加されます。
```html ```html
<style> <style>
@ -72,27 +87,130 @@ body { background: #f00; }
</style> </style>
``` ```
`style` タグに追加のプロパティを指定したい場合は、三番目の引数として「名前-値」のペアの配列を渡します。 `style` タグに追加の属性を指定したい場合は、名前-値 の配列を二番目の引数として渡します。
`style` タグが一つだけになることを保証する必要がある場合は、メタタグの説明で言及したように、4番目の引数を使います。 最後の引数は、スタイルのブロックを一意に特定するために使われるユニークな ID です。
同じスタイルがコードの別の箇所で重複して登録されたとしても、このスタイルのブロックが一度だけ追加されることを保証するものです。
### CSS ファイルを登録する <span id="css-files"></span>
CSS ファイルは次のようにして登録することが出来ます。
```php ```php
$this->registerCssFile("http://example.com/css/themes/black-and-white.css", [ $this->registerCssFile("@web/css/themes/black-and-white.css", [
'depends' => [BootstrapAsset::className()], 'depends' => [\yii\bootstrap\BootstrapAsset::className()],
'media' => 'print', 'media' => 'print',
], 'css-print-theme'); ], 'css-print-theme');
``` ```
上記のコードは、ページの head セクションに CSS ファイルへのリンクを追加します。 上記のコードは `/css/themes/black-and-white.css` という CSS ファイルに対するリンクをページの `<head>` セクションに追加します。
* 最初の引数が登録されるべき CSS ファイルを指定します。 * 最初の引数が登録される CSS ファイルを指定します。
* 二番目の引数は、結果として生成される `<link>` タグの HTML 属性を指定するものです。 この例における `@web` in this example is an [アプリケーションのベース URL に対するエイリアス](concept-aliases.md#predefined-aliases) です。
ただし、`depends` オプションは特別な処理を受けます。 * 二番目の引数は、結果として出力される `<link>` タグの HTML 属性を指定するものです。
このオプションは、この CSS ファイルが依存するアセットバンドルを指定するものです。 ただし、`depends` というオプションは特別な処理を受けます。
の例では、依存するアセットバンドルは [[yii\bootstrap\BootstrapAsset|BootstrapAsset]] です。 れは、この CSS ファイルが依存するアセットバンドルを指定するものです。
れは、この CSS ファイルが、[[yii\bootstrap\BootstrapAsset|BootstrapAsset]] に含まれる CSS ファイルの *後* に追加されることを意味します。 の例の場合は、[[yii\bootstrap\BootstrapAsset|BootstrapAsset]] が依存するアセットバンドルです。
* 最後の引数は、この CSS ファイルを特定するための ID を指定するものです。 これは、この CSS ファイルが [[yii\bootstrap\BootstrapAsset|BootstrapAsset]] に属する CSS ファイルの*後に*追加されることを意味します。
指定されていない場合は、CSS ファイルの URL が代りに ID として使用されます。 * 最後の引数はこの CSS ファイルを特定する ID を指定するものです。
省略された場合は、CSS ファイルの URL が代りに ID として使用されます。
外部 CSS ファイルを登録するのには、 [[yii\web\View::registerCssFile()|registerCssFile()]] を使わずに、[アセットバンドル](structure-assets.md) を使うことが強く推奨されます。
アセットバンドルを使えば、複数の CSS ファイルを結合して圧縮すること
(アクセスの多いウェブサイトではそうすることが望まれます) が可能になります。
また、アプリケーションの全てのアセットの依存関係を一ヶ所で構成することが出来るため、
より大きな柔軟性を得ることが出来ます。
## アセットバンドルを登録する <span id="asset-bundles"></span>
既に述べたように、CSS ファイルと JavaScript ファイルを直接に登録する代りにアセットバンドルを使うことが推奨されます。
アセットバンドルを定義する方法の詳細は、ガイドの [アセット](structure-assets.md) の節で知ることが出来ます。
既に定義されているアセットバンドルの使い方は、次のように非常に単純明快です。
```php
\frontend\assets\AppAsset::register($this);
```
上記のコードでは、ビューファイルのコンテキストにおいて、`AppAsset` バンドルが (`$this` で表される) 現在のビューに対して登録されています。
ウィジェットの中からアセットバンドルを登録するときは、ウィジェットの [[yii\base\Widget::$view|$view]]
を代りに渡します (`$this->view`)。
## 動的な Javascript を生成する <span id="dynamic-js"></span>
ビューファイルでは、HTML コードが直接に書き出されのではなく、ビューの変数に依存して、PHP のコードによって生成されることがよくあります。
生成された HTML を Javascript によって操作するためには、JS コードも同様に動的な部分を含まなければなりません。
例えば、jQuery セレクタの ID などがそうです。
、ビューの変数にIn view files often the HTML code is not written out directl
PHP の変数を JS コードに挿入するためには、変数の値を適切にエスケープする必要があります。
JS コードを専用の JS ファイルの中に置くのではなく、HTML に挿入する場合は特にそうです。
Yii は、この目的のために、[[yii\helpers\Json|Json]] ヘルパの [[yii\helpers\Json::htmlEncode()|htmlEncode()]] メソッドを提供しています。
その使用方法は、以下の例の中で示されています。
### グローバルな JavaScript の構成情報を登録する <span id="js-configuration"></span>
この例では、配列を使って、グローバルな構成情報のパラメータをアプリケーションの
PHP のパートから JS のフロントエンドコードに渡します。
```php
$options = [
'appName' => Yii::$app->name,
'baseUrl' => Yii::$app->request->baseUrl,
'language' => Yii::$app->language,
// ...
];
$this->registerJs(
"var yiiOptions = ".\yii\helpers\Json::htmlEncode($options).";",
View::POS_HEAD,
'yiiOptions'
);
```
上記のコードは、次のような JavaScript の変数定義を含む `<script>` タグを登録します。
```javascript
var yiiOptions = {"appName":"My Yii Application","baseUrl":"/basic/web","language":"en"};
```
このようにすれば、あなたの Javascript コードで、これらの構成情報に `yiiOptions.baseUrl``yiiOptions.language`
のようにしてアクセスすることが出来るようになります。.
### 翻訳されたメッセージを渡す <span id="translated-messages"></span>
あなたの JavaScript が何らかのイベントに反応してメッセージを表示する必要がある、という状況に遭遇するかも知れません。
複数の言語で動作するアプリケーションでは、この文字列は、現在のアプリケーシの言語に翻訳されなければなりません。
これを達成する一つの方法は、Yii によって提供されている [メッセージ翻訳機能] (tutorial-i18n.md#message-translation)
を使って、その結果を JavaScript コードに渡すことです。
```php
$message = \yii\helpers\Json::htmlEncode(
\Yii::t('app', 'Button clicked!')
);
$this->registerJs(<<<JS
$('#myButton').on('click', function() { alert( $message ); });",
JS
);
```
上記のサンプルコードは、可読性を高めるために、PHP の [ヒアドキュメント構文](http://php.net/manual/ja/language.types.string.php#language.types.string.syntax.heredoc) を使っています。
また、ヒアドキュメントは、たいていの IDE で、より良い構文ハイライトが可能にしてくれるので、
インライン JavaScript、特に一行に収まらないものを書くときに推奨される方法です。
変数 `$message` は PHP で生成され、[[yii\helpers\Json::htmlEncode|Json::htmlEncode]] のおかげで、適切な JS 構文の文字列を含むものになります。
それを JavaScript コードに挿入して、`alert()` の関数呼び出しに動的な文字列を渡すことが出来ます。
> Note: ヒアドキュメントを使う場合は、JS コード中の変数名に注意してください。
> `$` で始まる変数は、PHP の変数として解釈され、その値によって置き換えられる可能性があります。
> ただし、`$(` または `$.` という形式の jQuery 関数は PHP 変数として解釈される心配は無く、安全に使うことが出来ます。
## `yii.js` スクリプト <span id="yii.js"></span>
> Note: このセクションはまだ書かれていません。
> このセクションは、`yii.js` によって提供される以下の機能についての説明を含むはずのものです。
>
> - Yii JavaScript モジュール
> - CSRF パラメータの処理
> - `data-confirm` ハンドラ
> - `data-method` ハンドラ
> - スクリプトのフィルタリング
> - リダイレクトの処理
外部 CSS ファイルを登録するためには、[[yii\web\View::registerCssFile()|registerCssFile()]] を使うのではなく、[アセットバンドル](structure-assets.md) を使うことが強く推奨されます。
アセットバンドルを使うと、複数の CSS ファイルを結合して圧縮することが可能になります。
トラフィックの多いウェブサイトではそうすることが望まれます。

View File

@ -34,7 +34,7 @@ $totalCount = $provider->getTotalCount();
データプロバイダのページネーションと並べ替えの振る舞いを指定するためには、その [[yii\data\BaseDataProvider::pagination|pagination]] と [[yii\data\BaseDataProvider::sort|sort]] のプロパティを構成します。 データプロバイダのページネーションと並べ替えの振る舞いを指定するためには、その [[yii\data\BaseDataProvider::pagination|pagination]] と [[yii\data\BaseDataProvider::sort|sort]] のプロパティを構成します。
二つのプロパティは、それぞれ、[[yii\data\Pagination]] と [[yii\data\Sort]] の構成情報に対応します。 二つのプロパティは、それぞれ、[[yii\data\Pagination]] と [[yii\data\Sort]] の構成情報に対応します。
これらを false に設定して、ページネーションや並べ替えの機能を無効にすることも出来ます。 これらを `false` に設定して、ページネーションや並べ替えの機能を無効にすることも出来ます。
[データウィジェット](output-data-widgets.md)、例えば [[yii\grid\GridView]] は、`dataProvider` という名前のプロパティを持っており、これにデータプロバイダのインスタンスを受け取らせて、それが提供するデータを表示させることが出来ます。 [データウィジェット](output-data-widgets.md)、例えば [[yii\grid\GridView]] は、`dataProvider` という名前のプロパティを持っており、これにデータプロバイダのインスタンスを受け取らせて、それが提供するデータを表示させることが出来ます。
例えば、 例えば、

View File

@ -6,7 +6,7 @@ Yii はデータを表示するために使うことが出来る一連の [ウ
それに対して、[ListView](#list-view) と [GridView](#grid-view) は、複数のデータレコードをリストまたはテーブルで表示することが出来るもので、ページネーション、並べ替え、フィルタリングなどの機能を提供するものです。 それに対して、[ListView](#list-view) と [GridView](#grid-view) は、複数のデータレコードをリストまたはテーブルで表示することが出来るもので、ページネーション、並べ替え、フィルタリングなどの機能を提供するものです。
DetailView DetailView <a name="detail-view"></a>
---------- ----------
DetailView は単一のデータ [[yii\widgets\DetailView::$model|モデル]] の詳細を表示します。 DetailView は単一のデータ [[yii\widgets\DetailView::$model|モデル]] の詳細を表示します。
@ -23,19 +23,42 @@ DetailView は [[yii\widgets\DetailView::$attributes]] プロパティを使っ
echo DetailView::widget([ echo DetailView::widget([
'model' => $model, 'model' => $model,
'attributes' => [ 'attributes' => [
'title', // title 属性 (平文テキストで) 'title', // title 属性 (平文テキストで)
'description:html', // description 属性は HTML としてフォーマットされる 'description:html', // description 属性は HTML としてフォーマットされる
[ // モデルの所有者の名前 [ // モデルの所有者の名前
'label' => '所有者', 'label' => '所有者',
'value' => $model->owner->name, 'value' => $model->owner->name,
'contentOptions' => ['class' => 'bg-red'], // 値のタグをカスタマイズする HTML 属性
'captionOptions' => ['tooltip' => 'Tooltip'], // ラベルのタグをカスタマイズする HTML 属性
], ],
'created_at:datetime', // 作成日は datetime としてフォーマットされる 'created_at:datetime', // 作成日は datetime としてフォーマットされる
], ],
]); ]);
``` ```
[[yii\widgets\GridView|GridView]] が一組のモデルを処理するのとは異なって、
[[yii\widgets\DetailView|DetailView]] は一つのモデルしか処理しないということを覚えておいてください。
表示すべきモデルはビューの変数としてアクセスできる `$model` 一つだけですから、たいていの場合、クロージャを使用する必要はありません。
ListView しかし、クロージャが役に立つ場合もあります。例えば、`visible` が指定されており、それが `false` と評価される場合には
`value` の計算を避けたい場合です。
```php
echo DetailView::widget([
'model' => $model,
'attributes' => [
[
'attribute' => 'owner',
'value' => function ($model) {
return $model->owner->name;
},
'visible' => \Yii::$app->user->can('posts.owner.view'),
],
],
]);
```
ListView <a name="list-view"></a>
-------- --------
[[yii\widgets\ListView|ListView]] ウィジェットは、[データプロバイダ](output-data-providers.md) からのデータを表示するのに使用されます。 [[yii\widgets\ListView|ListView]] ウィジェットは、[データプロバイダ](output-data-providers.md) からのデータを表示するのに使用されます。
@ -267,7 +290,7 @@ echo GridView::widget([
コールバックのシグニチャは [[yii\grid\ActionColumn::createUrl()]] のそれと同じでなければなりません。 コールバックのシグニチャは [[yii\grid\ActionColumn::createUrl()]] のそれと同じでなければなりません。
このプロパティが設定されていないときは、ボタンの URL は [[yii\grid\ActionColumn::createUrl()]] を使って生成されます。 このプロパティが設定されていないときは、ボタンの URL は [[yii\grid\ActionColumn::createUrl()]] を使って生成されます。
- [[yii\grid\ActionColumn::visibleButtons|visibleButtons]] は、各ボタンの可視性の条件を定義する配列です。 - [[yii\grid\ActionColumn::visibleButtons|visibleButtons]] は、各ボタンの可視性の条件を定義する配列です。
配列のキーはボタンの名前 (波括弧を除く) であり、値は真偽値 true/false または無名関数です。 配列のキーはボタンの名前 (波括弧を除く) であり、値は真偽値 `true`/`false` または無名関数です。
ボタンの名前がこの配列の中で指定されていない場合は、デフォルトで、ボタンが表示されます。 ボタンの名前がこの配列の中で指定されていない場合は、デフォルトで、ボタンが表示されます。
コールバックは次のシグニチャを使わなければなりません。 コールバックは次のシグニチャを使わなければなりません。
@ -338,7 +361,8 @@ echo GridView::widget([
データをフィルタリングするためには、GridView は検索基準を表す [モデル](structure-models.md) を必要とします。 データをフィルタリングするためには、GridView は検索基準を表す [モデル](structure-models.md) を必要とします。
検索基準は、通常は、グリッドビューのテーブルのフィルタのフィールドから取得されます。 検索基準は、通常は、グリッドビューのテーブルのフィルタのフィールドから取得されます。
[アクティブレコード](db-active-record.md) を使用している場合は、必要な機能を提供する検索用のモデルクラスを作成するのが一般的なプラクティスです (あなたに代って [Gii](start-gii.md) が生成してくれます)。 [アクティブレコード](db-active-record.md) を使用している場合は、必要な機能を提供する検索用のモデルクラスを作成するのが一般的なプラクティスです (あなたに代って [Gii](start-gii.md) が生成してくれます)。
このクラスは、検索のためのバリデーション規則を定義し、検索基準に従って修正されたクエリを持つデータプロバイダを返す `search()` メソッドを提供するものです。 このクラスが、グリッドビューのテーブルに表示されるフィルタコントロールのための検証規則を定義し、
検索基準に従って修正されたクエリを持つデータプロバイダを返す `search()` メソッドを提供します。
`Post` モデルに対して検索機能を追加するために、次の例のようにして、`PostSearch` モデルを作成することが出来ます。 `Post` モデルに対して検索機能を追加するために、次の例のようにして、`PostSearch` モデルを作成することが出来ます。

View File

@ -21,7 +21,7 @@ echo $formatter->asEmail('cebe@example.com');
echo $formatter->asBoolean(true); echo $formatter->asBoolean(true);
// it also handles display of null values: // it also handles display of null values:
// 出力: (Not set) // 出力: (not set)
echo $formatter->asDate(null); echo $formatter->asDate(null);
``` ```

View File

@ -26,7 +26,7 @@ Yii は上記の全ての認証方法をサポートしています。新しい
3. [[yii\web\User::identityClass|ユーザアイデンティティクラス]] において [[yii\web\IdentityInterface::findIdentityByAccessToken()]] を実装します。 3. [[yii\web\User::identityClass|ユーザアイデンティティクラス]] において [[yii\web\IdentityInterface::findIdentityByAccessToken()]] を実装します。
ステップ 1 は必須ではありませんが、ステートレスであるべき RESTful API のために推奨されます。 ステップ 1 は必須ではありませんが、ステートレスであるべき RESTful API のために推奨されます。
[[yii\web\User::enableSession|enableSession]] が false である場合、ユーザの認証ステータスがセッションを使ってリクエストをまたいで存続することはありません。 [[yii\web\User::enableSession|enableSession]] が `false` である場合、ユーザの認証ステータスがセッションを使ってリクエストをまたいで存続することはありません。
その代りに、すべてのリクエストに対して認証が実行されます。このことは、ステップ 2 と 3 によって達成されます。 その代りに、すべてのリクエストに対して認証が実行されます。このことは、ステップ 2 と 3 によって達成されます。
> Tip: RESTful API をアプリケーションの形式で開発する場合は、アプリケーションの構成情報で `user` アプリケーションコンポーネント(structure-application-components.md) の [[yii\web\User::enableSession|enableSession]] プロパティを構成することが出来ます。 > Tip: RESTful API をアプリケーションの形式で開発する場合は、アプリケーションの構成情報で `user` アプリケーションコンポーネント(structure-application-components.md) の [[yii\web\User::enableSession|enableSession]] プロパティを構成することが出来ます。

View File

@ -62,6 +62,10 @@ as `app\models\User`, the controller knows which model can be used for fetching
上記の構成情報は、主として、`user` コントローラの URL 規則を追加して、ユーザのデータが綺麗な URL と意味のある HTTP 動詞によってアクセスおよび操作できるようにするものです。 上記の構成情報は、主として、`user` コントローラの URL 規則を追加して、ユーザのデータが綺麗な URL と意味のある HTTP 動詞によってアクセスおよび操作できるようにするものです。
> Info: Yii はコントローラの名前を自動的に複数形にしてエンドポイントとして使用します (下の「試してみる」(#trying-it-out) を参照してください)。
> この振る舞いは [[yii\rest\UrlRule::$pluralize]] プロパティを使って構成することが可能です。
## JSON の入力を可能にする <span id="enabling-json-input"></span> ## JSON の入力を可能にする <span id="enabling-json-input"></span>
API が JSON 形式で入力データを受け取ることが出来るように、`request` [アプリケーションコンポーネント](structure-application-components.md) の [[yii\web\Request::$parsers|parsers]] プロパティを構成して、JSON 入力のために [[yii\web\JsonParser]] を使うようにします。 API が JSON 形式で入力データを受け取ることが出来るように、`request` [アプリケーションコンポーネント](structure-application-components.md) の [[yii\web\Request::$parsers|parsers]] プロパティを構成して、JSON 入力のために [[yii\web\JsonParser]] を使うようにします。
@ -93,9 +97,6 @@ API が JSON 形式で入力データを受け取ることが出来るように
* `OPTIONS /users`: エンドポイント `/users` に関してサポートされている動詞を示す * `OPTIONS /users`: エンドポイント `/users` に関してサポートされている動詞を示す
* `OPTIONS /users/123`: エンドポイント `/users/123` に関してサポートされている動詞を示す * `OPTIONS /users/123`: エンドポイント `/users/123` に関してサポートされている動詞を示す
> Info: Yii はコントローラの名前を自動的に複数形にしてエンドポイントとして使用します。
> この振る舞いは [[yii\rest\UrlRule::$pluralize]] プロパティを使って構成することが可能です。
作成した API は、次のように、`curl` コマンドでアクセスすることが出来ます。 作成した API は、次のように、`curl` コマンドでアクセスすることが出来ます。
``` ```

View File

@ -58,4 +58,4 @@ public function behaviors()
* `X-Rate-Limit-Remaining` - 現在の期間において残っている許可されているリクエスト数 * `X-Rate-Limit-Remaining` - 現在の期間において残っている許可されているリクエスト数
* `X-Rate-Limit-Reset` - 許可されているリクエストの最大数にリセットされるまで待たなければならない秒数 * `X-Rate-Limit-Reset` - 許可されているリクエストの最大数にリセットされるまで待たなければならない秒数
これらのヘッダは、上記のコード例で示されているように、[[yii\filters\RateLimiter::enableRateLimitHeaders]] を false に設定することで無効にすることが出来ます。 これらのヘッダは、上記のコード例で示されているように、[[yii\filters\RateLimiter::enableRateLimitHeaders]] を `false` に設定することで無効にすることが出来ます。

View File

@ -93,7 +93,7 @@ public function fields()
### `extraFields()` をオーバーライドする<span id="overriding-extra-fields"></span> ### `extraFields()` をオーバーライドする<span id="overriding-extra-fields"></span>
デフォルトでは、[[yii\base\Model::extraFields()]] は何も返さず、[[yii\db\ActiveRecord::extraFields()]] は DB から取得されたリレーションの名前を返します。 デフォルトでは、[[yii\base\Model::extraFields()]] は空の配列を返し、[[yii\db\ActiveRecord::extraFields()]] は DB から取得されたリレーションの名前を返します。
`extraFields()` によって返されるデータの形式は `fields()` のそれと同じです。 `extraFields()` によって返されるデータの形式は `fields()` のそれと同じです。
通常、`extraFields()` は、主として、値がオブジェクトであるフィールドを指定するのに使用されます。 通常、`extraFields()` は、主として、値がオブジェクトであるフィールドを指定するのに使用されます。
@ -140,23 +140,41 @@ HATEOAS のキーポイントは、リソースデータが API によって提
例えば、 例えば、
```php ```php
use yii\db\ActiveRecord; use yii\base\Model;
use yii\web\Link; use yii\web\Link; // JSON ハイパーメディア API 言語に定義されているリンクオブジェクトを表す
use yii\web\Linkable; use yii\web\Linkable;
use yii\helpers\Url; use yii\helpers\Url;
class User extends ActiveRecord implements Linkable class UserResource extends Model implements Linkable
{ {
public $id;
public $email;
//...
public function fields()
{
return ['id', 'email'];
}
public function extraFields()
{
return ['profile'];
}
public function getLinks() public function getLinks()
{ {
return [ return [
Link::REL_SELF => Url::to(['user/view', 'id' => $this->id], true), Link::REL_SELF => Url::to(['user/view', 'id' => $this->id], true),
'edit' => Url::to(['user/view', 'id' => $this->id], true),
'profile' => Url::to(['user/profile/view', 'id' => $this->id], true),
'index' => Url::to(['users'], true),
]; ];
} }
} }
``` ```
`User` オブジェクトがレスポンスで返されるとき、レスポンスはそのユーザに関連するリンクを表現する `_links` 要素を含むことになります。 `UserResource` オブジェクトがレスポンスで返されるとき、レスポンスはそのユーザに関連するリンクを表現する `_links` 要素を含むことになります。
例えば、 例えば、
``` ```
@ -167,6 +185,15 @@ class User extends ActiveRecord implements Linkable
"_links" => { "_links" => {
"self": { "self": {
"href": "https://example.com/users/100" "href": "https://example.com/users/100"
},
"edit": {
"href": "https://example.com/users/100"
},
"profile": {
"href": "https://example.com/users/profile/100"
},
"index": {
"href": "https://example.com/users"
} }
} }
} }

View File

@ -72,7 +72,7 @@
エンドポイントの URL ではコントローラ ID `user``users` という複数形で出現していることに気が付いたかもしれません。 エンドポイントの URL ではコントローラ ID `user``users` という複数形で出現していることに気が付いたかもしれません。
これは、[[yii\rest\UrlRule]] が子 URL 規則を作るときに、コントローラの ID を自動的に複数形にするためです。 これは、[[yii\rest\UrlRule]] が子 URL 規則を作るときに、コントローラの ID を自動的に複数形にするためです。
この振る舞いは [[yii\rest\UrlRule::pluralize]] を false に設定することで無効にすることが出来ます。 この振る舞いは [[yii\rest\UrlRule::pluralize]] を `false` に設定することで無効にすることが出来ます。
> Info: コントローラ ID の複数形化は [[yii\helpers\Inflector::pluralize()]] によって行われます。 > Info: コントローラ ID の複数形化は [[yii\helpers\Inflector::pluralize()]] によって行われます。
このメソッドは特殊な複数形の規則を考慮します。 このメソッドは特殊な複数形の規則を考慮します。