Skip to content

Merge branch 'master' into 2.2. #20093

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -21,7 +21,7 @@ jobs:
fail-fast: false
matrix:
os: [ubuntu-latest]
php: [8.1, 8.2]
php: [8.1, 8.2, 8.3]

steps:
- name: Generate french locale.
1 change: 1 addition & 0 deletions .github/workflows/ci-mssql.yml
Original file line number Diff line number Diff line change
@@ -25,6 +25,7 @@ jobs:
php:
- 8.1
- 8.2
- 8.3

mssql:
- server:2017-latest
1 change: 1 addition & 0 deletions .github/workflows/ci-mysql.yml
Original file line number Diff line number Diff line change
@@ -24,6 +24,7 @@ jobs:
php:
- 8.1
- 8.2
- 8.3

mysql:
- 5.7
1 change: 1 addition & 0 deletions .github/workflows/ci-pgsql.yml
Original file line number Diff line number Diff line change
@@ -24,6 +24,7 @@ jobs:
php:
- 8.1
- 8.2
- 8.3

pgsql:
- 10
1 change: 1 addition & 0 deletions .github/workflows/ci-sqlite.yml
Original file line number Diff line number Diff line change
@@ -25,6 +25,7 @@ jobs:
php:
- 8.1
- 8.2
- 8.3

steps:
- name: Checkout.
301 changes: 151 additions & 150 deletions composer.lock

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions docs/guide-ja/README.md
Original file line number Diff line number Diff line change
@@ -135,6 +135,7 @@ RESTful ウェブ・サービス

