Commit 079eb333 by Nobuo Kihara

docs/guide-ja/runtime-responses.md - completed

parent 771235bc
...@@ -184,32 +184,33 @@ public function actionOld() ...@@ -184,32 +184,33 @@ public function actionOld()
\Yii::$app->response->redirect('http://example.com/new', 301)->send(); \Yii::$app->response->redirect('http://example.com/new', 301)->send();
``` ```
> Info: By default, the [[yii\web\Response::redirect()]] method sets the response status code to be 302 which instructs > Info|情報: 既定では、[[yii\web\Response::redirect()]] メソッドはレスポンスのステータスコードを 302 にセットします。
the browser that the resource being requested is *temporarily* located in a different URI. You can pass in a status これはブラウザに対して、リクエストされているリソースが *一時的に* 異なる URI に配置されていることを示すものです。
code 301 to tell the browser that the resource has been *permanently* relocated. ブラウザに対してリソースが *恒久的に* 配置替えされたことを教えるためには、ステータスコード 301 を渡すことが出来ます。
When the current request is an AJAX request, sending a `Location` header will not automatically cause the browser 現在のリクエストが AJAX リクエストである場合は、`Location` ヘッダを送っても自動的にブラウザをリダイレクトすることにはなりません。
to redirect. To solve this problem, the [[yii\web\Response::redirect()]] method sets an `X-Redirect` header with この問題を解決するために、[[yii\web\Response::redirect()]] メソッドは `X-Redirect` ヘッダにリダイレクト先 URL を値としてセットします。
the redirection URL as its value. On the client side, you may write JavaScript code to read this header value and そして、クライアントサイドで、このヘッダの値を読み、それに応じてブラウザをリダイレクトする JavaScript を書くことが出来ます。
redirect the browser accordingly.
> Info: Yii comes with a `yii.js` JavaScript file which provides a set of commonly used JavaScript utilities, > Info|情報: Yii には `yii.js` という JavaScript ファイルが付いています。これは、よく使われる一連の JavaScript 機能を提供するもので、
including browser redirection based on the `X-Redirect` header. Therefore, if you are using this JavaScript file その中には `X-Redirect` ヘッダに基づくブラウザのリダイレクトも含まれています。従って、あなたが
(by registering the [[yii\web\YiiAsset]] asset bundle), you do not need to write anything to support AJAX redirection. ([[yii\web\YiiAsset]] アセットバンドルを登録して) この JavaScript ファイルを使うつもりなら、
AJAX のリダイレクトをサポートするためには、何も書く必要がなくなります。
## Sending Files <a name="sending-files"></a> ## ファイルを送信する <a name="sending-files"></a>
Like browser redirection, file sending is another feature that relies on specific HTTP headers. Yii provides ブラウザのリダイレクトと同じように、ファイルの送信という機能も特定の HTTP ヘッダに依存しています。
a set of methods to support various file sending needs. They all have built-in support for the HTTP range header. Yii はさまざまなファイル送信の必要をサポートするための一連のメソッドを提供しています。それらはすべて、
HTTP range ヘッダに対するサポートを内蔵しています。
* [[yii\web\Response::sendFile()]]: sends an existing file to a client. * [[yii\web\Response::sendFile()]]: 既存のファイルをクライアントに送信する
* [[yii\web\Response::sendContentAsFile()]]: sends a text string as a file to a client. * [[yii\web\Response::sendContentAsFile()]]: テキストの文字列をファイルとしてクライアントに送信する
* [[yii\web\Response::sendStreamAsFile()]]: sends an existing file stream as a file to a client. * [[yii\web\Response::sendStreamAsFile()]]: 既存のファイルストリームをファイルとしてクライアントに送信する
These methods have the same method signature with the response object as the return value. If the file これらのメソッドは同じメソッドシグニチャを持ち、返り値としてレスポンスオブジェクトを返します。
to be sent is very big, you should consider using [[yii\web\Response::sendStreamAsFile()]] because it is more 送信しようとしているファイルが非常に大きなものである場合は、メモリ効率の良い [[yii\web\Response::sendStreamAsFile()]] の使用を検討すべきです。
memory efficient. The following example shows how to send a file in a controller action: 次の例は、コントローラアクションでファイルを送信する方法を示すものです。
```php ```php
public function actionDownload() public function actionDownload()
...@@ -218,18 +219,18 @@ public function actionDownload() ...@@ -218,18 +219,18 @@ public function actionDownload()
} }
``` ```
If you are calling the file sending method in places other than an action method, you should also call ファイル送信メソッドをアクションメソッド以外の場所で呼ぶ場合は、その後で [[yii\web\Response::send()]] メソッドも呼んで、
the [[yii\web\Response::send()]] method afterwards to ensure no extra content will be appended to the response. レスポンスに余計なコンテンツが追加されないことを保証すべきです。
```php ```php
\Yii::$app->response->sendFile('path/to/file.txt')->send(); \Yii::$app->response->sendFile('path/to/file.txt')->send();
``` ```
Some Web servers have a special file sending support called *X-Sendfile*. The idea is to redirect the ウェブサーバには、*X-Sendfile* と呼ばれる特別なファイル送信をサポートするものがあります。アイデアとしては、
request for a file to the Web server which will directly serve the file. As a result, the Web application ファイルに対するリクエストをウェブサーバにリダイレクトして、ウェブサーバに直接にファイルを送信させる、というものです。
can terminate earlier while the Web server is sending the file. To use this feature, you may call その結果として、ウェブサーバがファイルを送信している間でも、ウェブアプリケーションは早期に終了することが出来るようになります。
the [[yii\web\Response::xSendFile()]]. The following list summarizes how to enable the `X-Sendfile` feature この機能を使うために、[[yii\web\Response::xSendFile()]] を呼ぶことが出来ます。次のリストは、
for some popular Web servers: よく使われるいくつかのウェブサーバにおいて `X-Sendfile` 機能を有効にする方法を要約するものです。
- Apache: [X-Sendfile](http://tn123.org/mod_xsendfile) - Apache: [X-Sendfile](http://tn123.org/mod_xsendfile)
- Lighttpd v1.4: [X-LIGHTTPD-send-file](http://redmine.lighttpd.net/projects/lighttpd/wiki/X-LIGHTTPD-send-file) - Lighttpd v1.4: [X-LIGHTTPD-send-file](http://redmine.lighttpd.net/projects/lighttpd/wiki/X-LIGHTTPD-send-file)
...@@ -238,24 +239,24 @@ for some popular Web servers: ...@@ -238,24 +239,24 @@ for some popular Web servers:
- Cherokee: [X-Sendfile and X-Accel-Redirect](http://www.cherokee-project.com/doc/other_goodies.html#x-sendfile) - Cherokee: [X-Sendfile and X-Accel-Redirect](http://www.cherokee-project.com/doc/other_goodies.html#x-sendfile)
## Sending Response <a name="sending-response"></a> ## レスポンスを送信する <a name="sending-response"></a>
The content in a response is not sent to the user until the [[yii\web\Response::send()]] method is called. レスポンスの中のコンテントは、[[yii\web\Response::send()]] メソッドが呼ばれるまでは、エンドユーザに向けて送信されません。
By default, this method will be called automatically at the end of [[yii\base\Application::run()]]. You can, however, 既定では、このメソッドは [[yii\base\Application::run()]] の最後で自動的に呼ばれます。しかし、
explicitly call this method to force sending out the response immediately. このメソッドを明示的に呼んで、強制的にレスポンスを即座に送信することも可能です。
The [[yii\web\Response::send()]] method takes the following steps to send out a response: [[yii\web\Response::send()]] メソッドは次のステップを踏んでレスポンスを送出します。
1. Trigger the [[yii\web\Response::EVENT_BEFORE_SEND]] event. 1. [[yii\web\Response::EVENT_BEFORE_SEND]] イベントをトリガする。
2. Call [[yii\web\Response::prepare()]] to format [[yii\web\Response::data|response data]] into 2. [[yii\web\Response::prepare()]] を呼んで [[yii\web\Response::data|レスポンスデータ]] を
[[yii\web\Response::content|response content]]. [[yii\web\Response::content|レスポンスコンテント]] としてフォーマットする。
3. Trigger the [[yii\web\Response::EVENT_AFTER_PREPARE]] event. 3. [[yii\web\Response::EVENT_AFTER_PREPARE]] イベントをトリガする。
4. Call [[yii\web\Response::sendHeaders()]] to send out the registered HTTP headers. 4. [[yii\web\Response::sendHeaders()]] を呼んで、登録された HTTP ヘッダを送出する。
5. Call [[yii\web\Response::sendContent()]] to send out the response body content. 5. [[yii\web\Response::sendContent()]] を呼んで、レスポンスのボディコンテントを送出する。
6. Trigger the [[yii\web\Response::EVENT_AFTER_SEND]] event. 6. [[yii\web\Response::EVENT_AFTER_SEND]] イベントをトリガする。
After the [[yii\web\Response::send()]] method is called once, any further call to this method will be ignored. [[yii\web\Response::send()]] メソッドが一度呼び出された後では、このメソッドに対する更なる呼び出しは無視されます。
This means once the response is sent out, you will not be able to append more content to it. このことは、いったんレスポンスが送出された後では、それにコンテントを追加することは出来なくなる、ということを意味します。
As you can see, the [[yii\web\Response::send()]] method triggers several useful events. By responding to ごらんのように、the [[yii\web\Response::send()]] メソッドはいくつかの有用なイベントをトリガします。これらのイベントに反応することによって、
these events, it is possible to adjust or decorate the response. レスポンスを調整したり修飾したりすることが出来ます。
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment