Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PSDI Army
yii2
Commits
df9a8896
Commit
df9a8896
authored
Jan 30, 2015
by
Qiang Xue
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #7110 from softark/docs-guide-ja-structure-views-rev
Docs guide ja structure views rev [ci skip]
parents
1961957f
3d6109d1
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
121 additions
and
141 deletions
+121
-141
caching-data.md
docs/guide-ja/caching-data.md
+3
-3
caching-fragment.md
docs/guide-ja/caching-fragment.md
+24
-24
caching-http.md
docs/guide-ja/caching-http.md
+5
-5
caching-page.md
docs/guide-ja/caching-page.md
+3
-3
intro-yii.md
docs/guide-ja/intro-yii.md
+1
-1
runtime-responses.md
docs/guide-ja/runtime-responses.md
+2
-2
structure-assets.md
docs/guide-ja/structure-assets.md
+1
-1
structure-extensions.md
docs/guide-ja/structure-extensions.md
+1
-1
structure-filters.md
docs/guide-ja/structure-filters.md
+1
-1
structure-views.md
docs/guide-ja/structure-views.md
+72
-92
structure-widgets.md
docs/guide-ja/structure-widgets.md
+8
-8
No files found.
docs/guide-ja/caching-data.md
View file @
df9a8896
...
@@ -71,14 +71,14 @@ Yii 縺ッ縺輔∪縺悶∪縺ェ繧ュ繝」繝す繝・繧ケ繝医Ξ繝シ繧ク繧偵し繝昴繝医@縺ヲ縺∪
...
@@ -71,14 +71,14 @@ Yii 縺ッ縺輔∪縺悶∪縺ェ繧ュ繝」繝す繝・繧ケ繝医Ξ繝シ繧ク繧偵し繝昴繝医@縺ヲ縺∪
*
[
[yii\caching\ApcCache
]
]: PHP の
[
APC
](
http://php.net/manual/ja/book.apc.php
)
拡張モジュールを使用します。集中型の分厚いアプリケーションのキャッシュを扱うときには最速の一つとして考えることができます (例えば、サーバが 1 台であったり、専用のロードバランサを持っていない、など) 。
*
[
[yii\caching\ApcCache
]
]: PHP の
[
APC
](
http://php.net/manual/ja/book.apc.php
)
拡張モジュールを使用します。集中型の分厚いアプリケーションのキャッシュを扱うときには最速の一つとして考えることができます (例えば、サーバが 1 台であったり、専用のロードバランサを持っていない、など) 。
*
[
[yii\caching\DbCache
]
]: キャッシュされたデータを格納するためにデータベースのテーブルを使用します。このキャッシュを使用するには
[
[yii\caching\DbCache::cacheTable
]
] で指定したテーブルを作成する必要があります。
*
[
[yii\caching\DbCache
]
]: キャッシュされたデータを格納するためにデータベースのテーブルを使用します。このキャッシュを使用するには
[
[yii\caching\DbCache::cacheTable
]
] で指定したテーブルを作成する必要があります。
*
[
[yii\caching\DummyCache
]
]: 実際にはキャッシュを行わない、キャッシュの代替を提供します。このコンポーネントの目的は、キャッシュが利用できることをチェックするためのコードを簡略化することです。たとえば、開発中やサーバに実際のキャッシュサポートがない場合に、このキャッシュコンポーネントを使用することができます。そして、実際のキャッシュサポートが有効になったときに、対応するキャッシュコンポーネントに切替えて使用します。 どちらの場合も、
`Yii::$app->cache`
が null かも知れないと心配せずに、データを取得するために同じコード
`Yii::$app->cache->get($key)`
を使用できます。
*
[
[yii\caching\DummyCache
]
]: 実際にはキャッシュを行わない、キャッシュの代替を提供します。このコンポーネントの目的は、キャッシュが利用できることをチェックするためのコードを簡略化することです。たとえば、開発中やサーバに実際のキャッシュサポートがない場合に、このキャッシュコンポーネントを使用することができます。そして、実際のキャッシュサポートが有効になったときに、対応するキャッシュコンポーネントに切替えて使用します。 どちらの場合も、
`Yii::$app->cache`
が null かも知れないと心配せずに、データを取得するために同じコード
`Yii::$app->cache->get($key)`
を使用できます。
*
[
[yii\caching\FileCache
]
]: キャッシュされたデータを保存するために標準ファイルを使用します。これはページコンテンツなど大きなかたまりのデータに特に適しています。
*
[
[yii\caching\FileCache
]
]: キャッシュされたデータを保存するために標準ファイルを使用します。これはページコンテントなど大きなかたまりのデータに特に適しています。
*
[
[yii\caching\MemCache
]
]: PHP の
[
Memcache
](
http://php.net/manual/ja/book.memcache.php
)
と
[
Memcached
](
http://php.net/manual/ja/book.memcached.php
)
拡張モジュールを使用します。分散型のアプリケーションでキャッシュを扱うときには最速の一つとして考えることができます (例えば、複数台のサーバ構成であったり、ロードバランサなど) 。
*
[
[yii\caching\MemCache
]
]: PHP の
[
Memcache
](
http://php.net/manual/ja/book.memcache.php
)
と
[
Memcached
](
http://php.net/manual/ja/book.memcached.php
)
拡張モジュールを使用します。分散型のアプリケーションでキャッシュを扱うときには最速の一つとして考えることができます (例えば、複数台のサーバ構成であったり、ロードバランサなど) 。
*
[
[yii\redis\Cache
]
]:
[
Redis
](
http://redis.io/
)
の key-value ストアに基づいてキャッシュコンポーネントを実装しています。(Redis の バージョン 2.6.12 以降が必要です) 。
*
[
[yii\redis\Cache
]
]:
[
Redis
](
http://redis.io/
)
の key-value ストアに基づいてキャッシュコンポーネントを実装しています。(Redis の バージョン 2.6.12 以降が必要です) 。
*
[
[yii\caching\WinCache
]
]: PHP の
[
WinCache
](
http://iis.net/downloads/microsoft/wincache-extension
)
(
[関連リンク](http://php.net/manual/ja/book.wincache.php
)
) 拡張モジュールを使用します。
*
[
[yii\caching\WinCache
]
]: PHP の
[
WinCache
](
http://iis.net/downloads/microsoft/wincache-extension
)
(
[関連リンク](http://php.net/manual/ja/book.wincache.php
)
) 拡張モジュールを使用します。
*
[
[yii\caching\XCache
]
]: PHP の
[
XCache
](
http://xcache.lighttpd.net/
)
拡張モジュールを使用します。
*
[
[yii\caching\XCache
]
]: PHP の
[
XCache
](
http://xcache.lighttpd.net/
)
拡張モジュールを使用します。
*
[
[yii\caching\ZendDataCache
]
]: キャッシュメディアして
[
Zend Data Cache
](
http://files.zend.com/help/Zend-Server-6/zend-server.htm#data_cache_component.htm
)
を使用します。
*
[
[yii\caching\ZendDataCache
]
]: キャッシュメディアして
[
Zend Data Cache
](
http://files.zend.com/help/Zend-Server-6/zend-server.htm#data_cache_component.htm
)
を使用します。
> ヒント: 同じアプリケーション内で異なるキャッシュを使用することもできます。一般的なやり方として、小さくとも常に使用されるデータ (例えば、統計データなど) を格納する場合はメモリベースのキャッシュストレージを使用し、大きくて使用頻度の低いデータを格納する場合はファイルベース、またはデータベースのキャッシュストレージを使用します (例えば、ページコンテンツなど) 。
> ヒント: 同じアプリケーション内で異なるキャッシュを使用することもできます。一般的なやり方として、小さくとも常に使用されるデータ (例えば、統計データなど) を格納する場合はメモリベースのキャッシュストレージを使用し、大きくて使用頻度の低いデータを格納する場合はファイルベース、またはデータベースのキャッシュストレージを使用します (例えば、ページコンテントなど) 。
## キャッシュ API <span id="cache-apis"></span>
## キャッシュ API <span id="cache-apis"></span>
...
@@ -161,7 +161,7 @@ if ($data === false) {
...
@@ -161,7 +161,7 @@ if ($data === false) {
### キャッシュの依存関係 <span id="cache-dependencies"></span>
### キャッシュの依存関係 <span id="cache-dependencies"></span>
有効期限の設定に加えて、キャッシュされたデータにはいわゆる
*キャッシュの依存関係*
の変化によって無効にすることもできます。例えば
[
[yii\caching\FileDependency
]
] はファイルの更新時刻の依存関係を表しています。依存関係が変更されたときに、対応するファイルが更新されることを意味しています。その結果、キャッシュ内で見つかった古いファイルのコンテンツは、無効とされるべきであり
[
[yii\caching\Cache::get()|get()
]
] は false を返します。
有効期限の設定に加えて、キャッシュされたデータにはいわゆる
*キャッシュの依存関係*
の変化によって無効にすることもできます。例えば
[
[yii\caching\FileDependency
]
] はファイルの更新時刻の依存関係を表しています。依存関係が変更されたときに、対応するファイルが更新されることを意味しています。その結果、キャッシュ内で見つかった古いファイルのコンテントは、無効とされるべきであり
[
[yii\caching\Cache::get()|get()
]
] は false を返します。
キャッシュの依存関係は
[
[yii\caching\Dependency
]
] 子孫クラスのオブジェクトとして表現されます。
[
[yii\caching\Cache::set()|set()
]
] でキャッシュにデータを格納する際に、関連するキャッシュの依存関係を知らせることができます。例えば、
キャッシュの依存関係は
[
[yii\caching\Dependency
]
] 子孫クラスのオブジェクトとして表現されます。
[
[yii\caching\Cache::set()|set()
]
] でキャッシュにデータを格納する際に、関連するキャッシュの依存関係を知らせることができます。例えば、
...
...
docs/guide-ja/caching-fragment.md
View file @
df9a8896
...
@@ -8,15 +8,15 @@
...
@@ -8,15 +8,15 @@
```
php
```
php
if
(
$this
->
beginCache
(
$id
))
{
if
(
$this
->
beginCache
(
$id
))
{
// ... ここに生成するコンテン
ツ
を書く ...
// ... ここに生成するコンテン
ト
を書く ...
$this
->
endCache
();
$this
->
endCache
();
}
}
```
```
つまり
[
[yii\base\View::beginCache()|beginCache()
]
] と
[
[yii\base\View::endCache()|endCache()
]
] をペアにして囲み、その中にコンテン
ツ生成ロジックを書いていきます。コンテンツがキャッシュ内で見つかった場合、キャッシュされたコンテンツをレンダリングし
[
[yii\base\View::beginCache()|beginCache()
]
] は false を返します。結果として、コンテンツ生成ロジックはスキップされます。それ以外の場合はコンテンツ生成ロジックが呼ばれ、そして
[
[yii\base\View::endCache()|endCache()
]
] が呼ばれたとき生成されたコンテンツ
がキャプチャされ、キャッシュに格納されます。
つまり
[
[yii\base\View::beginCache()|beginCache()
]
] と
[
[yii\base\View::endCache()|endCache()
]
] をペアにして囲み、その中にコンテン
ト生成ロジックを書いていきます。コンテントがキャッシュ内で見つかった場合、キャッシュされたコンテントをレンダリングし
[
[yii\base\View::beginCache()|beginCache()
]
] は false を返します。結果として、コンテント生成ロジックはスキップされます。それ以外の場合はコンテント生成ロジックが呼ばれ、そして
[
[yii\base\View::endCache()|endCache()
]
] が呼ばれたとき生成されたコンテント
がキャプチャされ、キャッシュに格納されます。
[
データキャッシュ
](
caching-data.md
)
と同様に、キャッシュされたコンテン
ツ
を識別するためにユニークな
`$id`
が必要になります。
[
データキャッシュ
](
caching-data.md
)
と同様に、キャッシュされたコンテン
ト
を識別するためにユニークな
`$id`
が必要になります。
## キャッシュのオプション <span id="caching-options"></span>
## キャッシュのオプション <span id="caching-options"></span>
...
@@ -26,25 +26,25 @@ if ($this->beginCache($id)) {
...
@@ -26,25 +26,25 @@ if ($this->beginCache($id)) {
### 持続時間 <span id="duration"></span>
### 持続時間 <span id="duration"></span>
おそらくフラグメントキャッシュで通常よく使われるであろうオプションは
[
[yii\widgets\FragmentCache::duration|duration
]
] でしょう。このオプションにはコンテン
ツがどれだけの時間キャッシュ内において有効であるかを指定します。以下のコードは最大で 1 時間コンテンツ
の断片をキャッシュします:
おそらくフラグメントキャッシュで通常よく使われるであろうオプションは
[
[yii\widgets\FragmentCache::duration|duration
]
] でしょう。このオプションにはコンテン
トがどれだけの時間キャッシュ内において有効であるかを指定します。以下のコードは最大で 1 時間コンテント
の断片をキャッシュします:
```
php
```
php
if
(
$this
->
beginCache
(
$id
,
[
'duration'
=>
3600
]))
{
if
(
$this
->
beginCache
(
$id
,
[
'duration'
=>
3600
]))
{
// ... ここに生成するコンテン
ツ
を書く ...
// ... ここに生成するコンテン
ト
を書く ...
$this
->
endCache
();
$this
->
endCache
();
}
}
```
```
オプションがセットされていない場合は、デフォルトである 60 が使われ、つまり有効期限が 60 秒間のキャッシュされたコンテン
ツ
を意味します。
オプションがセットされていない場合は、デフォルトである 60 が使われ、つまり有効期限が 60 秒間のキャッシュされたコンテン
ト
を意味します。
### 依存関係 <span id="dependencies"></span>
### 依存関係 <span id="dependencies"></span>
[
データキャッシュ
](
caching-data.md#cache-dependencies
)
と同様に、キャッシュされたコンテン
ツ
の断片は依存関係を持つことができます。例えば、表示されている投稿の内容は、投稿が変更されたか否かに依存する、といった具合です。
[
データキャッシュ
](
caching-data.md#cache-dependencies
)
と同様に、キャッシュされたコンテン
ト
の断片は依存関係を持つことができます。例えば、表示されている投稿の内容は、投稿が変更されたか否かに依存する、といった具合です。
依存関係を指定するには
[
[yii\widgets\FragmentCache::dependency|dependency
]
] オプションに
[
[yii\caching\Dependency
]
] オブジェクトを指定するか、または依存関係オブジェクトを作成するための配列構成を指定します。以下のコードはコンテン
ツ
の断片が
`updated_at`
カラムの値の変化に依存していることを指定しています:
依存関係を指定するには
[
[yii\widgets\FragmentCache::dependency|dependency
]
] オプションに
[
[yii\caching\Dependency
]
] オブジェクトを指定するか、または依存関係オブジェクトを作成するための配列構成を指定します。以下のコードはコンテン
ト
の断片が
`updated_at`
カラムの値の変化に依存していることを指定しています:
```
php
```
php
$dependency
=
[
$dependency
=
[
...
@@ -54,7 +54,7 @@ $dependency = [
...
@@ -54,7 +54,7 @@ $dependency = [
if
(
$this
->
beginCache
(
$id
,
[
'dependency'
=>
$dependency
]))
{
if
(
$this
->
beginCache
(
$id
,
[
'dependency'
=>
$dependency
]))
{
// ... ここに生成するコンテン
ツ
を書く ...
// ... ここに生成するコンテン
ト
を書く ...
$this
->
endCache
();
$this
->
endCache
();
}
}
...
@@ -63,14 +63,14 @@ if ($this->beginCache($id, ['dependency' => $dependency])) {
...
@@ -63,14 +63,14 @@ if ($this->beginCache($id, ['dependency' => $dependency])) {
### バリエーション <span id="variations"></span>
### バリエーション <span id="variations"></span>
キャッシュされたコンテン
ツはいくつかのパラメータによって変化させることもできます。例えば、複数の言語をサポートしているウェブアプリケーションに対して、ビューコードの同じ部分を、異なる言語で生成することができます。現在のアプリケーションの言語に応じて、キャッシュされたコンテンツ
に変更を加えるといったことが可能になります。
キャッシュされたコンテン
トはいくつかのパラメータによって変化させることもできます。例えば、複数の言語をサポートしているウェブアプリケーションに対して、ビューコードの同じ部分を、異なる言語で生成することができます。現在のアプリケーションの言語に応じて、キャッシュされたコンテント
に変更を加えるといったことが可能になります。
キャッシュのバリエーションを指定するには
[
[yii\widgets\FragmentCache::variations|variations
]
] オプションに配列で、それぞれが特定のバリエーションの要素を表すスカラー値をセットします。例えば、言語によってキャッシュされたコンテン
ツ
を変化させるには、以下のコードを使うことができます:
キャッシュのバリエーションを指定するには
[
[yii\widgets\FragmentCache::variations|variations
]
] オプションに配列で、それぞれが特定のバリエーションの要素を表すスカラー値をセットします。例えば、言語によってキャッシュされたコンテン
ト
を変化させるには、以下のコードを使うことができます:
```
php
```
php
if
(
$this
->
beginCache
(
$id
,
[
'variations'
=>
[
Yii
::
$app
->
language
]]))
{
if
(
$this
->
beginCache
(
$id
,
[
'variations'
=>
[
Yii
::
$app
->
language
]]))
{
// ... ここに生成するコンテン
ツ
を書く ...
// ... ここに生成するコンテン
ト
を書く ...
$this
->
endCache
();
$this
->
endCache
();
}
}
...
@@ -84,7 +84,7 @@ if ($this->beginCache($id, ['variations' => [Yii::$app->language]])) {
...
@@ -84,7 +84,7 @@ if ($this->beginCache($id, ['variations' => [Yii::$app->language]])) {
```
php
```
php
if
(
$this
->
beginCache
(
$id
,
[
'enabled'
=>
Yii
::
$app
->
request
->
isGet
]))
{
if
(
$this
->
beginCache
(
$id
,
[
'enabled'
=>
Yii
::
$app
->
request
->
isGet
]))
{
// ... ここに生成するコンテン
ツ
を書く ...
// ... ここに生成するコンテン
ト
を書く ...
$this
->
endCache
();
$this
->
endCache
();
}
}
...
@@ -98,43 +98,43 @@ if ($this->beginCache($id, ['enabled' => Yii::$app->request->isGet])) {
...
@@ -98,43 +98,43 @@ if ($this->beginCache($id, ['enabled' => Yii::$app->request->isGet])) {
```
php
```
php
if
(
$this
->
beginCache
(
$id1
))
{
if
(
$this
->
beginCache
(
$id1
))
{
// ...コンテン
ツ
生成ロジック...
// ...コンテン
ト
生成ロジック...
if
(
$this
->
beginCache
(
$id2
,
$options2
))
{
if
(
$this
->
beginCache
(
$id2
,
$options2
))
{
// ...コンテン
ツ
生成ロジック...
// ...コンテン
ト
生成ロジック...
$this
->
endCache
();
$this
->
endCache
();
}
}
// ...コンテン
ツ
生成ロジック...
// ...コンテン
ト
生成ロジック...
$this
->
endCache
();
$this
->
endCache
();
}
}
```
```
ネストされたキャッシュには、異なるキャッシュオプションを設定することができます。 たとえば、上記の例における内側のキャッシュと外側のキャッシュに対して、異なる持続期間の値を設定する事が可能です。 これによって、外側のキャッシュでキャッシュされたデータが無効になった場合でも、内側のキャッシュが有効な内側の断片を提供することが可能になります。 しかし、その逆は真ではありません。 外側のキャッシュが有効であると判断された場合には、内側のキャッシュが無効になった後でも、外側のキャッシュが古くなったコンテン
ツ
のコピーを提供し続けます。 ネストされたキャッシュの持続時間や依存関係の設定を間違うと、無効になった内側のキャッシュデータが外側のキャッシュに残り続けることになるので、注意が必要です。
ネストされたキャッシュには、異なるキャッシュオプションを設定することができます。 たとえば、上記の例における内側のキャッシュと外側のキャッシュに対して、異なる持続期間の値を設定する事が可能です。 これによって、外側のキャッシュでキャッシュされたデータが無効になった場合でも、内側のキャッシュが有効な内側の断片を提供することが可能になります。 しかし、その逆は真ではありません。 外側のキャッシュが有効であると判断された場合には、内側のキャッシュが無効になった後でも、外側のキャッシュが古くなったコンテン
ト
のコピーを提供し続けます。 ネストされたキャッシュの持続時間や依存関係の設定を間違うと、無効になった内側のキャッシュデータが外側のキャッシュに残り続けることになるので、注意が必要です。
## ダイナミックコンテン
ツ
<span id="dynamic-content"></span>
## ダイナミックコンテン
ト
<span id="dynamic-content"></span>
フラグメントキャッシュを使用する際、出力全体が比較的静的で、一ヶ所ないし数ヶ所だけが例外的に動的であるというような状況に遭遇します。例えば、ページ上部にはメインメニューバーと現在のユーザの名前とが一緒に表示される場合があります。他には、リクエスト毎に実行しなければいけない PHP のコードが含まれている場合(例えば、アセットバンドルを登録するためのコード)などです。この両方の問題は、いわゆる
*ダイナミックコンテン
ツ
*
機能によって解決することができます。
フラグメントキャッシュを使用する際、出力全体が比較的静的で、一ヶ所ないし数ヶ所だけが例外的に動的であるというような状況に遭遇します。例えば、ページ上部にはメインメニューバーと現在のユーザの名前とが一緒に表示される場合があります。他には、リクエスト毎に実行しなければいけない PHP のコードが含まれている場合(例えば、アセットバンドルを登録するためのコード)などです。この両方の問題は、いわゆる
*ダイナミックコンテン
ト
*
機能によって解決することができます。
ダイナミックコンテン
ツは、それがフラグメントキャッシュの中に含まれていても、キャッシュすべきではない出力の部分を意味します。コンテンツを常に動的にするためには、外側のコンテンツ
がキャッシュから提供されている場合でも、すべてのリクエストに対して、いくつかのPHP コードを実行することにより生成しなければいけません。
ダイナミックコンテン
トは、それがフラグメントキャッシュの中に含まれていても、キャッシュすべきではない出力の部分を意味します。コンテントを常に動的にするためには、外側のコンテント
がキャッシュから提供されている場合でも、すべてのリクエストに対して、いくつかのPHP コードを実行することにより生成しなければいけません。
以下のように、ダイナミックコンテン
ツ
を目的の場所に挿入するには、キャッシュされた断片内で
[
[yii\base\View::renderDynamic()
]
] を呼び出します。
以下のように、ダイナミックコンテン
ト
を目的の場所に挿入するには、キャッシュされた断片内で
[
[yii\base\View::renderDynamic()
]
] を呼び出します。
```
php
```
php
if
(
$this
->
beginCache
(
$id1
))
{
if
(
$this
->
beginCache
(
$id1
))
{
// ...コンテン
ツ
生成ロジック...
// ...コンテン
ト
生成ロジック...
echo
$this
->
renderDynamic
(
'return Yii::$app->user->identity->name;'
);
echo
$this
->
renderDynamic
(
'return Yii::$app->user->identity->name;'
);
// ...コンテン
ツ
生成ロジック...
// ...コンテン
ト
生成ロジック...
$this
->
endCache
();
$this
->
endCache
();
}
}
```
```
[
[yii\base\View::renderDynamic()|renderDynamic()
]
] メソッドはパラメータとして PHP コードの一部を使用します。PHP コードの戻り値は、ダイナミックコンテン
ツ
として扱われます。同じ PHP コードはすべてのリクエストに対して実行されますが、囲まれている断片がキャッシュから提供されているか否かは問いません。
[
[yii\base\View::renderDynamic()|renderDynamic()
]
] メソッドはパラメータとして PHP コードの一部を使用します。PHP コードの戻り値は、ダイナミックコンテン
ト
として扱われます。同じ PHP コードはすべてのリクエストに対して実行されますが、囲まれている断片がキャッシュから提供されているか否かは問いません。
docs/guide-ja/caching-http.md
View file @
df9a8896
HTTP キャッシュ
HTTP キャッシュ
============
============
前の節で説明したサーバーサイドのキャッシュに加えて、ウェブアプリケーションは、同じページコンテン
ツ
を生成し送信する時間を節約するために、クライアントサイドでもキャッシュを利用することができます。
前の節で説明したサーバーサイドのキャッシュに加えて、ウェブアプリケーションは、同じページコンテン
ト
を生成し送信する時間を節約するために、クライアントサイドでもキャッシュを利用することができます。
クライアントサイドのキャッシュを使用するには、レンダリング結果をキャッシュできるように、コントローラアクションのフィルタとして
[
[yii\filters\HttpCache
]
] を設定します。
[
[yii\filters\HttpCache
]
] は
`GET`
と
`HEAD`
リクエストに対してのみ動作し、また、それらのリクエストは 3 種類のキャッシュ関連の HTTP ヘッダを扱うことができます:
クライアントサイドのキャッシュを使用するには、レンダリング結果をキャッシュできるように、コントローラアクションのフィルタとして
[
[yii\filters\HttpCache
]
] を設定します。
[
[yii\filters\HttpCache
]
] は
`GET`
と
`HEAD`
リクエストに対してのみ動作し、また、それらのリクエストは 3 種類のキャッシュ関連の HTTP ヘッダを扱うことができます:
...
@@ -43,12 +43,12 @@ public function behaviors()
...
@@ -43,12 +43,12 @@ public function behaviors()
}
}
```
```
上記のコードは
`index`
アクションでのみ HTTP キャッシュを有効にしている状態です。投稿の最終更新時刻に基づいて
`Last-Modified`
を生成する必要があります。ブラウザが初めて
`index`
ページにアクセスすると、ページはサーバ上で生成されブラウザに送信されます。もしブラウザが再度同じページにアクセスし、その期間中に投稿に変更がない場合は、ブラウザはクライアントサイドにキャッシュしたものを使用するので、サーバはページを再生成することはありません。その結果、サーバサイドのレンダリング処理とページコンテン
ツ
の送信は両方ともスキップされます。
上記のコードは
`index`
アクションでのみ HTTP キャッシュを有効にしている状態です。投稿の最終更新時刻に基づいて
`Last-Modified`
を生成する必要があります。ブラウザが初めて
`index`
ページにアクセスすると、ページはサーバ上で生成されブラウザに送信されます。もしブラウザが再度同じページにアクセスし、その期間中に投稿に変更がない場合は、ブラウザはクライアントサイドにキャッシュしたものを使用するので、サーバはページを再生成することはありません。その結果、サーバサイドのレンダリング処理とページコンテン
ト
の送信は両方ともスキップされます。
## `ETag` ヘッダ <span id="etag"></span>
## `ETag` ヘッダ <span id="etag"></span>
"Entity Tag" (略して
`ETag`
) ヘッダはページコンテン
ツ
を表すためにハッシュを使用します。ページが変更された場合ハッシュも同様に変更されます。サーバサイドで生成されたハッシュとクライアントサイドで保持しているハッシュを比較することによって、ページが変更されたかどうか、また再送信するべきかどうかを決定します。
"Entity Tag" (略して
`ETag`
) ヘッダはページコンテン
ト
を表すためにハッシュを使用します。ページが変更された場合ハッシュも同様に変更されます。サーバサイドで生成されたハッシュとクライアントサイドで保持しているハッシュを比較することによって、ページが変更されたかどうか、また再送信するべきかどうかを決定します。
`ETag`
ヘッダの送信を有効にするには
[
[yii\filters\HttpCache::etagSeed
]
] プロパティを設定します。プロパティは ETag のハッシュを生成するためのシードを返す PHP の callable 型で、以下のようなシグネチャで構成していきます。
`ETag`
ヘッダの送信を有効にするには
[
[yii\filters\HttpCache::etagSeed
]
] プロパティを設定します。プロパティは ETag のハッシュを生成するためのシードを返す PHP の callable 型で、以下のようなシグネチャで構成していきます。
...
@@ -79,11 +79,11 @@ public function behaviors()
...
@@ -79,11 +79,11 @@ public function behaviors()
}
}
```
```
上記のコードは
`view`
アクションでのみ HTTP キャッシュを有効にしている状態です。リクエストされた投稿のタイトルとコンテン
ツに基づいて HTTP の
`Etag`
ヘッダを生成しています。ブラウザが初めて
`view`
ページにアクセスするときに、ページがサーバ上で生成されブラウザに送信されます。ブラウザが再度同じページにアクセスし、投稿のタイトルやコンテンツに変更がない場合には、サーバはページを再生成せず、ブラウザはクライアントサイトにキャッシュしたものを使用します。その結果、サーバサイドのレンダリング処理とページコンテンツ
送信の両方ともスキップされます。
上記のコードは
`view`
アクションでのみ HTTP キャッシュを有効にしている状態です。リクエストされた投稿のタイトルとコンテン
トに基づいて HTTP の
`Etag`
ヘッダを生成しています。ブラウザが初めて
`view`
ページにアクセスするときに、ページがサーバ上で生成されブラウザに送信されます。ブラウザが再度同じページにアクセスし、投稿のタイトルやコンテントに変更がない場合には、サーバはページを再生成せず、ブラウザはクライアントサイトにキャッシュしたものを使用します。その結果、サーバサイドのレンダリング処理とページコンテント
送信の両方ともスキップされます。
ETag は
`Last-Modified`
ヘッダよりも複雑かつ、より正確なキャッシング方式を可能にします。例えば、サイトが別のテーマに切り替わった場合には ETag を無効化する、といったことができます。
ETag は
`Last-Modified`
ヘッダよりも複雑かつ、より正確なキャッシング方式を可能にします。例えば、サイトが別のテーマに切り替わった場合には ETag を無効化する、といったことができます。
ETag はリクエスト毎に再評価する必要があるため、負荷の高いもの生成すると
`HttpCache`
の本来の目的を損なって不必要なオーバーヘッドが生じる場合があるので、ページのコンテン
ツ
が変更されたときにキャッシュを無効化するための式は単純なものを指定するようにして下さい。
ETag はリクエスト毎に再評価する必要があるため、負荷の高いもの生成すると
`HttpCache`
の本来の目的を損なって不必要なオーバーヘッドが生じる場合があるので、ページのコンテン
ト
が変更されたときにキャッシュを無効化するための式は単純なものを指定するようにして下さい。
> 注意: [RFC 7232](http://tools.ietf.org/html/rfc7232#section-2.4) に準拠して `Etag` と `Last-Modified` ヘッダの両方を設定した場合、`HttpCache` はその両方とも送信します。また、もし `If-None-Match` ヘッダと `If-Modified-Since` ヘッダの両方を送信した場合は前者のみが尊重されます。
> 注意: [RFC 7232](http://tools.ietf.org/html/rfc7232#section-2.4) に準拠して `Etag` と `Last-Modified` ヘッダの両方を設定した場合、`HttpCache` はその両方とも送信します。また、もし `If-None-Match` ヘッダと `If-Modified-Since` ヘッダの両方を送信した場合は前者のみが尊重されます。
...
...
docs/guide-ja/caching-page.md
View file @
df9a8896
ページキャッシュ
ページキャッシュ
============
============
ページキャッシュはサーバサイドでページ全体のコンテン
ツ
をキャッシュすることを言います。あとで、同じページに再度リクエストがあった場合、その内容を一から再び生成させるのではなく、キャッシュから提供するようにします。
ページキャッシュはサーバサイドでページ全体のコンテン
ト
をキャッシュすることを言います。あとで、同じページに再度リクエストがあった場合、その内容を一から再び生成させるのではなく、キャッシュから提供するようにします。
ページキャッシュは
[
[yii\filters\PageCache
]
]、
[
アクションフィルタ
](
structure-filters.md
)
によってサポートされています。これは、コントローラクラスで以下のように使用することができます:
ページキャッシュは
[
[yii\filters\PageCache
]
]、
[
アクションフィルタ
](
structure-filters.md
)
によってサポートされています。これは、コントローラクラスで以下のように使用することができます:
...
@@ -25,8 +25,8 @@ public function behaviors()
...
@@ -25,8 +25,8 @@ public function behaviors()
}
}
```
```
上記のコードは、ページキャッシュが
`index`
アクションのみで使用され、そのページのコンテン
ツ
は最大 60 秒間キャッシュし、現在のアプリケーションの言語によって変化し、投稿の総数に変化があった場合キャッシュされたページが無効になる、ということを示しています。
上記のコードは、ページキャッシュが
`index`
アクションのみで使用され、そのページのコンテン
ト
は最大 60 秒間キャッシュし、現在のアプリケーションの言語によって変化し、投稿の総数に変化があった場合キャッシュされたページが無効になる、ということを示しています。
見てわかるように、ページキャッシュは
[
フラグメントキャッシュ
](
caching-fragment.md
)
ととてもよく似ています。それらは両方とも
`duration`
、
`dependencies`
、
`variations`
、そして
`enabled`
などのオプションをサポートしています。主な違いとしては、ページキャッシュは
[
アクションフィルタ
](
structure-filters.md
)
として、フラグメントキャッシュは
[
ウィジェット
](
structure-widgets.md
)
として実装されているということです。
見てわかるように、ページキャッシュは
[
フラグメントキャッシュ
](
caching-fragment.md
)
ととてもよく似ています。それらは両方とも
`duration`
、
`dependencies`
、
`variations`
、そして
`enabled`
などのオプションをサポートしています。主な違いとしては、ページキャッシュは
[
アクションフィルタ
](
structure-filters.md
)
として、フラグメントキャッシュは
[
ウィジェット
](
structure-widgets.md
)
として実装されているということです。
また、ページキャッシュと一緒に
[
ダイナミックコンテン
ツ
](
caching-fragment.md#dynamic-content
)
だけでなく
[
フラグメントキャッシュ
](
caching-fragment.md
)
も使用することができます。
また、ページキャッシュと一緒に
[
ダイナミックコンテン
ト
](
caching-fragment.md#dynamic-content
)
だけでなく
[
フラグメントキャッシュ
](
caching-fragment.md
)
も使用することができます。
docs/guide-ja/intro-yii.md
View file @
df9a8896
...
@@ -11,7 +11,7 @@ Yii は何に適しているか
...
@@ -11,7 +11,7 @@ Yii は何に適しているか
Yii は汎用的なウェブプログラミングフレームワークです。
Yii は汎用的なウェブプログラミングフレームワークです。
つまり、あらゆる種類のウェブアプリケーションを PHP を使って開発するときに、Yii を使用することが出来ます。
つまり、あらゆる種類のウェブアプリケーションを PHP を使って開発するときに、Yii を使用することが出来ます。
コンポーネントベースのアーキテクチャと洗練されたキャッシュサポートを持っているため、Yii は大規模なアプリケーション、たとえば、ポータル、フォーラム、コンテン
ツ
マネージメントシステム (CMS)、電子商取引プロジェクト、RESTful ウェブサービス、等々を開発するのに特に適しています。
コンポーネントベースのアーキテクチャと洗練されたキャッシュサポートを持っているため、Yii は大規模なアプリケーション、たとえば、ポータル、フォーラム、コンテン
ト
マネージメントシステム (CMS)、電子商取引プロジェクト、RESTful ウェブサービス、等々を開発するのに特に適しています。
Yii を他のフレームワークと比べると
Yii を他のフレームワークと比べると
...
...
docs/guide-ja/runtime-responses.md
View file @
df9a8896
...
@@ -177,7 +177,7 @@ public function actionOld()
...
@@ -177,7 +177,7 @@ public function actionOld()
上記のコードでは、アクションメソッドが
`redirect()`
メソッドの結果を返しています。
上記のコードでは、アクションメソッドが
`redirect()`
メソッドの結果を返しています。
前に説明したように、アクションメソッドによって返されるレスポンスオブジェクトが、エンドユーザに送信されるレスポンスとして使用されることになります。
前に説明したように、アクションメソッドによって返されるレスポンスオブジェクトが、エンドユーザに送信されるレスポンスとして使用されることになります。
アクションメソッド以外の場所では、
[
[yii\web\Response::redirect()
]
] を直接に呼び出し、メソッドチェーンで
[
[yii\web\Response::send()
]
] メソッドを呼んで、レスポンスに余計なコンテン
ツ
が追加されないことを保証すべきです。
アクションメソッド以外の場所では、
[
[yii\web\Response::redirect()
]
] を直接に呼び出し、メソッドチェーンで
[
[yii\web\Response::send()
]
] メソッドを呼んで、レスポンスに余計なコンテン
ト
が追加されないことを保証すべきです。
```
php
```
php
\Yii
::
$app
->
response
->
redirect
(
'http://example.com/new'
,
301
)
->
send
();
\Yii
::
$app
->
response
->
redirect
(
'http://example.com/new'
,
301
)
->
send
();
...
@@ -216,7 +216,7 @@ public function actionDownload()
...
@@ -216,7 +216,7 @@ public function actionDownload()
}
}
```
```
ファイル送信メソッドをアクションメソッド以外の場所で呼ぶ場合は、その後で
[
[yii\web\Response::send()
]
] メソッドも呼んで、レスポンスに余計なコンテン
ツ
が追加されないことを保証すべきです。
ファイル送信メソッドをアクションメソッド以外の場所で呼ぶ場合は、その後で
[
[yii\web\Response::send()
]
] メソッドも呼んで、レスポンスに余計なコンテン
ト
が追加されないことを保証すべきです。
```
php
```
php
\Yii
::
$app
->
response
->
sendFile
(
'path/to/file.txt'
)
->
send
();
\Yii
::
$app
->
response
->
sendFile
(
'path/to/file.txt'
)
->
send
();
...
...
docs/guide-ja/structure-assets.md
View file @
df9a8896
...
@@ -163,7 +163,7 @@ JavaScript ファイルをページの head セクションにインクルード
...
@@ -163,7 +163,7 @@ JavaScript ファイルをページの head セクションにインクルード
public
$jsOptions
=
[
'position'
=>
\yii\web\View
::
POS_HEAD
];
public
$jsOptions
=
[
'position'
=>
\yii\web\View
::
POS_HEAD
];
```
```
既定では、アセットバンドルが発行されるときは、
[
[yii\web\AssetBundle::sourcePath
]
] で指定されたディレクトリの中にある全てのコンテン
ツ
が発行されます。
既定では、アセットバンドルが発行されるときは、
[
[yii\web\AssetBundle::sourcePath
]
] で指定されたディレクトリの中にある全てのコンテン
ト
が発行されます。
[
[yii\web\AssetBundle::publishOptions|publishOptions
]
] プロパティを構成することによって、この振る舞いをカスタマイズすることが出来ます。
[
[yii\web\AssetBundle::publishOptions|publishOptions
]
] プロパティを構成することによって、この振る舞いをカスタマイズすることが出来ます。
例えば、
[
[yii\web\AssetBundle::sourcePath
]
] の一個または数個のサブディレクトリだけを発行するために、アセットバンドルクラスの中で下記のようにすることが出来ます。
例えば、
[
[yii\web\AssetBundle::sourcePath
]
] の一個または数個のサブディレクトリだけを発行するために、アセットバンドルクラスの中で下記のようにすることが出来ます。
...
...
docs/guide-ja/structure-extensions.md
View file @
df9a8896
...
@@ -321,7 +321,7 @@ class MyBootstrapClass implements BootstrapInterface
...
@@ -321,7 +321,7 @@ class MyBootstrapClass implements BootstrapInterface
#### 国際化と地域化 <span id="i18n-l10n"></span>
#### 国際化と地域化 <span id="i18n-l10n"></span>
あなたのエクステンションは、さまざまな言語をサポートするアプリケーションによって使われるかもしれません。
あなたのエクステンションは、さまざまな言語をサポートするアプリケーションによって使われるかもしれません。
従って、あなたのエクステンションがエンドユーザにコンテン
ツ
を表示するものである場合は、それを
[
国際化
](
tutorial-i18n.md
)
するように努めるべきです。
従って、あなたのエクステンションがエンドユーザにコンテン
ト
を表示するものである場合は、それを
[
国際化
](
tutorial-i18n.md
)
するように努めるべきです。
具体的には、
具体的には、
-
エクステンションがエンドユーザに向けたメッセージを表示する場合は、翻訳することが出来るようにメッセージを
`Yii::t()`
で包むべきです。
-
エクステンションがエンドユーザに向けたメッセージを表示する場合は、翻訳することが出来るようにメッセージを
`Yii::t()`
で包むべきです。
...
...
docs/guide-ja/structure-filters.md
View file @
df9a8896
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
フィルタは、
[
コントローラアクション
](
structure-controllers.md#actions
)
の前 および/または 後に走るオブジェクトです。
フィルタは、
[
コントローラアクション
](
structure-controllers.md#actions
)
の前 および/または 後に走るオブジェクトです。
例えば、アクセスコントロールフィルタはアクションの前に走って、アクションが特定のエンドユーザだけにアクセスを許可するものであることを保証します。
例えば、アクセスコントロールフィルタはアクションの前に走って、アクションが特定のエンドユーザだけにアクセスを許可するものであることを保証します。
また、コンテン
ツ圧縮フィルタはアクションの後に走って、レスポンスのコンテンツ
をエンドユーザに送出する前に圧縮します。
また、コンテン
ト圧縮フィルタはアクションの後に走って、レスポンスのコンテント
をエンドユーザに送出する前に圧縮します。
フィルタは、前フィルタ (アクションの
*前*
に適用されるフィルタのロジック) および/または 後フィルタ (アクションの
*後*
に適用されるフィルタ) から構成されます。
フィルタは、前フィルタ (アクションの
*前*
に適用されるフィルタのロジック) および/または 後フィルタ (アクションの
*後*
に適用されるフィルタ) から構成されます。
...
...
docs/guide-ja/structure-views.md
View file @
df9a8896
...
@@ -4,8 +4,7 @@
...
@@ -4,8 +4,7 @@
ビューは
[
MVC
](
http://ja.wikipedia.org/wiki/Model_View_Controller
)
アーキテクチャの一部を成すものです。
ビューは
[
MVC
](
http://ja.wikipedia.org/wiki/Model_View_Controller
)
アーキテクチャの一部を成すものです。
ビューはエンドユーザにデータを表示することに責任を持つコードです。
ビューはエンドユーザにデータを表示することに責任を持つコードです。
ウェブアプリケーションにおいては、ビューは、通常、主として HTML コードと表示目的の PHP コードを含む PHP スクリプトファイルである、
*ビューテンプレート*
の形式で作成されます。
ウェブアプリケーションにおいては、ビューは、通常、主として HTML コードと表示目的の PHP コードを含む PHP スクリプトファイルである、
*ビューテンプレート*
の形式で作成されます。
そして、ビューテンプレートを管理する
[
[yii\web\View|ビュー
]
]
[
アプリケーションコンポーネント
](
structure-application-components.md
)
が、
そして、ビューテンプレートを管理する
[
[yii\web\View|ビュー
]
]
[
アプリケーションコンポーネント
](
structure-application-components.md
)
が、ビューの構築とレンダリングを助けるためによく使われるメソッドを提供します。
ビューの構築とレンダリングを助けるためによく使われるメソッドを提供します。
なお、簡潔さを重視して、ビューテンプレートまたはビューテンプレートファイルを単にビューと呼ぶことがよくあります。
なお、簡潔さを重視して、ビューテンプレートまたはビューテンプレートファイルを単にビューと呼ぶことがよくあります。
...
@@ -13,7 +12,7 @@
...
@@ -13,7 +12,7 @@
前述のように、ビューは HTML と PHP コードが混ざった単なる PHP スクリプトです。
前述のように、ビューは HTML と PHP コードが混ざった単なる PHP スクリプトです。
次に示すのは、ログインフォームを表示するビューです。
次に示すのは、ログインフォームを表示するビューです。
見ると分るように、PHP コードがタイトルやフォームなど動的なコンテンツを生成するのに使われ、HTML コー
ドがそれらを編成して表示可能な HTML ページを作っています。
ご覧のように、PHP コードがタイトルやフォームなど動的なコンテントを生成するのに使われ、HTML コードが
それらを編成して表示可能な HTML ページを作っています。
```
php
```
php
<?php
<?php
...
@@ -37,12 +36,12 @@ $this->title = '繝ュ繧ー繧、繝ウ';
...
@@ -37,12 +36,12 @@ $this->title = '繝ュ繧ー繧、繝ウ';
<?php
ActiveForm
::
end
();
?>
<?php
ActiveForm
::
end
();
?>
```
```
ビューの中でアクセスで
きる
`$this`
は、このビューテンプレートを管理しレンダリングしている
[
[yii\web\View|ビューコンポーネント
]
] を参照します。
ビューの中では、このビ
ューテンプレートを管理しレンダリングしている
[
[yii\web\View|ビューコンポーネント
]
] を参照する
`$this`
にアクセスすることが出来ます。
`$this`
以外に、上記の例の
`$model`
のように、前もって定義さ
れた変数がビューの中にあることがあります。
`$this`
以外に、上記の例の
`$model`
のように、事前に定義され
る変数をビューの中に置くことが出来ます。
このような変数は、
[
コントロ
ーラ
](
structure-controllers.md
)
または
[
ビューのレンダリング
](
#rendering-views
)
をトリガするオブジェクトによってビューに
*プッシュ*
されたデータを表します。
このような変数は、
[
ビューの
レンダリング
](
#rendering-views
)
をトリガする
[
コントローラ
](
structure-controllers.md
)
などのオブジェクトによってビューに
*プッシュ*
されるデータを表します。
> Tip|ヒント: 上の例では、事前に定義された変数は、IDE
に認
識されるように、ビューの先頭のコメントブロックの中にリストされています。
> Tip|ヒント: 上の例では、事前に定義される変数は、IDE
に認
識されるように、ビューの先頭のコメントブロックの中にリストされています。
これは、ビューにドキュメントを付けるのにも良い方法です。
これは、ビューにドキュメントを付けるのにも良い方法です。
...
@@ -64,8 +63,8 @@ use yii\helpers\Html;
...
@@ -64,8 +63,8 @@ use yii\helpers\Html;
</div>
</div>
```
```
HTML コンテンツを表
示するためには、
[
[yii\helpers\HtmlPurifier
]
] を使って、最初にコンテンツをフィルタします。
HTML コンテントを表
示するためには、
[
[yii\helpers\HtmlPurifier
]
] を使って、最初にコンテントをフィルタします。
例えば、次のコードは、投稿のコンテンツを表示する前にフィルタしています。
例えば、次のコードは、投稿のコンテントを表示する前にフィルタし
て
います。
```
php
```
php
<?php
<?php
...
@@ -85,23 +84,21 @@ use yii\helpers\HtmlPurifier;
...
@@ -85,23 +84,21 @@ use yii\helpers\HtmlPurifier;
[
コントローラ
](
structure-controllers.md
)
や
[
モデル
](
structure-models.md
)
と同じように、ビューを整理するための規約があります。.
[
コントローラ
](
structure-controllers.md
)
や
[
モデル
](
structure-models.md
)
と同じように、ビューを整理するための規約があります。.
*
コントローラによって表示されるビューは、既定では、ディレクトリ
`@a
pp/v
iews/ControllerID`
の下に置かれるべきものです。
*
コントローラによって表示されるビューは、デフォルトでは、ディレクトリ
`@app/vie
ws/ControllerID`
の下に置かれるべきものです。
ここで、
`ControllerID`
は
[
コントローラ ID
](
structure-controllers.md#routes
)
を指します。
ここで、
`ControllerID`
は
[
コントローラ ID
](
structure-controllers.md#routes
)
を指します。
例えば、コントローラクラスが
`PostController`
である場合、ディレクトリは
`@app/views/post`
となります。
例えば、コントローラクラスが
`PostController`
である場合、ディレクトリは
`@app/views/post`
となります。
`PostCommentController`
の場合は、ディレクトリは
`@app/views/post-comment`
です。
`PostCommentController`
の場合は、ディレクトリは
`@app/views/post-comment`
です。
また、コントローラがモジュールに属する場合は、ディレクトリは
[
[yii\base\Module::basePath|モジュールディレクトリ
]
] の下の
`views/ControllerID`
です。
また、コントローラがモジュールに属する場合は、ディレクトリは
[
[yii\base\Module::basePath|モジュールディレクトリ
]
] の下の
`views/ControllerID`
です。
*
[
ウィジェット
](
structure-widgets.md
)
で表示されるビューは、既定では、
`Widget
Path
/views`
ディレクトリの下に置かれるべきものです。
*
[
ウィジェット
](
structure-widgets.md
)
で表示されるビューは、デフォルトでは、
`Wid
getPath/v
iews`
ディレクトリの下に置かれるべきものです。
ここで、
`WidgetPath`
は、ウィジェットのクラスファイルを含んでいるディレクトリを指します。
ここで、
`WidgetPath`
は、ウィジェットのクラスファイルを含んでいるディレクトリを指します。
*
他のオブジェクトによって表示されるビューについても、ウィジェットの場合と同じ規約に従うことが推奨されます。
*
他のオブジェクトによって表示されるビューについても、ウィジェットの場合と同じ規約に従うことが推奨されます。
これらの既定のビューディレクトリは、コントローラやウィジェットの
[
[yii\base\ViewContextInterface::getViewPath()
]
]
これらのデフォルトのビューディレクトリは、コントローラやウィジェットの
[
[yii\base\ViewContextInterface::getViewPath()
]
] メソッドをオーバーライドすることでカスタマイズすることが可能です。
メソッドをオーバーライドすることでカスタマイズすることが可能です。
## ビューをレンダリングする <span id="rendering-views"></span>
## ビューをレンダリングする <span id="rendering-views"></span>
[
コントローラ
](
structure-controllers.md
)
の中でも、
[
ウィジェット
](
structure-widgets.md
)
の中でも、または、その他のどんな場所でも、
[
コントローラ
](
structure-controllers.md
)
の中でも、
[
ウィジェット
](
structure-widgets.md
)
の中でも、または、その他のどんな場所でも、ビューをレンダリングするメソッドを呼ぶことによってビューをレンダリングすることが出来ます。
ビューをレンダリングするメソッドを呼ぶことによってビューをレンダリングすることが出来ます。
これらのメソッドは、下記に示されるような類似のシグニチャを共有します。
これらのメソッドは、下記に示されるような類似のシグニチャを共有します。
```
```
...
@@ -157,7 +154,7 @@ class PostController extends Controller
...
@@ -157,7 +154,7 @@ class PostController extends Controller
[
ウィジェット
](
structure-widgets.md
)
の中では、ビューをレンダリングするために、次のウィジェットメソッドを使用することが出来ます。
[
ウィジェット
](
structure-widgets.md
)
の中では、ビューをレンダリングするために、次のウィジェットメソッドを使用することが出来ます。
*
[
[yii\base\Widget::render()|render()
]
]:
[
名前付きのビ
ュー
](
#named-views
)
をレンダリングする。
*
[
[yii\base\Widget::render()|render()
]
]:
[
名前付きビュー
](
#named-views
)
をレンダリングする。
*
[
[yii\base\Widget::renderFile()|renderFile()
]
]: ビューファイルのパスまたは
[
エイリアス
](
concept-aliases.md
)
の形式で指定されたビューをレンダリングする。
*
[
[yii\base\Widget::renderFile()|renderFile()
]
]: ビューファイルのパスまたは
[
エイリアス
](
concept-aliases.md
)
の形式で指定されたビューをレンダリングする。
例えば、
例えば、
...
@@ -187,7 +184,7 @@ class ListWidget extends Widget
...
@@ -187,7 +184,7 @@ class ListWidget extends Widget
[
[yii\base\View|ビューコンポーネント
]
] によって提供される下記のメソッドのどれかを使うと、ビューの中で、別のビューをレンダリングすることが出来ます。
[
[yii\base\View|ビューコンポーネント
]
] によって提供される下記のメソッドのどれかを使うと、ビューの中で、別のビューをレンダリングすることが出来ます。
*
[
[yii\base\View::render()|render()
]
]:
[
名前付きのビ
ュー
](
#named-views
)
をレンダリングする。
*
[
[yii\base\View::render()|render()
]
]:
[
名前付きビュー
](
#named-views
)
をレンダリングする。
*
[
[yii\web\View::renderAjax()|renderAjax()
]
]:
[
名前付きビュー
](
#named-views
)
をレンダリングし、登録されている全ての JS/CSS スクリプトおよびファイルを注入する。
*
[
[yii\web\View::renderAjax()|renderAjax()
]
]:
[
名前付きビュー
](
#named-views
)
をレンダリングし、登録されている全ての JS/CSS スクリプトおよびファイルを注入する。
通常、AJAX ウェブリクエストに対するレスポンスにおいて使用される。
通常、AJAX ウェブリクエストに対するレスポンスにおいて使用される。
*
[
[yii\base\View::renderFile()|renderFile()
]
]: ビューファイルのパスまたは
[
エイリアス
](
concept-aliases.md
)
の形式で指定されたビューをレンダリングする。
*
[
[yii\base\View::renderFile()|renderFile()
]
]: ビューファイルのパスまたは
[
エイリアス
](
concept-aliases.md
)
の形式で指定されたビューをレンダリングする。
...
@@ -202,8 +199,7 @@ class ListWidget extends Widget
...
@@ -202,8 +199,7 @@ class ListWidget extends Widget
### 他の場所でのレンダリング <span id="rendering-in-other-places"></span>
### 他の場所でのレンダリング <span id="rendering-in-other-places"></span>
場所がどこであれ、
`Yii::$app->view`
という式によって
[
[yii\base\View|ビュー
]
] アプリケーションコンポーネントにアクセスすることが出来ますから、
場所がどこであれ、
`Yii::$app->view`
という式によって
[
[yii\base\View|ビュー
]
] アプリケーションコンポーネントにアクセスすることが出来ますから、前述の
[
[yii\base\View|ビュー
]
] コンポーネントメソッドを使ってビューをレンダリングすることが出来ます。
前述の
[
[yii\base\View|ビュー
]
] コンポーネントメソッドを使ってビューをレンダリングすることが出来ます。
例えば、
例えば、
```
php
```
php
...
@@ -229,15 +225,13 @@ echo \Yii::$app->view->renderFile('@app/views/site/license.php');
...
@@ -229,15 +225,13 @@ echo \Yii::$app->view->renderFile('@app/views/site/license.php');
アクティブなモジュールが無い場合は、
`@app/views/ViewName`
が使用されます。
アクティブなモジュールが無い場合は、
`@app/views/ViewName`
が使用されます。
例えば、
`/user/create`
は、現在アクティブなモジュールが
`user`
である場合は、
`@app/modules/user/views/user/create.php`
へと解決されます。
例えば、
`/user/create`
は、現在アクティブなモジュールが
`user`
である場合は、
`@app/modules/user/views/user/create.php`
へと解決されます。
アクティブなモジュールが無い場合は、ビューファイルのパスは
`@app/views/user/create.php`
となります。
アクティブなモジュールが無い場合は、ビューファイルのパスは
`@app/views/user/create.php`
となります。
*
ビューが
[
[yii\base\View::context|コンテキスト
]
] を伴ってレンダリングされ、そのコンテキストが
[
[yii\base\ViewContextInterface
]
] を実装している場合は、
*
ビューが
[
[yii\base\View::context|コンテキスト
]
] を伴ってレンダリングされ、そのコンテキストが
[
[yii\base\ViewContextInterface
]
] を実装している場合は、ビューファイルのパスは、コンテキストの
[
[yii\base\ViewContextInterface::getViewPath()|ビューパス
]
] をビュー名の前に置くことによって形成されます。
ビューファイルのパスは、コンテキストの
[
[yii\base\ViewContextInterface::getViewPath()|ビューパス
]
] をビュー名の前に置くことによって形成されます。
これは、主として、コントローラとウィジェットの中でレンダリングされるビューに当てはまります。
これは、主として、コントローラとウィジェットの中でレンダリングされるビューに当てはまります。
例えば、コンテキストが
`SiteController`
コントローラである場合、
`site/about`
は
`@app
/views/site/about.php`
へと解決されます。
例えば、コンテキストが
`SiteController`
コントローラである場合、
`about`
は
`@app/views/site/about.php`
へと解決されます。
*
あるビューが別のビューの中でレンダリングされる場合は、後者のビューファイルを含んでいるディレクトリが前者のビュー名の前に置かれて、実際のビューファイルのパスが形成されます。
*
あるビューが別のビューの中でレンダリングされる場合は、後者のビューファイルを含んでいるディレクトリが前者のビュー名の前に置かれて、実際のビューファイルのパスが形成されます。
例えば、
`item`
は、
`@app/views/post/index.php`
というビューの中でレンダリングされる場合、
`@app/views/post/item`
へと解決されます。
例えば、
`item`
は、
`@app/views/post/index.php`
というビューの中でレンダリングされる場合、
`@app/views/post/item`
へと解決されます。
上記の規則によると、コントローラ
`app\controllers\PostController`
の中で
`$this->render('view')`
を呼ぶと、実際には、ビューファイル
`@app/views/post/view.php`
がレンダリングされ、
上記の規則によって、コントローラ
`app\controllers\PostController`
の中で
`$this->render('view')`
を呼ぶと、実際には、ビューファイル
`@app/views/post/view.php`
がレンダリングされ、一方、そのビューの中で
`$this->render('_overview')`
を呼ぶと、ビューファイル
`@app/views/post/_overview.php`
がレンダリングされることになります。
一方、そのビューの中で
`$this->render('_overview')`
を呼ぶと、ビューファイル
`@app/views/post/_overview.php`
がレンダリングされることになります。
### ビューの中でデータにアクセスする <span id="accessing-data-in-views"></span>
### ビューの中でデータにアクセスする <span id="accessing-data-in-views"></span>
...
@@ -245,8 +239,8 @@ echo \Yii::$app->view->renderFile('@app/views/site/license.php');
...
@@ -245,8 +239,8 @@ echo \Yii::$app->view->renderFile('@app/views/site/license.php');
ビューの中でデータにアクセスするためのアプローチが二つあります。「プッシュ」と「プル」です。
ビューの中でデータにアクセスするためのアプローチが二つあります。「プッシュ」と「プル」です。
ビューをレンダリングするメソッドに二番目のパラメータとしてデータを渡すのが「プッシュ」のアプローチです。
ビューをレンダリングするメソッドに二番目のパラメータとしてデータを渡すのが「プッシュ」のアプローチです。
データは、「名前-値」のペアの配列として表されなければなり
ません。
データは、「名前-値」のペアの配列として表わされなければな
りません。
ビューがレンダリングされるときに、PHP の
`extract()`
関数がこの配列に対して呼び出され、ビューの中でこの配列から変数が抽出されます。
ビューがレンダリングされるときに、PHP の
`extract()`
関数がこの配列に対して呼び出され、ビューの中で使う変数が抽出されます。
例えば、次のコードはコントローラの中でビューをレンダリングしていますが、
`report`
ビューに二つの変数、すなわち、
`$foo = 1`
と
`$bar = 2`
をプッシュしています。
例えば、次のコードはコントローラの中でビューをレンダリングしていますが、
`report`
ビューに二つの変数、すなわち、
`$foo = 1`
と
`$bar = 2`
をプッシュしています。
```
php
```
php
...
@@ -295,19 +289,18 @@ $this->params['breadcrumbs'][] = 'About Us';
...
@@ -295,19 +289,18 @@ $this->params['breadcrumbs'][] = 'About Us';
レイアウトは、複数のビューの共通部分をあらわす特殊なタイプのビューです。
レイアウトは、複数のビューの共通部分をあらわす特殊なタイプのビューです。
例えば、たいていのウェブアプリケーションでは、ページは共通のヘッダとフッタを持っています。
例えば、たいていのウェブアプリケーションでは、ページは共通のヘッダとフッタを持っています。
すべてのビューで同じヘッダとフッタを繰り返すことも出来ますが、もっと良い方法は、そういうことはレイアウトの中で一度だけして、コンテンツビューのレンダリング結果をレイアウトの中の適切な場所に埋め込むことです。
すべてのビューで同じヘッダとフッタを繰り返すことも出来ますが、もっと良い方法は、そういうことはレイアウトの中で一度だけして、コンテントビューのレンダリング結果をレイアウトの中の適切な場所に埋め込むことです。
### レイアウトを作成する <span id="creating-layouts"></span>
### レイアウトを作成する <span id="creating-layouts"></span>
レイアウトもまたビューですので、通常のビューと同様な方法で作成することが出来ます。
レイアウトもまたビューですので、通常のビューと同様な方法で作成することが出来ます。
既定では、レイアウトは
`@app/views/layouts`
ディレクトリに保存されます。
デフォルトでは、レイアウトは
`@app/views/layouts`
ディレクトリに保存されます。
[
モジュール
](
structure-modules.md
)
の中で使用されるレイアウトについては、
[
[yii\base\Module::basePath|モジュールディレクトリ
]
]
[
モジュール
](
structure-modules.md
)
の中で使用されるレイアウトについては、
[
[yii\base\Module::basePath|モジュールディレクトリ
]
] の下の
`views/layouts`
ディレクトリに保存されるべきものとなります。
の下の
`views/layouts`
ディレクトリに保存されるべきものとなります。
デフォルトのレイアウトディレクトリは、アプリケーションまたはモジュールの
[
[yii\base\Module::layoutPath
]
] プロパティを構成することでカスタマイズすることが出来ます。
既定のレイアウトディレクトリは、アプリケーションまたはモジュールの
[
[yii\base\Module::layoutPath
]
] プロパティを構成することでカスタマイズすることが出来ます。
次の例は、レイアウトがどのようなものであるかを示すものです。説明のために、レイアウトの中のコードを大幅に単純化していることに注意してください。
次の例は、レイアウトがどのようなものであるかを示すものです。説明のために、レイアウトの中のコードを大幅に単純化していることに注意してください。
実際には、ヘッドのタグやメインメニューなど、もっと多くのコンテンツを追加する必要があるでしょう。
実際には、ヘッドのタグやメインメニューなど、もっと多くのコンテントを追加する必要があるでしょう。
```
php
```
php
<?php
<?php
...
@@ -336,47 +329,43 @@ use yii\helpers\Html;
...
@@ -336,47 +329,43 @@ use yii\helpers\Html;
<?php
$this
->
endPage
()
?>
<?php
$this
->
endPage
()
?>
```
```
見ると分かるように、レイアウトはすべてのページに共通な HTML タグを生成しています。
`<body>`
セクションの中でレイアウトが
`$content`
という変数をエコーしていますが、
ご覧のように、レイアウトはすべてのページに共通な HTML タグを生成しています。
これは、コンテンツビューの
レンダリング結果を表すものであり、
[
[yii\base\Controller::render()
]
] が呼ばれるときに、レイアウトにプッシュされるものです。
`<body>`
セクションの中でレイアウトが
`$content`
という変数をエコーしていますが、これは、コンテントビューのレンダリング結果を表すものであり、
[
[y
ii\base\Controller::render()
]
] が呼ばれるときに、レイアウトにプッシュされるものです。
上記のコードに示されているように、たいていのレイアウトは次に挙げるメソッドを呼び出すべきです。
上記のコードに示されているように、たいていのレイアウトは次に挙げるメソッドを呼び出さなければなりません。
これらのメソッドは主として
レンダリングの過程に関するイベントをトリガして、他の場所で登録されたスクリプトやタグが、メソ
ッドが呼ばれた場所に正しく注入されるようにするためのものです。
これらのメソッドは、主とし
てレンダリングの過程に関するイベントをトリガするもので、他の場所で登録されたスクリプトやタグが、メソッド
が呼ばれた場所に正しく注入されるようにするためのものです。
-
[
[yii\base\View::beginPage()|beginPage()
]
]: このメソッドがレイアウトの一番初めに呼
ばれるべきです。
-
[
[yii\base\View::beginPage()|beginPage()
]
]: このメソッドがレイアウトの冒頭で呼ばれ
なければなりません。
これは、ページの開始を示す
[
[yii\base\View::EVENT_BEGIN_PAGE|EVENT_BEGIN_PAGE
]
] イベントをトリガします。
これは、ページの開始を示す
[
[yii\base\View::EVENT_BEGIN_PAGE|EVENT_BEGIN_PAGE
]
] イベントをトリガします。
-
[
[yii\base\View::endPage()|endPage()
]
]: このメソッドがレイアウトの最後で呼ばれる
べきです。
-
[
[yii\base\View::endPage()|endPage()
]
]: このメソッドがレイアウトの末尾で呼ばれな
ければなりません。
これは、ページの終了を示す
[
[yii\base\View::EVENT_END_PAGE|EVENT_END_PAGE
]
] イベントをトリガします。
これは、ページの終了を示す
[
[yii\base\View::EVENT_END_PAGE|EVENT_END_PAGE
]
] イベントをトリガします。
-
[
[yii\web\View::head()|head()
]
]: このメソッドが HTML ページの
`<head>`
セクションの中で呼ばれるべきです。
-
[
[yii\web\View::head()|head()
]
]: このメソッドが HTML ページの
`<head>`
セクションの中で呼ばれなければなりません。
このメソッドは、ページのレンダリングが完了したときに、登録された head の HTML コード (リンクタグ、メタタグなど) に置き換えられるプレースホルダを生成します。
このメソッドは、ページのレンダリングが完了したときに、登録された head の HTML コード (リンクタグ、メタタグなど) に置き換えられるプレースホルダを生成します。
-
[
[yii\web\View::beginBody()|beginBody()
]
]: このメソッドが
`<body>`
セクションの最初で呼ばれるべきです。
-
[
[yii\web\View::beginBody()|beginBody()
]
]: このメソッドが
`<body>`
セクションの冒頭で呼ばれなければなりません。
このメソッドは
[
[yii\web\View::EVENT_BEGIN_BODY|EVENT_BEGIN_BODY
]
] イベントをトリガし、
このメソッドは
[
[yii\web\View::EVENT_BEGIN_BODY|EVENT_BEGIN_BODY
]
] イベントをトリガし、body の開始位置をターゲットとする登録された HTML コード (JavaScript など) によって置き換えられるプレースホルダを生成します。
body の開始位置を目的とする登録された HTML コード (JavaScript など) によって置き換えられるプレースホルダを生成します。
-
[
[yii\web\View::endBody()|endBody()
]
]: このメソッドが
`<body`
> セクションの末尾で呼ばれるなければなりません。
-
[
[yii\web\View::endBody()|endBody()
]
]: このメソッドが
`<body`
> セクションの最後で呼ばれるべきです。
このメソッドは
[
[yii\web\View::EVENT_END_BODY|EVENT_END_BODY
]
] イベントをトリガし、body の終了位置をターゲットとする登録された HTML コード (JavaScript など) によって置き換えられるプレースホルダを生成します。
このメソッドは
[
[yii\web\View::EVENT_END_BODY|EVENT_END_BODY
]
] イベントをトリガし、
body の終了位置を目的とする登録された HTML コード (JavaScript など) によって置き換えられるプレースホルダを生成します。
### レイアウトでデータにアクセスする <span id="accessing-data-in-layouts"></span>
### レイアウトでデータにアクセスする <span id="accessing-data-in-layouts"></span>
レイアウトの中では、事前定義された二つの変数、すなわち、
`$this`
と
`$content`
にアクセス出来ます。
レイアウトの中では、事前定義された二つの変数、すなわち、
`$this`
と
`$content`
にアクセスすることが出来ます。
前者は、通常のビューにおいてと同じく、
[
[yii\base\View|ビュー
]
] コンポーネントを参照します。
前者は、通常のビューにおいてと同じく、
[
[yii\base\View|ビュー
]
] コンポーネントを参照します。
一方、後者は、コントローラの中で
[
[yii\base\Controller::render()|render()
]
] メソッドを呼ぶことによってレンダリングされる、
一方、後者は、コントローラの中で
[
[yii\base\Controller::render()|render()
]
] メソッドを呼ぶことによってレンダリングされる、コンテントビューのレンダリング結果を含むものです。
コンテンツビューのレンダリング結果を含むものです。
レイアウトの中で他のデータにアクセスする必要があるときは、
[
ビューの中でデータにアクセスする
](
#accessing-data-in-views
)
の項で説明されている「プル」の方法を使う必要があります。
レイアウトの中でその他のデー
タに
アクセスする必要があるときは、
[
ビューの中でデータにアクセスする
](
#accessing-data-in-views
)
の項で説明されている「プル」の方法を使う必要があります。
コンテンツビューからレイアウトにデータを渡す必要があるときは、
[
ビューの間でデータを共有する
](
#sharing-data-among-views
)
の項で説明されている方法を使うことが出来ます。
コンテントビュ
ー
からレイアウトにデータを渡す必要があるときは、
[
ビューの間でデータを共有する
](
#sharing-data-among-views
)
の項で説明されている方法を使うことが出来ます。
### レイアウトを使う <span id="using-layouts"></span>
### レイアウトを使う <span id="using-layouts"></span>
[
コントローラでのレンダリング
](
#rendering-in-controllers
)
の項で説明されているように、コントローラの中で
[
コントローラでのレンダリング
](
#rendering-in-controllers
)
の項で説明されているように、コントローラの中で
[
[yii\base\Controller::render()|render()
]
] メソッドを呼んでビューをレンダリングすると、レンダリング結果にレイアウトが適用されます。
[
[yii\base\Controller::render()|render()
]
] メソッドを呼んでビューをレンダリングすると、レンダリング結果にレイアウトが適用されます。
デフォルトでは、
`@app/views/layouts/main.php`
というレイアウトが使用されます。
既定では、
`@app/views/layouts/main.php`
というレイアウトが使用されます。
[
[yii\base\Application::layout
]
] または
[
[yii\base\Controller::layout
]
] のどちらかを構成することによって、異なるレイアウトを使うことが出来ます。
[
[yii\base\Application::layout
]
] または
[
[yii\base\Controller::layout
]
] のどちらかを構成することによって、異なるレイアウトを使うことが出来ます。
前者は全てのコントローラによって使用されるレイアウトを決定するものですが、後者は個々のコントローラについて前者をオーバーライドするものです。
前者は全てのコントローラによって使用されるレイアウトを決定するものですが、後者は個々のコントローラについて前者をオーバーライドするものです。
例えば、次のコードは、
`post`
コントローラがビューをレンダリングするときに
`@app/views/layouts/post.php`
をレイアウトとして使うようにするものです。
例えば、次のコードは、
`post`
コントローラがビューをレンダリングするときに
`@app/views/layouts/post.php`
をレイアウトとして使うようにするものです。
その他のコントローラは、
`layout`
プロパティに触れられていないと仮定すると、引き続き既定の
`@app/views/lay
outs
/main.php`
をレイアウトとして使います。
その他のコントローラは、
`layout`
プロパティに触れられていないと仮定すると、引き続きデフォルトの
`@app/views/
layouts/
main.php`
をレイアウトとして使います。
```
php
```
php
namespace
app\controllers
;
namespace
app\controllers
;
...
@@ -397,10 +386,8 @@ class PostController extends Controller
...
@@ -397,10 +386,8 @@ class PostController extends Controller
最初のステップで、Yii はレイアウトの値とコンテキストモジュールを決定します。
最初のステップで、Yii はレイアウトの値とコンテキストモジュールを決定します。
-
コントローラの
[
[yii\base\Controller::layout
]
] プロパティが null でないときは、それをレイアウトの値として使い、
-
コントローラの
[
[yii\base\Controller::layout
]
] プロパティが null でないときは、それをレイアウトの値として使い、コントローラの
[
[yii\base\Controller::module|モジュール
]
] をコンテキストモジュールとして使う。
コントローラの
[
[yii\base\Controller::module|モジュール
]
] をコンテキストモジュールとして使う。
-
[
[yii\base\Controller::layout|layout
]
] が null のときは、コントローラの祖先となっている全てのモジュール (アプリケーション自体も含む) を探して、
[
[yii\base\Module::layout|layout
]
] プロパティが null でない最初のモジュールを見つける。
-
[
[yii\base\Controller::layout|layout
]
] が null のときは、コントローラの祖先となっている全てのモジュール
(アプリケーション自体も含む) を探して、
[
[yii\base\Module::layout|layout
]
] プロパティが null でない最初のモジュールを見つける。
見つかったモジュールとその
[
[yii\base\Module::layout|layout
]
] の値をコンテキストモジュールと選ばれたレイアウトの値とする。
見つかったモジュールとその
[
[yii\base\Module::layout|layout
]
] の値をコンテキストモジュールと選ばれたレイアウトの値とする。
そのようなモジュールが見つからなかったときは、レイアウトは適用されないということを意味する。
そのようなモジュールが見つからなかったときは、レイアウトは適用されないということを意味する。
...
@@ -409,10 +396,8 @@ class PostController extends Controller
...
@@ -409,10 +396,8 @@ class PostController extends Controller
-
パスエイリアス (例えば、
`@app/views/layouts/main`
)。
-
パスエイリアス (例えば、
`@app/views/layouts/main`
)。
-
絶対パス (例えば、
`/main`
): すなわち、スラッシュで始まるレイアウトの値の場合。
-
絶対パス (例えば、
`/main`
): すなわち、スラッシュで始まるレイアウトの値の場合。
実際のレイアウトファイルはアプリケーションの
[
[yii\base\Application::layoutPath|レイアウトパス
]
]
実際のレイアウトファイルはアプリケーションの
[
[yii\base\Application::layoutPath|レイアウトパス
]
] (デフォルトでは
`@app/views/layouts`
) の下で探される。
(デフォルトでは
`@app/views/layouts`
) の下で探される。
-
相対パス (例えば、
`main`
): 実際のレイアウトファイルはコンテキストモジュールの
[
[yii\base\Module::layoutPath|レイアウトパス
]
] (デフォルトでは
[
[yii\base\Module::basePath|モジュールディレクトリ
]
] の下の
`views/layouts`
ディレクトリ) の下で探される。
-
相対パス (例えば、
`main`
): 実際のレイアウトファイルはコンテキストモジュールの
[
[yii\base\Module::layoutPath|レイアウトパス
]
]
(デフォルトでは
[
[yii\base\Module::basePath|モジュールディレクトリ
]
] の下の
`views/layouts`
ディレクトリ) の下で探される。
-
真偽値
`false`
: レイアウトは適用されない。
-
真偽値
`false`
: レイアウトは適用されない。
レイアウトの値がファイル拡張子を含んでいない場合は、デフォルト値である
`.php`
を使います。
レイアウトの値がファイル拡張子を含んでいない場合は、デフォルト値である
`.php`
を使います。
...
@@ -421,23 +406,19 @@ class PostController extends Controller
...
@@ -421,23 +406,19 @@ class PostController extends Controller
### 入れ子のレイアウト <span id="nested-layouts"></span>
### 入れ子のレイアウト <span id="nested-layouts"></span>
ときとして、あるレイアウトの中に別のレイアウトを入れたい場合があるでしょう。
ときとして、あるレイアウトの中に別のレイアウトを入れたい場合があるでしょう。
例えば、ウェブサイトの別々のセクションにおいて、違うレイアウトを使いたいけれども、
例えば、ウェブサイトの別々のセクションにおいて、違うレイアウトを使いたいけれども、それらのレイアウトは全て、全体としての HTML5 ページ構造を生成する同一の基本レイアウトを共有している、という場合です。
それらのレイアウトは全て、全体としての HTML5 ページ構造を生成する同一の基本レイアウトを共有している、という場合です。
この目的を達することは、次のように、子レイアウトの中で
[
[yii\base\View::beginContent()|beginContent()
]
] と
[
[yii\base\View::endContent()|endContent()
]
] を呼ぶことで可能になります。
この目的を達することは、次のように、子レイアウトの中で
[
[yii\base\View::beginContent()|beginContent()
]
] と
[
[yii\base\View::endContent()|endContent()
]
]
を呼ぶことで可能になります。
```
php
```
php
<?php
$this
->
beginContent
(
'@app/views/layouts/base.php'
);
?>
<?php
$this
->
beginContent
(
'@app/views/layouts/base.php'
);
?>
... 子レイアウトのコンテンツをここに ...
... 子レイアウトのコンテントをここに .
.
.
<?php
$this
->
endContent
();
?>
<?php
$this
->
endContent
();
?>
```
```
上のコードが示すように、子レイアウトのコンテンツは
[
[yii\base\View::beginContent()|beginContent()
]
] と
上のコードが示すように、子レイアウトのコンテントは
[
[yii\base\View::beginContent()|beginContent()
]
] と
[
[yii\base\View::endContent()|endContent()
]
] によって囲まれなければなりません。
[
[yii\base\View::endContent()|endContent()
]
] によって囲まれなければなりません。
[
[yii\base\View::beginContent()|beginContent()
]
] に渡されるパラメータは、親レイアウトが何であるかを指定するものです。
[
[yii\base\View::beginContent()|beginContent()
]
] に渡されるパラメータは、親レイアウトで何であるかを指定するものです。
レイアウトのファイルまたはエイリアスのどちらかを使うことが出来ます。
レイアウトのファイルまたはエイリアスのどちらかを使うことが出来ます。
上記のアプローチを使って、2レベル以上のレイアウトを入れ子にすることも出来ます。
上記のアプローチを使って、2レベル以上のレイアウトを入れ子にすることも出来ます。
...
@@ -445,24 +426,24 @@ class PostController extends Controller
...
@@ -445,24 +426,24 @@ class PostController extends Controller
### ブロックを使う <span id="using-blocks"></span>
### ブロックを使う <span id="using-blocks"></span>
ブロックを使うと、ある場所でビューコンテンツを規定して、別の場所
でそれを表示する
ことが可能になります。
ブロックを使うと、ある場所でビューコンテントを定義して、別の場所
でそれを表示するこ
とが可能になります。
ブロックはたいていはレイアウトと一緒に使われます。
ブロックはたいていはレイアウトと一緒に使われます。
例えば、ブロックをコンテンツビューで定義して、それをレイアウトで表示する、ということが出来ます。
例えば、ブロックをコンテントビューで定義
し
て、それをレイアウトで表示する、ということが出来ます。
[
[yii\base\View::beginBlock()|beginBlock()
]
] と
[
[yii\base\View::endBlock()|endBlock()
]
] を呼んでブロックを定義します。
[
[yii\base\View::beginBlock()|beginBlock()
]
] と
[
[yii\base\View::endBlock()|endBlock()
]
] を呼んでブロックを定義します。
すると、そのブロックを
`$view->blocks[$blockID]`
によってアクセス出来るようになります。
すると、そのブロックを
`$view->blocks[$blockID]`
によってアクセス出来るようになります。
ここで
`$blockID`
は、定義したときにブロックに割り当てたユニークな ID を指します。
ここで
`$blockID`
は、定義したときにブロックに割り当てたユニークな ID を指します。
次の例は、どのようにブロックを使えば、レイアウトの特定の部分をコンテンツビューでカスタマイズすることが出来るかを示すものです。
次の例は、どのようにブロックを使えば、レイアウトの特定の部分をコンテントビューでカスタマイズすることが出来
る
かを示すものです。
最初に、コンテンツビューで、一つまたは複数のブロックを定義します。
最初に、コンテントビュー
で
、一つまたは複数のブロックを定義します。
```
php
```
php
...
...
<?php
$this
->
beginBlock
(
'block1'
);
?>
<?php
$this
->
beginBlock
(
'block1'
);
?>
... block1 のコンテンツ ...
... block1 のコンテント ...
<?php
$this
->
endBlock
();
?>
<?php
$this
->
endBlock
();
?>
...
@@ -470,19 +451,19 @@ class PostController extends Controller
...
@@ -470,19 +451,19 @@ class PostController extends Controller
<?php
$this
->
beginBlock
(
'block3'
);
?>
<?php
$this
->
beginBlock
(
'block3'
);
?>
... block3 のコンテンツ ...
... block3 のコンテント ...
<?php
$this
->
endBlock
();
?>
<?php
$this
->
endBlock
();
?>
```
```
次に、レイアウトビューで、得ることが出来ればブロックをレンダリングし、ブロックが定義されていないときは何らかの既定のコンテンツを表示します。
次に、レイアウトビューで、得ることが出来ればブロックをレンダリングし、ブロックが定義されていないときは何らかの既定のコンテントを表示します。
```
php
```
php
...
...
<?php
if
(
isset
(
$this
->
blocks
[
'block1'
]))
:
?>
<?php
if
(
isset
(
$this
->
blocks
[
'block1'
]))
:
?>
<?=
$this
->
blocks
[
'block1'
]
?>
<?=
$this
->
blocks
[
'block1'
]
?>
<?php
else
:
?>
<?php
else
:
?>
... block1 の既定のコンテンツ ...
... block1 の既定のコンテント ...
<?php
endif
;
?>
<?php
endif
;
?>
...
...
...
@@ -490,7 +471,7 @@ class PostController extends Controller
...
@@ -490,7 +471,7 @@ class PostController extends Controller
<?php
if
(
isset
(
$this
->
blocks
[
'block2'
]))
:
?>
<?php
if
(
isset
(
$this
->
blocks
[
'block2'
]))
:
?>
<?=
$this
->
blocks
[
'block2'
]
?>
<?=
$this
->
blocks
[
'block2'
]
?>
<?php
else
:
?>
<?php
else
:
?>
... block2 の既定のコンテンツ ...
... block2 の既定のコンテント ...
<?php
endif
;
?>
<?php
endif
;
?>
...
...
...
@@ -498,7 +479,7 @@ class PostController extends Controller
...
@@ -498,7 +479,7 @@ class PostController extends Controller
<?php
if
(
isset
(
$this
->
blocks
[
'block3'
]))
:
?>
<?php
if
(
isset
(
$this
->
blocks
[
'block3'
]))
:
?>
<?=
$this
->
blocks
[
'block3'
]
?>
<?=
$this
->
blocks
[
'block3'
]
?>
<?php
else
:
?>
<?php
else
:
?>
... block3 の既定のコンテンツ ...
... block3 の既定のコンテント ...
<?php
endif
;
?>
<?php
endif
;
?>
...
...
```
```
...
@@ -536,10 +517,10 @@ class PostController extends Controller
...
@@ -536,10 +517,10 @@ class PostController extends Controller
### ページタイトルを設定する <span id="setting-page-titles"></span>
### ページタイトルを設定する <span id="setting-page-titles"></span>
どんなウェブページにもタイトルが無ければなりません。通常、タイトルタグは
[
layout
](
#layouts
)
の中で表示されます。
どんなウェブページにもタイトルが無ければなりません。通常、タイトルタグは
[
layout
](
#layouts
)
の中で表示されます。
しかし、実際においては、多くの場合、タイトルはレイアウトではなくコンテンツビューで決められます。
しかし、実際においては、多くの場合、タイトルはレイアウトではなくコンテントビューで決められます。
この問題を解決するために、
[
[yii\web\View
]
] は、タイトル情報をコンテンツビューからレイアウトに渡すための
[
[yii\web\View::title|title
]
] プロパティを提供しています。
この問題を解決するために、
[
[yii\web\View
]
] は、タイトル情報をコンテントビューからレイアウトに渡す
た
めの
[
[yii\web\View::title|title
]
] プロパティを提供しています。
この機能を利用するためには、全てのコンテンツビューにおいて、次のようにタイトルを設定します。
この機能を利用するためには、全てのコンテントビューにおいて、次の
よ
うにタイトルを設定します。
```
php
```
php
<?php
<?php
...
@@ -559,7 +540,7 @@ $this->title = 'My page title';
...
@@ -559,7 +540,7 @@ $this->title = 'My page title';
ウェブページは、通常、いろいろな関係者によって必要とされるさまざまなメタタグを生成する必要があります。
ウェブページは、通常、いろいろな関係者によって必要とされるさまざまなメタタグを生成する必要があります。
ページタイトルと同じように、メタタグは
`<head>`
セクションに出現して、通常はレイアウトの中で生成されます。
ページタイトルと同じように、メタタグは
`<head>`
セクションに出現して、通常はレイアウトの中で生成されます。
どのようなメタタグを生成するかをコンテンツビューの中で指定したい場合
は、下記のように、
[
[yii\web\View::registerMetaTag()
]
] をコンテンツビューの呼ぶことが出来ます。
どのようなメタタグを生成するかをコンテントビューの中で指定したい場合
は、下記のように、
[
[yii\web\View::registerMetaTag()
]
] をコンテントビューの呼ぶことが出来ます。
```
php
```
php
<?php
<?php
...
@@ -590,7 +571,7 @@ $this->registerMetaTag(['name' => 'description', 'content' => '髱「逋ス縺い繝ゥ繧
...
@@ -590,7 +571,7 @@ $this->registerMetaTag(['name' => 'description', 'content' => '髱「逋ス縺い繝ゥ繧
[
メタタグ
](
#registering-meta-tags
)
と同じように、リンクタグも多くの場合において有用なものです。
[
メタタグ
](
#registering-meta-tags
)
と同じように、リンクタグも多くの場合において有用なものです。
例えば、favicon をカスタマイズしたり、RSS フィードを指し示したり、OpenID を別のサーバに委任したり、等々。
例えば、favicon をカスタマイズしたり、RSS フィードを指し示したり、OpenID を別のサーバに委任したり、等々。
リンクタグも、
[
[yii\web\View::registerLinkTag()
]
] を使って、メタタグと同じような方法で取り扱うことが出来ます。
リンクタグも、
[
[yii\web\View::registerLinkTag()
]
] を使って、メタタグと同じような方法で取り扱うことが出来ます。
例えば、コンテンツビューにおいて、次のようにしてリンクタグを登録することが出来ます。
例えば、コンテントビューに
お
いて、次のようにしてリンクタグを登録することが出来ます。
```
php
```
php
$this
->
registerLinkTag
([
$this
->
registerLinkTag
([
...
@@ -607,14 +588,13 @@ $this->registerLinkTag([
...
@@ -607,14 +588,13 @@ $this->registerLinkTag([
<link
title=
"Yii ライブニューズ"
rel=
"alternate"
type=
"application/rss+xml"
href=
"http://www.yiiframework.com/rss.xml/"
>
<link
title=
"Yii ライブニューズ"
rel=
"alternate"
type=
"application/rss+xml"
href=
"http://www.yiiframework.com/rss.xml/"
>
```
```
[
[yii\web\View::registerMetaTag()|registerMetaTags()
]
] と同じように、
[
[yii\web\View::registerLinkTag()|registerLinkTag()
]
]
[
[yii\web\View::registerMetaTag()|registerMetaTags()
]
] と同じように、
[
[yii\web\View::registerLinkTag()|registerLinkTag()
]
] を呼ぶときにキーを指定すると、同じリンクタグを繰り返して生成するのを避けることが出来ます。
を呼ぶときにキーを指定すると、同じリンクタグを繰り返して生成するのを避けることが出来ます。
## ビューのイベント <span id="view-events"></span>
## ビューのイベント <span id="view-events"></span>
[
[yii\base\View|ビューコンポーネント
]
] はビューをレンダリングする過程においていくつかのイベントをトリガします。
[
[yii\base\View|ビューコンポーネント
]
] はビューをレンダリングする過程においていくつかのイベントをトリガします。
これらのイベントに反応することによって、ビューにコンテンツを注入したり、エンドユーザに送信される前にレンダリング結果を加工したりすることが出来ます。
これらのイベントに反応することによって、ビューにコンテントを注入したり、エンドユーザに送信さ
れ
る前にレンダリング結果を加工したりすることが出来ます。
-
[
[yii\base\View::EVENT_BEFORE_RENDER|EVENT_BEFORE_RENDER
]
]: コントローラでファイルをレンダリングする前にトリガされます。
-
[
[yii\base\View::EVENT_BEFORE_RENDER|EVENT_BEFORE_RENDER
]
]: コントローラでファイルをレンダリングする前にトリガされます。
このイベントのハンドラは、
[
[yii\base\ViewEvent::isValid
]
] を false にセットして、レンダリングのプロセスをキャンセルすることが出来ます。
このイベントのハンドラは、
[
[yii\base\ViewEvent::isValid
]
] を false にセットして、レンダリングのプロセスをキャンセルすることが出来ます。
...
@@ -636,7 +616,7 @@ $this->registerLinkTag([
...
@@ -636,7 +616,7 @@ $this->registerLinkTag([
## 静的なページをレンダリングする <span id="rendering-static-pages"></span>
## 静的なページをレンダリングする <span id="rendering-static-pages"></span>
静的なページというのは、主たるコンテンツのほとんどが静的なもので、コントローラからプッシュされる動的なデータにアクセスする必要がないページを指します。
静的なページというのは、主たるコンテントのほとんどが静的なもの
で
、コントローラからプッシュされる動的なデータにアクセスする必要がないページを指します。
静的なページは、そのコードをビューに置き、そして、コントローラで次のようなコードを使うと表示することが出来ます。
静的なページは、そのコードをビューに置き、そして、コントローラで次のようなコードを使うと表示することが出来ます。
...
@@ -648,8 +628,8 @@ public function actionAbout()
...
@@ -648,8 +628,8 @@ public function actionAbout()
```
```
ウェブサイトが多くの静的なページを含んでいる場合、同じようなコードを何度も繰り返すのは非常に面倒くさいでしょう。
ウェブサイトが多くの静的なページを含んでいる場合、同じようなコードを何度も繰り返すのは非常に面倒くさいでしょう。
この問題を解決するために、
[
[yii\web\ViewAction
]
] という
[
スタンドアロンアクション
](
structure-controllers.md#standalone-actions
)
この問題を解決するために、
[
[yii\web\ViewAction
]
] という
[
スタンドアロンアクション
](
structure-controllers.md#standalone-actions
)
をコントローラに導入することが出来ま
す。
をコントローラに導入することが出来ます。例えば、
例
えば、
```
php
```
php
namespace
app\controllers
;
namespace
app\controllers
;
...
...
docs/guide-ja/structure-widgets.md
View file @
df9a8896
...
@@ -40,8 +40,8 @@ use yii\jui\DatePicker;
...
@@ -40,8 +40,8 @@ use yii\jui\DatePicker;
])
?>
])
?>
```
```
ウィジェットの中には、コンテン
ツ
のブロックを受け取ることが出来るものもあります。
ウィジェットの中には、コンテン
ト
のブロックを受け取ることが出来るものもあります。
その場合、コンテン
ツ
のブロックは
[
[yii\base\Widget::begin()
]
] と
[
[yii\base\Widget::end()
]
] の呼び出しの間に包むようにしなければなりません。
その場合、コンテン
ト
のブロックは
[
[yii\base\Widget::begin()
]
] と
[
[yii\base\Widget::end()
]
] の呼び出しの間に包むようにしなければなりません。
例えば、次のコードは
[
[yii\widgets\ActiveForm
]
] ウィジェットを使ってログインフォームを生成するものです。
例えば、次のコードは
[
[yii\widgets\ActiveForm
]
] ウィジェットを使ってログインフォームを生成するものです。
このウィジェットは、
`begin()`
と
`end()`
が呼ばれる場所で、それぞれ、開始と終了の
`<form>`
タグを生成します。
このウィジェットは、
`begin()`
と
`end()`
が呼ばれる場所で、それぞれ、開始と終了の
`<form>`
タグを生成します。
その間に置かれたものは全てそのままレンダリングされます。
その間に置かれたものは全てそのままレンダリングされます。
...
@@ -66,7 +66,7 @@ use yii\helpers\Html;
...
@@ -66,7 +66,7 @@ use yii\helpers\Html;
```
```
[
[yii\base\Widget::widget()
]
] がウィジェットのレンダリング結果を返すのとは違って、
[
[yii\base\Widget::begin()
]
] メソッドがウィジェットのインスタンスを返すことに注意してください。
[
[yii\base\Widget::widget()
]
] がウィジェットのレンダリング結果を返すのとは違って、
[
[yii\base\Widget::begin()
]
] メソッドがウィジェットのインスタンスを返すことに注意してください。
返されたウィジェットのインスタンスを使って、ウィジェットのコンテン
ツ
を構築することが出来ます。
返されたウィジェットのインスタンスを使って、ウィジェットのコンテン
ト
を構築することが出来ます。
## ウィジェットを作成する <span id="creating-widgets"></span>
## ウィジェットを作成する <span id="creating-widgets"></span>
...
@@ -75,7 +75,7 @@ use yii\helpers\Html;
...
@@ -75,7 +75,7 @@ use yii\helpers\Html;
通常、
`init()`
メソッドはウィジェットのプロパティを正規化するコードを含むべきものであり、
`run()`
メソッドはウィジェットのレンダリング結果を生成するコードを含むべきものです。
通常、
`init()`
メソッドはウィジェットのプロパティを正規化するコードを含むべきものであり、
`run()`
メソッドはウィジェットのレンダリング結果を生成するコードを含むべきものです。
レンダリング結果は、直接に "echo" しても、
`run()`
の返り値として文字列として返しても構いません。
レンダリング結果は、直接に "echo" しても、
`run()`
の返り値として文字列として返しても構いません。
次の例では、
`HelloWidget`
が
`message`
プロパティとして割り当てられたコンテン
ツ
を HTML エンコードして表示します。
次の例では、
`HelloWidget`
が
`message`
プロパティとして割り当てられたコンテン
ト
を HTML エンコードして表示します。
プロパティがセットされていない場合は、デフォルトとして "Hello World" を表示します。
プロパティがセットされていない場合は、デフォルトとして "Hello World" を表示します。
```
php
```
php
...
@@ -112,7 +112,7 @@ use app\components\HelloWidget;
...
@@ -112,7 +112,7 @@ use app\components\HelloWidget;
<?=
HelloWidget
::
widget
([
'message'
=>
'おはよう'
])
?>
<?=
HelloWidget
::
widget
([
'message'
=>
'おはよう'
])
?>
```
```
下記は
`HelloWidget`
の変種で、
`begin()`
と
`end()`
の間に包まれたコンテン
ツ
を受け取り、それを HTML エンコードして表示するものです。
下記は
`HelloWidget`
の変種で、
`begin()`
と
`end()`
の間に包まれたコンテン
ト
を受け取り、それを HTML エンコードして表示するものです。
```
php
```
php
namespace
app\components
;
namespace
app\components
;
...
@@ -149,13 +149,13 @@ use app\components\HelloWidget;
...
@@ -149,13 +149,13 @@ use app\components\HelloWidget;
?>
?>
<?php
HelloWidget
::
begin
();
?>
<?php
HelloWidget
::
begin
();
?>
... タグを含みうるコンテン
ツ
...
... タグを含みうるコンテン
ト
...
<?php
HelloWidget
::
end
();
?>
<?php
HelloWidget
::
end
();
?>
```
```
場合によっては、ウィジェットが大きな固まりのコンテン
ツ
を表示する必要があるかもしれません。
場合によっては、ウィジェットが大きな固まりのコンテン
ト
を表示する必要があるかもしれません。
コンテン
ツを
`run()`
メソッドの中に埋め込むことも出来ますが、より良い方法は、コンテンツ
を
[
ビュー
](
structure-views.md
)
コンテン
トを
`run()`
メソッドの中に埋め込むことも出来ますが、より良い方法は、コンテント
を
[
ビュー
](
structure-views.md
)
の中に置いて、
[
[yii\base\Widget::render()
]
] を呼んでレンダリングすることです。
の中に置いて、
[
[yii\base\Widget::render()
]
] を呼んでレンダリングすることです。
例えば、
例えば、
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment