mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-16 06:17:56 +08:00
Merge branch 'master' of git://github.com/yiisoft/yii2 into 9562-add-char-datatype
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
============
|
||||
|
||||
データキャッシュは PHP の変数をキャッシュに格納し、あとでキャッシュからそれらを読み込みます。
|
||||
[クエリキャッシュ](#query-caching) や [ページキャッシュ](caching-page.md) などのより高度なキャッシュ機能の基礎でもあります。
|
||||
これは、[クエリキャッシュ](#query-caching) や [ページキャッシュ](caching-page.md) などの、より高度なキャッシュ機能の基礎でもあります。
|
||||
|
||||
以下はデータキャッシュの典型的な利用パターンを示したコードです。`$cache` は [キャッシュコンポーネント](#cache-components) を指します:
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ Yiiはイベントをサポートするために、 [[yii\base\Component]] と
|
||||
|
||||
|
||||
イベントハンドラ <span id="event-handlers"></span>
|
||||
--------------
|
||||
----------------
|
||||
|
||||
イベントハンドラとは、関連するイベントがトリガされたときに実行される、 [PHP コールバック](http://www.php.net/manual/ja/language.types.callable.php)
|
||||
です。次のコールバックのいずれも使用可能です:
|
||||
@@ -37,7 +37,7 @@ function ($event) {
|
||||
|
||||
|
||||
イベントハンドラのアタッチ <span id="attaching-event-handlers"></span>
|
||||
------------------------
|
||||
--------------------------
|
||||
|
||||
イベントハンドラは [[yii\base\Component::on()]] を呼び出すことでアタッチできます。たとえば:
|
||||
|
||||
@@ -76,7 +76,7 @@ function function_name($event) {
|
||||
```
|
||||
|
||||
イベントハンドラの順序
|
||||
-------------------
|
||||
----------------------
|
||||
|
||||
ひとつのイベントには、ひとつだけでなく複数のハンドラをアタッチすることができます。イベントがトリガされると、アタッチされたハンドラは、
|
||||
それらがイベントにアタッチされた順序どおりに呼び出されます。あるハンドラがその後に続くハンドラの呼び出しを停止する必要がある場合は、
|
||||
@@ -99,7 +99,7 @@ $foo->on(Foo::EVENT_HELLO, function ($event) {
|
||||
```
|
||||
|
||||
イベントのトリガ <span id="triggering-events"></span>
|
||||
-----------------
|
||||
----------------
|
||||
|
||||
イベントは、 [[yii\base\Component::trigger()]] メソッドを呼び出すことでトリガされます。このメソッドには **イベント名** が必須で、
|
||||
オプションで、イベントハンドラに渡されるパラメータを記述したイベントオブジェクトを渡すこともできます。たとえば:
|
||||
@@ -163,7 +163,7 @@ class Mailer extends Component
|
||||
|
||||
|
||||
イベントハンドラのデタッチ <span id="detaching-event-handlers"></span>
|
||||
------------------------
|
||||
--------------------------
|
||||
|
||||
イベントからハンドラを取り外すには、 [[yii\base\Component::off()]] メソッドを呼び出します。たとえば:
|
||||
|
||||
@@ -192,7 +192,7 @@ $foo->off(Foo::EVENT_HELLO);
|
||||
|
||||
|
||||
クラスレベル・イベントハンドラ <span id="class-level-event-handlers"></span>
|
||||
--------------------------
|
||||
------------------------------
|
||||
|
||||
ここまでの項では、 *インスタンスレベル* でのイベントにハンドラをアタッチする方法を説明してきました。
|
||||
場合によっては、特定のインスタンスだけではなく、クラスのすべてのインスタンスがトリガした
|
||||
@@ -320,7 +320,7 @@ Event::off('DanceEventInterface', DanceEventInterface::EVENT_DANCE);
|
||||
|
||||
|
||||
グローバル・イベント <span id="global-events"></span>
|
||||
-------------
|
||||
--------------------
|
||||
|
||||
Yiiは、実際に上記のイベントメカニズムに基づいたトリックである、いわゆる *グローバル・イベント* をサポートしています。
|
||||
グローバル・イベントは、 [アプリケーション](structure-applications.md) インスタンス自身などの、グローバルにアクセス可能なシングルトンを必要とします。
|
||||
|
||||
@@ -1020,8 +1020,32 @@ $customers = Customer::find()->joinWith([
|
||||
上記のクエリは *全ての* 顧客を返し、各顧客について全てのアクティブな注文を返します。
|
||||
これは、少なくとも一つのアクティブな注文を持つ顧客を全て返す、という以前の例とは異なっていることに注意してください。
|
||||
|
||||
> Info: [[yii\db\ActiveQuery]] が [[[[yii\db\ActiveQuery::onCondition()|onCondition()]] によって条件を指定された場合、クエリが JOIN 句を含む場合は、条件は `ON` の部分に置かれます。
|
||||
クエリが JOIN 句を含まない場合は、ON の条件は自動的に `WHERE` の部分に追加されます。
|
||||
> Info: [[yii\db\ActiveQuery]] が [[yii\db\ActiveQuery::onCondition()|onCondition()]] によって条件を指定された場合、クエリが JOIN 句を含む場合は、条件は `ON` の部分に置かれます。
|
||||
クエリが JOIN 句を含まない場合は、条件は自動的に `WHERE` の部分に追加されます。
|
||||
このようにして、リレーションのテーブルのカラムを含む条件だけが `ON` の部分に置かれます。
|
||||
|
||||
#### リレーションのテーブルのエイリアス <span id="relation-table-aliases"></span>
|
||||
|
||||
前に注意したように、クエリに JOIN を使うときは、カラム名の曖昧さを解消する必要があります。
|
||||
そのために、テーブルにエイリアスを定義することがよくあります。
|
||||
リレーションのテーブルのためにエイリアスを設定することは、リレーショナルクエリを次のようにカスタマイズすることによっても可能です。
|
||||
|
||||
```php
|
||||
$query->joinWith([
|
||||
'orders' => function ($q) {
|
||||
$q->from(['o' => Order::tableName()]);
|
||||
},
|
||||
])
|
||||
```
|
||||
|
||||
しかし、これでは非常に複雑ですし、リレーションオブジェクトのテーブル名をハードコーディングしたり、`Order::tableName()` を呼んだりしなければなりません。
|
||||
バージョン 2.0.7 以降、Yii はこれに対するショートカットを提供しています。
|
||||
今では、次のようにしてリレーションのテーブルのエイリアスを定義して使うことが出来ます。
|
||||
|
||||
```php
|
||||
// orders リレーションを JOIN し、結果を orders.id でソートする
|
||||
$query->joinWith(['orders o'])->orderBy('o.id');
|
||||
```
|
||||
|
||||
### 逆リレーション <span id="inverse-relations"></span>
|
||||
|
||||
|
||||
@@ -268,7 +268,7 @@ $count = Yii::$app->db->createCommand("SELECT COUNT([[id]]) FROM {{employee}}")
|
||||
|
||||
あなたの DB テーブル名のほとんどが何か共通の接頭辞を持っている場合は、Yii DAO によってサポートされているテーブル接頭辞の機能を使うことが出来ます。
|
||||
|
||||
最初に、[[yii\db\Connection::tablePrefix]] プロパティによって、テーブル接頭辞を指定します。
|
||||
最初に、アプリケーションの構成情報で、[[yii\db\Connection::tablePrefix]] プロパティによって、テーブル接頭辞を指定します。
|
||||
|
||||
```php
|
||||
return [
|
||||
|
||||
@@ -176,8 +176,10 @@ class m150101_185401_create_news_table extends Migration
|
||||
|
||||
バージョン 2.0.7 以降では、マイグレーション・コンソールがマイグレーションを生成する便利な方法を提供しています。
|
||||
|
||||
マイグレーションの名前が `create_xxx` や `drop_xxx` などの特別な形式である場合は、
|
||||
生成されるマイグレーション・ファイルに追加のコードが書き込まれるのです。
|
||||
マイグレーションの名前が特定の形式である場合は、生成されるマイグレーション・ファイルに追加のコードが書き込まれます。
|
||||
例えば、`create_xxx` や `drop_xxx` であれば、テーブルの作成や削除をするコードが追加されます。
|
||||
以下で、この機能の全ての変種を説明します。
|
||||
|
||||
|
||||
### テーブルの作成
|
||||
|
||||
@@ -207,7 +209,7 @@ class m150811_220037_create_post extends Migration
|
||||
テーブルのフィールドも直接に生成したい場合は、`--fields` オプションでフィールドを指定します。
|
||||
|
||||
```php
|
||||
yii migrate/create create_post --fields=title:string,body:text
|
||||
yii migrate/create create_post --fields="title:string,body:text"
|
||||
```
|
||||
|
||||
これは、次のコードを生成します。
|
||||
@@ -234,7 +236,7 @@ class m150811_220037_create_post extends Migration
|
||||
さらに多くのフィールド・パラメータを指定することも出来ます。
|
||||
|
||||
```php
|
||||
yii migrate/create create_post --fields=title:string(12):notNull:unique,body:text
|
||||
yii migrate/create create_post --fields="title:string(12):notNull:unique,body:text"
|
||||
```
|
||||
|
||||
これは、次のコードを生成します。
|
||||
@@ -259,13 +261,13 @@ class m150811_220037_create_post extends Migration
|
||||
```
|
||||
|
||||
> Note: プライマリ・キーが自動的に追加されて、デフォルトでは `id` と名付けられます。
|
||||
> 別の名前を使いたい場合は、`--fields=name:primaryKey` のように、明示的に指定してください。
|
||||
> 別の名前を使いたい場合は、`--fields="name:primaryKey"` のように、明示的に指定してください。
|
||||
|
||||
|
||||
### テーブルを削除する
|
||||
|
||||
```php
|
||||
yii migrate/create drop_post --fields=title:string(12):notNull:unique,body:text
|
||||
yii migrate/create drop_post --fields="title:string(12):notNull:unique,body:text"
|
||||
```
|
||||
|
||||
これは、次のコードを生成します。
|
||||
@@ -296,7 +298,7 @@ class m150811_220037_drop_post extends Migration
|
||||
カラムを追加するためには、次のようにします。
|
||||
|
||||
```php
|
||||
yii migrate/create add_position_to_post --fields=position:integer
|
||||
yii migrate/create add_position_to_post --fields="position:integer"
|
||||
```
|
||||
|
||||
これが次のコードを生成します。
|
||||
@@ -321,7 +323,7 @@ class m150811_220037_add_position_to_post extends Migration
|
||||
マイグレーションの名前が `drop_xxx_from_yyy` の形式である場合、ファイルの内容は、必要となる `addColumn` と `dropColumn` を含むことになります。
|
||||
|
||||
```php
|
||||
yii migrate/create drop_position_from_post --fields=position:integer
|
||||
yii migrate/create drop_position_from_post --fields="position:integer"
|
||||
```
|
||||
|
||||
これは、次のコードを生成します。
|
||||
|
||||
@@ -109,30 +109,85 @@ $result = ArrayHelper::getColumn($array, function ($element) {
|
||||
## 配列を再インデックスする <span id="reindexing-arrays"></span>
|
||||
|
||||
指定されたキーに従って配列にインデックスを付けるために、`index` メソッドを使うことが出来ます。
|
||||
入力値の配列は、多次元配列であるか、オブジェクトの配列でなければなりません。
|
||||
キーは、サブ配列のキーの名前、オブジェクトのプロパティの名前、または、配列要素を与えられてキーの値を返す無名関数とすることが出来ます。
|
||||
入力値は、多次元配列であるか、オブジェクトの配列でなければなりません。
|
||||
`$key` は、サブ配列のキーの名前、オブジェクトのプロパティの名前、または、キーとして使用される値を返す無名関数とすることが出来ます。
|
||||
|
||||
`$groups` 属性はキーの配列であり、入力値の配列を一つまたは複数のサブ配列にグループ化するために使用されます。
|
||||
|
||||
特定の要素の `$key` 属性またはその値が null であるとき、`$groups` が定義されていない場合は、その要素は破棄されて、結果には入りません。
|
||||
そうではなく、`$groups` が指定されている場合は、配列の要素はキー無しで結果の配列に追加されます。
|
||||
|
||||
キーの値が null である場合、対応する配列要素は破棄されて、結果には入りません。
|
||||
例えば、
|
||||
|
||||
```php
|
||||
$array = [
|
||||
['id' => '123', 'data' => 'abc'],
|
||||
['id' => '345', 'data' => 'def'],
|
||||
['id' => '123', 'data' => 'abc', 'device' => 'laptop'],
|
||||
['id' => '345', 'data' => 'def', 'device' => 'tablet'],
|
||||
['id' => '345', 'data' => 'hgi', 'device' => 'smartphone'],
|
||||
];
|
||||
$result = ArrayHelper::index($array, 'id');
|
||||
// 結果は次のようになります
|
||||
// [
|
||||
// '123' => ['id' => '123', 'data' => 'abc'],
|
||||
// '345' => ['id' => '345', 'data' => 'def'],
|
||||
// ]
|
||||
```
|
||||
|
||||
// 無名関数を使う
|
||||
結果は、`id` 属性の値をキーとする連想配列になります。
|
||||
```php
|
||||
[
|
||||
'123' => ['id' => '123', 'data' => 'abc', 'device' => 'laptop'],
|
||||
'345' => ['id' => '345', 'data' => 'hgi', 'device' => 'smartphone']
|
||||
// 元の配列の2番目の要素は、同じ id であるため、最後の要素によって上書きされます
|
||||
]
|
||||
```
|
||||
|
||||
`$key` として無名関数を渡しても同じ結果になります。
|
||||
```php
|
||||
$result = ArrayHelper::index($array, function ($element) {
|
||||
return $element['id'];
|
||||
});
|
||||
```
|
||||
|
||||
`id` を3番目の引数として渡すと、`$array` を `id` によってグループ化することが出来ます。
|
||||
```php
|
||||
$result = ArrayHelper::index($array, null, 'id');
|
||||
```
|
||||
|
||||
結果は、最初のレベルが `id` でグループ化され、第2のレベルはインデックスされていない連想配列になります。
|
||||
```php
|
||||
[
|
||||
'123' => [
|
||||
['id' => '123', 'data' => 'abc', 'device' => 'laptop']
|
||||
],
|
||||
'345' => [ // このインデックスを持つ全ての要素が結果の配列に入る
|
||||
['id' => '345', 'data' => 'def', 'device' => 'tablet'],
|
||||
['id' => '345', 'data' => 'hgi', 'device' => 'smartphone'],
|
||||
]
|
||||
]
|
||||
```
|
||||
|
||||
無名関数を配列のグループ化に使うことも出来ます。
|
||||
```php
|
||||
$result = ArrayHelper::index($array, 'data', [function ($element) {
|
||||
return $element['id'];
|
||||
}, 'device']);
|
||||
```
|
||||
|
||||
結果は、最初のレベルが `id` でグループ化され、第2のレベルが `device` でグループ化され、第3のレベルが `data` でインデックスされた連想配列になります。
|
||||
```php
|
||||
[
|
||||
'123' => [
|
||||
'laptop' => [
|
||||
'abc' => ['id' => '123', 'data' => 'abc', 'device' => 'laptop']
|
||||
]
|
||||
],
|
||||
'345' => [
|
||||
'tablet' => [
|
||||
'def' => ['id' => '345', 'data' => 'def', 'device' => 'tablet']
|
||||
],
|
||||
'smartphone' => [
|
||||
'hgi' => ['id' => '345', 'data' => 'hgi', 'device' => 'smartphone']
|
||||
]
|
||||
]
|
||||
]
|
||||
```
|
||||
|
||||
|
||||
## マップを作成する <span id="building-maps"></span>
|
||||
|
||||
|
||||
@@ -335,9 +335,10 @@ echo GridView::widget([
|
||||
|
||||
### データをフィルタリングする
|
||||
|
||||
データをフィルタリングするためには、GridView は、フィルタリングのフォームから入力を受け取り、検索基準に従ってデータプロバイダのクエリを修正するための [モデル](structure-models.md) を必要とします。
|
||||
データをフィルタリングするためには、GridView は検索基準を表す [モデル](structure-models.md) を必要とします。
|
||||
検索基準は、通常は、グリッドビューのテーブルのフィルタのフィールドから取得されます。
|
||||
[アクティブレコード](db-active-record.md) を使用している場合は、必要な機能を提供する検索用のモデルクラスを作成するのが一般的なプラクティスです (あなたに代って [Gii](start-gii.md) が生成してくれます)。
|
||||
このクラスは、検索のためのバリデーション規則を定義し、データプロバイダを返す `search()` メソッドを提供するものです。
|
||||
このクラスは、検索のためのバリデーション規則を定義し、検索基準に従って修正されたクエリを持つデータプロバイダを返す `search()` メソッドを提供するものです。
|
||||
|
||||
`Post` モデルに対して検索機能を追加するために、次の例のようにして、`PostSearch` モデルを作成することが出来ます。
|
||||
|
||||
@@ -516,6 +517,7 @@ $dataProvider = new ActiveDataProvider([
|
||||
// リレーション `author` を結合します。これはテーブル `users` に対するリレーションであり、
|
||||
// テーブルエイリアスを `author` とします。
|
||||
$query->joinWith(['author' => function($query) { $query->from(['author' => 'users']); }]);
|
||||
// バージョン 2.0.7 以降では、上の行は $query->joinWith('author AS author'); として単純化することが出来ます。
|
||||
// リレーションのカラムによる並べ替えを有効にします。
|
||||
$dataProvider->sort->attributes['author.name'] = [
|
||||
'asc' => ['author.name' => SORT_ASC],
|
||||
@@ -556,8 +558,9 @@ $query->andFilterWhere(['LIKE', 'author.name', $this->getAttribute('author.name'
|
||||
> 例えば、投稿者のリレーションテーブルに `au` というエイリアスを使う場合は、joinWith の文は以下のようになります。
|
||||
>
|
||||
> ```php
|
||||
> $query->joinWith(['author' => function($query) { $query->from(['au' => 'users']); }]);
|
||||
> $query->joinWith(['author au']);
|
||||
> ```
|
||||
>
|
||||
> リレーションの定義においてエイリアスが定義されている場合は、単に `$query->joinWith(['author']);` として呼び出すことも可能です。
|
||||
>
|
||||
> フィルタ条件においてはエイリアスが使われなければなりませんが、属性の名前はリレーション名のままで変りません。
|
||||
|
||||
@@ -103,16 +103,20 @@ composer create-project --prefer-dist yiisoft/yii2-app-basic basic
|
||||
php yii serve
|
||||
```
|
||||
|
||||
> Note: デフォルトでは、この HTTP サーバは 8080 ポートをリスンします。
|
||||
しかし、このポートがすでに使われていたり、複数のアプリケーションをこの方法で動かしたい場合は、どのポートを使うかを指定したいと思うでしょう。
|
||||
単に --port 引数を追加して下さい。
|
||||
|
||||
```bash
|
||||
php yii serve --port=8888
|
||||
```
|
||||
|
||||
下記の URL によって、インストールされた Yii アプリケーションにブラウザを使ってアクセスすることが出来ます。
|
||||
|
||||
```
|
||||
http://localhost/
|
||||
http://localhost:8080/
|
||||
```
|
||||
|
||||
この URL は、あなたが Yii を ウェブサーバのドキュメントルートディレクトリ直下の `basic` という名前のディレクトリにインストールしたこと、
|
||||
そして、ウェブサーバがローカルマシン (`localhost`) で走っていることを想定しています。
|
||||
あなたのインストールの環境に合うように URL を変更する必要があるかもしれません。
|
||||
|
||||

|
||||
|
||||
ブラウザに上のような "おめでとう!" のページが表示されるはずです。
|
||||
|
||||
@@ -256,7 +256,7 @@ Yii supports fixtures via the `yii fixture` command line tool. This tool support
|
||||
Fixtures format
|
||||
---------------
|
||||
|
||||
Fixtures are objects with different methods and configurations, refer to official [documentation](https://github.com/yiisoft/yii2/blob/master/docs/guide/test-fixture.md) on them.
|
||||
Fixtures are objects with different methods and configurations, refer to official [documentation](https://github.com/yiisoft/yii2/blob/master/docs/guide/test-fixtures.md) on them.
|
||||
Lets assume we have fixtures data to load:
|
||||
|
||||
```
|
||||
@@ -280,7 +280,7 @@ return [
|
||||
];
|
||||
```
|
||||
If we are using fixture that loads data into database then these rows will be applied to `users` table. If we are using nosql fixtures, for example `mongodb`
|
||||
fixture, then this data will be applied to `users` mongodb collection. In order to learn about implementing various loading strategies and more, refer to official [documentation](https://github.com/yiisoft/yii2/blob/master/docs/guide/test-fixture.md).
|
||||
fixture, then this data will be applied to `users` mongodb collection. In order to learn about implementing various loading strategies and more, refer to official [documentation](https://github.com/yiisoft/yii2/blob/master/docs/guide/test-fixtures.md).
|
||||
Above fixture example was auto-generated by `yii2-faker` extension, read more about it in these [section](#auto-generating-fixtures).
|
||||
Fixture classes name should not be plural.
|
||||
|
||||
|
||||
@@ -289,6 +289,8 @@ function foo($model, $attribute) {
|
||||
デフォルト値は null であり、すべてのファイル名拡張子が許可されることを意味します。
|
||||
- `mimeTypes`: アップロードを許可されるファイルの MIME タイプのリスト。
|
||||
リストは、配列、または、空白かカンマで区切られたファイルの MIME タイプからなる文字列 (例えば、"image/jpeg, image/png") で指定することが出来ます。
|
||||
特殊文字 `*` によるワイルドカードのマスクを使って、一群の MIME タイプに一致させることも出来ます。
|
||||
例えば `image/*` は、`image/` で始まる全ての MIME タイプ (`image/jpeg`, `image/png` など) を通します。
|
||||
MIME タイプ名は大文字と小文字を区別しません。
|
||||
デフォルト値は null であり、すべての MIME タイプが許可されることを意味します。
|
||||
MIME タイプの詳細については、[一般的なメディアタイプ](http://en.wikipedia.org/wiki/Internet_media_type#List_of_common_media_types) を参照してください。
|
||||
|
||||
@@ -84,6 +84,21 @@ Yii は数多くの優れた機能を提供していますので、サードパ
|
||||
最初のコマンドは [composer アセットプラグイン](https://github.com/francoispluchino/composer-asset-plugin/) をインストールします。
|
||||
これは、Composer によって bower と npm の依存パッケージを管理できるようにするものです。
|
||||
このことは、データベースなど、アセットに関係しない Yii の機能を使いたいだけの場合でも、Yii の Composer パッケージをインストールするために必要とされます。
|
||||
|
||||
[Yii のアセット発行の機能](structure-assets.md) を使いたい場合は、あなたの `composer.json` の `extra` セクションに次の構成も追加しなければなりません。
|
||||
|
||||
```json
|
||||
{
|
||||
...
|
||||
"extra": {
|
||||
"asset-installer-paths": {
|
||||
"npm-asset-library": "vendor/npm",
|
||||
"bower-asset-library": "vendor/bower"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Composer に関する更なる情報や、インストールの過程で出現しうる問題に対する解決方法については、一般的な [Composer によるインストール](start-installation.md#installing-via-composer) の節を参照してください。
|
||||
|
||||
そうでない場合は、Yii のリリースを [ダウンロード](http://www.yiiframework.com/download/) して、`BasePath/vendor` ディレクトリに解凍してください。
|
||||
|
||||
Reference in New Issue
Block a user