* [クイック・スタート](rest-quick-start.md)
* [リソース](rest-resources.md)
* [コレクションのフィルタリング](rest-filtering-collections.md)
* [コントローラ](rest-controllers.md)
* [ルーティング](rest-routing.md)
* [レスポンス形式の設定](rest-response-formatting.md)
2 changes: 1 addition & 1 deletion docs/guide-ja/caching-data.md
Original file line number Diff line number Diff line change
@@ -57,7 +57,7 @@ $data = $cache->getOrSet($key, function () use ($user_id) {

キャッシュ・コンポーネントは通常グローバルに設定しアクセスできるように
[アプリケーション・コンポーネント](structure-application-components.md) として登録されます。
以下のコードは、二台のキャッシュ・サーバを用いる [Memcached](https://memcached.org/) を使うように
以下のコードは、二台のキャッシュ・サーバを用いる [memcached](https://memcached.org/) を使うように
`cache` アプリケーション・コンポーネントを構成する方法を示すものです。

```php
5 changes: 5 additions & 0 deletions docs/guide-ja/caching-fragment.md
Original file line number Diff line number Diff line change
@@ -24,6 +24,11 @@ if ($this->beginCache($id)) {

[データ・キャッシュ](caching-data.md) と同様に、キャッシュされるコンテントを識別するためにユニークな `$id` が必要になります。

次のようにすると、フラグメント・キャッシュを削除することが出来ます。
```php
Yii::$app->cache->delete(['yii\widgets\FragmentCache', $id]);
```


## キャッシュのオプション <span id="caching-options"></span>

4 changes: 2 additions & 2 deletions docs/guide-ja/concept-behaviors.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
ビヘイビア
==========

ビヘイビアは [[yii\base\Behavior]] またその子クラスのインスタンスです。ビヘイビアは
[ミックスイン](https://ja.wikipedia.org/wiki/Mixin) としても知られ、既存の [[yii\base\Component|component]] クラスの
ビヘイビアは [[yii\base\Behavior]] またその子クラスのインスタンスです。
ビヘイビアは [ミックスイン](https://ja.wikipedia.org/wiki/Mixin) としても知られ、既存の [[yii\base\Component|component]] クラスの
機能を、クラスの継承を変更せずに拡張することができます。コンポーネントにビヘイビアをアタッチすると、その
コンポーネントにはビヘイビアのメソッドとプロパティが "注入" され、それらのメソッドとプロパティは、
コンポーネント・クラス自体に定義されているかのようにアクセスできるようになります。また、ビヘイビアは、
4 changes: 2 additions & 2 deletions docs/guide-ja/concept-configurations.md
Original file line number Diff line number Diff line change
@@ -103,7 +103,7 @@ $config = [
'class' => 'yii\caching\FileCache',
],
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'class' => 'yii\symfonymailer\Mailer',
],
'log' => [
'class' => 'yii\log\Dispatcher',
@@ -207,7 +207,7 @@ return [
'class' => 'yii\caching\FileCache',
],
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'class' => 'yii\symfonymailer\Mailer',
],
'log' => [
'class' => 'yii\log\Dispatcher',
2 changes: 1 addition & 1 deletion docs/guide-ja/concept-di-container.md
Original file line number Diff line number Diff line change
@@ -541,7 +541,7 @@ $reader = $container->get('app\storage\DocumentsReader');

依存注入と [サービス・ロケータ](concept-service-locator.md) はともに、疎結合でよりテストしやすい方法でのソフトウェア構築を可能にする、
定番のデザインパターンです。
依存注入とサービス・ロケータへのより深い理解を得るために、 [Martin の記事](https://martinfowler.com/articles/injection.html)
依存注入とサービス・ロケータをより深く理解するために、 [Martin の記事](https://martinfowler.com/articles/injection.html)
を読むことを強くお勧めします。

Yii はその [サービス・ロケータ](concept-service-locator.md) を、依存注入 (DI) コンテナの上に実装しています。
4 changes: 2 additions & 2 deletions docs/guide-ja/concept-properties.md
Original file line number Diff line number Diff line change
@@ -80,7 +80,7 @@ getter と setter で定義されたプロパティには、いくつかの特
* 通常の `property_exists()` の呼び出しでは、マジック・プロパティが存在するかどうかを知ることは出来ません。
それぞれ、[[yii\base\BaseObject::canGetProperty()|canGetProperty()]] または [[yii\base\BaseObject::canSetProperty()|canSetProperty()]] を呼び出さなければなりません。

このガイドの冒頭で説明した問題に戻ると、 `label` に値が代入されているあらゆる箇所で `trim()` を呼ぶのではなく、
もう `setLabel()` という setter の内部だけで `trim()` を呼べば済むのです
このガイドの冒頭で説明した問題に戻ると、`label` に値が代入されているあらゆる箇所で `trim()` を呼ぶのではなく、
`setLabel()` という setter の内部だけで `trim()` を呼べば済むようになります
さらに、新しい要求でラベルの先頭を大文字にする必要が発生しても、他のいっさいのコードに触れることなく、
すぐに `setLabel()` メソッドを変更することができます。一箇所の変更は、すべての `label` への代入に普遍的に作用します。
2 changes: 1 addition & 1 deletion docs/guide-ja/concept-service-locator.md
Original file line number Diff line number Diff line change
@@ -129,4 +129,4 @@ return [
モジュールからサービスを引き出そうとする全てのリクエストは、そのモジュールが要求に応じられない場合は、すべてその親に渡されます。

モジュール内のコンポーネントの構成情報は、親モジュール内のコンポーネントの構成情報とは決してマージされないことに注意して下さい。
サービス・ロケータ・パターンによって私たちは名前の付いたサービスを定義することが出来ますが、同じ名前のサービスが同じ構成パラメータを使用すると想定することは出来ません。
サービス・ロケータのパターンによって私たちは名前の付いたサービスを定義することが出来ますが、同じ名前のサービスが同じ構成パラメータを使用すると想定することは出来ません。
2 changes: 1 addition & 1 deletion docs/guide-ja/db-dao.md
Original file line number Diff line number Diff line change
@@ -680,5 +680,5 @@ $table = Yii::$app->db->getTableSchema('post');
```

このメソッドは、テーブルのカラム、プライマリ・キー、外部キーなどの情報を含む [[yii\db\TableSchema]] オブジェクトを返します。
これらの情報は、主として [クエリ・ビルダ](db-query-builder.md) や [アクティブ・レコード](db-active-record.md) によって利用されて、
この情報は、主として [クエリ・ビルダ](db-query-builder.md) や [アクティブ・レコード](db-active-record.md) によって利用されて、
特定のデータベースに依存しないコードを書くことを助けてくれています。
2 changes: 1 addition & 1 deletion docs/guide-ja/db-migrations.md
Original file line number Diff line number Diff line change
@@ -685,7 +685,7 @@ class m150101_185401_create_news_table extends Migration
`safeDown()` では、先に行を削除して、次にテーブルを削除しています。

> Note: 全ての DBMS がトランザクションをサポートしている訳ではありません。また、トランザクションに入れることが出来ない DB クエリもあります。
いくつかの例を [暗黙のコミット](https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html) で見ることが出来ます。
そのいくつかの例を [暗黙のコミット](https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html) で見ることが出来ます。
その場合には、代りに、`up()` と `down()` を実装しなければなりません。


2 changes: 1 addition & 1 deletion docs/guide-ja/db-query-builder.md
Original file line number Diff line number Diff line change
@@ -299,7 +299,7 @@ $query->where([$column => $value]);
値が自動的に一対のパーセント記号によって囲まれることに注意してください。

> Note: PostgreSQL を使っている場合は、`like` の代りに、大文字と小文字を区別しない比較のための
> [`ilike`](https://www.postgresql.org/docs/8.3/functions-matching.html#FUNCTIONS-LIKE) を使うことも出来ます。
> [`ilike`](https://www.postgresql.org/docs/8.3/static/functions-matching.html#FUNCTIONS-LIKE) を使うことも出来ます。

- `or like`: オペランド 2 が配列である場合に `LIKE` 述語が `OR` によって結合される以外は、
`like` 演算子と同じです。
31 changes: 22 additions & 9 deletions docs/guide-ja/input-tabular-input.md
Original file line number Diff line number Diff line change
@@ -43,12 +43,14 @@ class SettingsController extends Controller
{
$settings = Setting::find()->indexBy('id')->all();

if (Model::loadMultiple($settings, Yii::$app->request->post()) && Model::validateMultiple($settings)) {
if ($this->request->isPost) {
if (Setting::loadMultiple($settings, $this->request->post()) && Setting::validateMultiple($settings)) {
foreach ($settings as $setting) {
$setting->save(false);
}
return $this->redirect('index');
}
}

return $this->render('update', ['settings' => $settings]);
}
@@ -71,10 +73,12 @@ use yii\widgets\ActiveForm;

$form = ActiveForm::begin();

foreach ($settings as $index => $setting) {
echo $form->field($setting, "[$index]value")->label($setting->name);
foreach ($settings as $id => $setting) {
echo $form->field($setting, "[$id]value")->label($setting->name);
}

echo Html::submitButton('Save');

ActiveForm::end();
```

@@ -88,20 +92,29 @@ ActiveForm::end();
```php
public function actionCreate()
{
$count = count(Yii::$app->request->post('Setting', []));
$settings = [new Setting()];
for($i = 1; $i < $count; $i++) {
$settings[] = new Setting();
$settings = [];
if ($this->request->isPost) {
$count = count($this->request->post($setting->tableName())) - 1;
for ($i = 0; $i < $count; $i++) {
$settings[$i] = new Setting();
}
if (Setting::loadMultiple($settings, $this->request->post()) && Setting::validateMultiple($settings)) {
foreach ($settings as $setting) {
$setting->save(false);
}
return $this->redirect('index');
}
}
$settings[] = new Setting();

// ...
return $this->render('create', ['settings' => $settings]);
}
```

ここでは、デフォルトで一個のモデルを含む `$settings` 配列を初期値として作成し、少なくとも一個のテキスト・フィールドが常にビューに表示されるようにしています。
そして、受信したインプットの行数に合せて、配列にモデルを追加しています。

ビューでは javascript を使ってインプットの行を動的に追加することが出来ます。
ビューでは JavaScript を使ってインプットの行を動的に追加することが出来ます。

### 更新、作成、削除を一つのページに組み合わせる

2 changes: 1 addition & 1 deletion docs/guide-ja/input-validation.md
Original file line number Diff line number Diff line change
@@ -748,7 +748,7 @@ JS;

### Deferred 検証 <span id="deferred-validation"></span>

非同期のクライアント・サイドの検証をサポートする必要がある場合は、[Defered オブジェクト](https://api.jquery.com/category/deferred-object/) を作成することが出来ます。
非同期のクライアント・サイドの検証をサポートする必要がある場合は、[Deferred オブジェクト](https://api.jquery.com/category/deferred-object/) を作成することが出来ます。
例えば、AJAX によるカスタム検証を実行するために、次のコードを使うことが出来ます。

```php
2 changes: 1 addition & 1 deletion docs/guide-ja/intro-upgrade-from-v1.md
Original file line number Diff line number Diff line change
@@ -265,7 +265,7 @@ ActiveForm::end();
テーマは、ソースのビュー・ファイル・パスをテーマのビュー・ファイル・パスにマップするパス・マッピング機構に基づくものになりました。
例えば、あるテーマのパス・マップが `['/web/views' => '/web/themes/basic']` である場合、ビュー・ファイル `/web/views/site/index.php` のテーマ版は `/web/themes/basic/site/index.php` になります。
この理由により、テーマはどのようなビュー・ファイルに対してでも適用することが出来るようになりました。
コントローラやウィジェットのコンテキストの外で表示されるビューに対してすら、適用できます
コントローラやウィジェットのコンテキストの外で表示されるビューであっても適用できます

また、`CThemeManager` コンポーネントはもうありません。
その代りに、`theme` は `view` アプリケーション・コンポーネントの構成可能なプロパティになりました。
4 changes: 2 additions & 2 deletions docs/guide-ja/output-client-scripts.md
Original file line number Diff line number Diff line change
@@ -40,8 +40,8 @@ $this->registerJs(
- [[yii\web\View::POS_LOAD|View::POS_LOAD]] - [ドキュメントの `load` イベント](https://learn.jquery.com/using-jquery-core/document-ready/) でコードを実行するための指定。
上記と同じく、これを指定すると、[[yii\web\JqueryAsset|jQuery]] が自動的に登録されます。

最後の引数は、スクリプトのコード・ブロックを一意に特定するために使われるスクリプトのユニークな ID です。同じ ID のスクリプトが既にある場合は、新しいものを追加するのでなく、
それを置き換えます。ID を指定しない場合は、JS コードそれ自身が ID として扱われます。この ID によって、同じコードが複数回登録されるのを防止します。
最後の引数は、スクリプトのコード・ブロックを一意に特定するために使われるスクリプトのユニークな ID です。同じ ID のスクリプトが既にある場合は、新しいものを追加するのでなく、それを置き換えます。
ID を指定しない場合は、JS コードそれ自身が ID として扱われます。この ID によって、同じコードが複数回登録されるのを防止します。

### スクリプト・ファイルを登録する <span id="script-files"></span>

6 changes: 3 additions & 3 deletions docs/guide-ja/output-data-providers.md
Original file line number Diff line number Diff line change
@@ -354,13 +354,13 @@ $filter = new ActiveDataFilter([

$filterCondition = null;

// どのようなソースからでもフィルタをロードすることが出来ます。
// 例えば、リクエスト・ボディの JSON からロードしたい場合は、
// どのようなソースからでもフィルタをロードすることが出来ます。例えば、
// リクエスト・ボディの JSON からロードしたい場合は、
// 下記のように Yii::$app->request->getBodyParams() を使います。
if ($filter->load(\Yii::$app->request->get())) {
$filterCondition = $filter->build();
if ($filterCondition === false) {
// シリアライザがエラーを抽出するだろう
// シリアライザがフィルタの抽出でエラーを出すかもしれない
return $filter;
}
}
2 changes: 1 addition & 1 deletion docs/guide-ja/output-data-widgets.md
Original file line number Diff line number Diff line change
@@ -777,4 +777,4 @@ yii gii/crud --controllerClass="backend\\controllers\PostController" \
さらに読むべき文書
------------------

- Arno Slatius による [Rendering Data in Yii 2 with GridView and ListView](https://www.sitepoint.com/rendering-data-in-yii-2-with-gridview-and-listview/)
- Arno Slatius による [Rendering Data in Yii 2 with GridView and ListView](https://www.sitepoint.com/rendering-data-in-yii-2-with-gridview-and-listview/)
2 changes: 1 addition & 1 deletion docs/guide-ja/output-formatting.md
Original file line number Diff line number Diff line change
@@ -75,7 +75,7 @@ return [
- [[yii\i18n\Formatter::asDate()|date]] - 値は日付としてフォーマットされます。例えば `January 01, 2014`。
- [[yii\i18n\Formatter::asTime()|time]] - 値は時刻としてフォーマットされます。例えば `14:23`。
- [[yii\i18n\Formatter::asDatetime()|datetime]] - 値は日付および時刻としてフォーマットされます。例えば `January 01, 2014 14:23`。
- [[yii\i18n\Formatter::asTimestamp()|timestamp]] - 値は [unix タイムスタンプ](https://ja.wikipedia.org/wiki/UNIX%E6%99%82%E9%96%93) としてフォーマットされます。例えば `1412609982`
- [[yii\i18n\Formatter::asTimestamp()|timestamp]] - 値は [unix タイムスタンプ](https://ja.wikipedia.org/wiki/UNIX%E6%99%82%E9%96%93) としてフォーマットされます。例えば `1412609982`
- [[yii\i18n\Formatter::asRelativeTime()|relativeTime]] - 値は、その日時と現在との間隔として、人間に分かりやすい言葉でフォーマットされます。
例えば `1 hour ago`。
- [[yii\i18n\Formatter::asDuration()|duration]] - 値は継続時間として、人間に分かりやすい言葉でフォーマットされます。例えば `1 day, 2 minutes`。
2 changes: 1 addition & 1 deletion docs/guide-ja/output-sorting.md
Original file line number Diff line number Diff line change
@@ -65,7 +65,7 @@ $articles = Article::find()
ラベルは HTML エンコードされないことに注意してください。

> Info: [[yii\data\Sort::$orders|orders]] の値をデータベースのクエリに直接に供給して、
`ORDER BY` 句を構築することが出来ます。 データベースのクエリが認識できない合成的な属性が入っている場合があるため、
`ORDER BY` 句を構築することが出来ます。データベースのクエリが認識できない合成的な属性が入っている場合があるため、
[[yii\data\Sort::$attributeOrders|attributeOrders]] を使ってはいけません。

[[yii\data\Sort::link()]] を呼んでハイパーリンクを生成すれば、それをクリックして、指定した属性によるデータの並べ替えをリクエストすることが出来るようになります。
2 changes: 1 addition & 1 deletion docs/guide-ja/rest-authentication.md
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@

* [HTTP Basic 認証](https://ja.wikipedia.org/wiki/Basic%E8%AA%8D%E8%A8%BC): アクセス・トークンはユーザ名として送信されます。
この方法は、アクセス・トークンを API コンシューマ側で安全に保存することが出来る場合、
例えば API コンシューマがサーバ上で走るプログラムである場合などにのみ使用されるべきです
例えば API コンシューマがサーバ上で走るプログラムである場合などのみに使用されるべきです
* クエリ・パラメータ: アクセス・トークンは API の URL、例えば、`https://example.com/users?access-token=xxxxxxxx`
でクエリ・パラメータとして送信されます。
ほとんどのウェブ・サーバはクエリ・パラメータをサーバのログに記録するため、この手法は、
Loading