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
fcaabbc2
Commit
fcaabbc2
authored
Jan 30, 2015
by
Nobuo Kihara
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
docs/guide-ja/input updated [ci skip]
parent
179eea64
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
140 additions
and
1 deletion
+140
-1
README.md
docs/guide-ja/README.md
+2
-1
input-forms.md
docs/guide-ja/input-forms.md
+0
-0
input-multiple-models.md
docs/guide-ja/input-multiple-models.md
+27
-0
input-tabular-input.md
docs/guide-ja/input-tabular-input.md
+111
-0
No files found.
docs/guide-ja/README.md
View file @
fcaabbc2
...
...
@@ -90,7 +90,8 @@ All Rights Reserved.
*
[
フォームを作成する
](
input-forms.md
)
*
[
入力を検証する
](
input-validation.md
)
*
[
ファイルをアップロードする
](
input-file-upload.md
)
*
**未定**
[
複数モデルのデータ取得
](
input-multiple-models.md
)
*
[
表形式インプットのデータ収集
](
input-tabular-input.md
)
*
[
複数モデルのデータ取得
](
input-multiple-models.md
)
データの表示
...
...
docs/guide-ja/input-forms.md
View file @
fcaabbc2
This diff is collapsed.
Click to expand it.
docs/guide-ja/input-multiple-models.md
View file @
fcaabbc2
複数のモデルを扱う複雑なフォーム
================================
複雑なユーザインタフェイスにおいては、一つのフォームにユーザが入力したデータをデータベースの異なる複数のテーブルに保存しなければならないということが生じ得ます。
Yii のフォームの概念に従うと、単一モデルのフォームと比べても、ほとんど複雑さを加えることなく、そういうフォームを構築することが出来ます。
単一モデルの場合と同じように、サーバ側では次のような検証のスキーマに従います。
1.
モデルのクラスをインスタンス化する。
2.
モデルの属性に入力されたデータを投入する。
3.
全てのモデルを検証する。
4.
全てのモデルに対して検証が通った場合は、それらを保存する。
5.
検証が失敗した場合、または、データが送信されなかった場合は、全てのモデルのインスタンスをビューに渡してフォームを表示する。
次に、一つのフォームで複数のモデルを使用する例を示します ... (未定)
複数のモデルの例
----------------
> Note|注意: この節はまだ執筆中です。
>
> まだ内容がありません。
(未定)
依存するモデル
--------------
> Note|注意: この節はまだ執筆中です。
>
> まだ内容がありません。
(未定)
docs/guide-ja/input-tabular-input.md
0 → 100644
View file @
fcaabbc2
表形式インプットでデータを収集する
==================================
時として、一つのフォームで同じ種類の複数のモデルを扱わなければならないことがあります。
例えば、それぞれが「名前-値」の形で保存され、
`Setting`
[
アクティブレコード
](
db-active-record.md
)
モデルとして表される複数の設定項目を扱うフォームです。
この種のフォームは「表形式インプット」と呼ばれることもよくあります。
これとは対照的な、異なる種類のさまざまなモデルを扱うことについては、
[
複数のモデルを持つ複雑なフォーム
](
input-multiple-models.md
)
の節で扱います。
以下に、表形式インプットを Yii で実装する方法を示します。
カバーすべき三つの異なる状況があり、それぞれ少しずつ異なる処理をしなければなりません。
-
特定の数のデータベースレコードを更新する
-
不特定の数の新しいレコードを作成する
-
一つのページでレコードを更新、作成、および、削除する
前に説明した単一モデルのフォームとは対照的に、モデルの配列を扱うことになります。
この配列がビューに渡されて、各モデルのためのインプットフィールドが表のような形式で表示され、そして、複数のモデルを一度にロードしたり検証したりするために
[
[yii\base\Model
]
] のヘルパメソッドを使用します。
-
[
[yii\base\Model::loadMultiple()|Model::loadMultiple()
]
] - 送信されたデータをモデルの配列にロードします。
-
[
[yii\base\Model::validateMultiple()|Model::validateMultiple()
]
] - モデルの配列を検証します。
### 特定の数のレコードを更新する
コントローラのアクションから始めましょう。
```
php
<?php
namespace
app\controllers
;
use
Yii
;
use
yii\base\Model
;
use
yii\web\Controller
;
use
app\models\Setting
;
class
SettingsController
extends
Controller
{
// ...
public
function
actionUpdate
()
{
$settings
=
Setting
::
find
()
->
indexBy
(
'id'
)
->
all
();
if
(
Model
::
loadMultiple
(
$settings
,
Yii
::
$app
->
request
->
post
())
&&
Model
::
validateMultiple
(
$settings
))
{
foreach
(
$settings
as
$setting
)
{
$setting
->
save
(
false
);
}
return
$this
->
redirect
(
'index'
);
}
return
$this
->
render
(
'update'
,
[
'settings'
=>
$settings
]);
}
}
```
上記のコードでは、データベースからモデルを読み出すときに
[
[yii\db\ActiveQuery::indexBy()|indexBy()
]
] を使って、モデルのプライマリキーでインデックスされた配列にデータを投入しています。
このインデックスが、後で、フォームフィールドを特定するために使われます。
[
[yii\base\Model::loadMultiple()|Model::loadMultiple()
]
] が POST から来るフォームデータを複数のモデルに代入し、
[
[yii\base\Model::validateMultiple()|Model::validateMultiple()
]
] が全てのモデルを一度に検証します。
保存するときには、
`validateMultiple()`
を使ってモデルの検証を済ませていますので、
[
[yii\db\ActiveRecord::save()|save()
]
] のパラメータに
`false`
を渡して、二度目の検証を実行しないようにしています。
次に、
`update`
ビューにあるフォームです。
Now the form that's in
`update`
view:
```
php
<?php
use
yii\helpers\Html
;
use
yii\widgets\ActiveForm
;
$form
=
ActiveForm
::
begin
();
foreach
(
$settings
as
$index
=>
$setting
)
{
echo
$form
->
field
(
$setting
,
"[
$index
]value"
)
->
label
(
$setting
->
name
);
}
ActiveForm
::
end
();
```
ここで全ての設定項目について、それぞれ、項目名を示すラベルと、項目の値を入れたインプットをレンダリングしています。
インプットの名前に適切なインデックスを追加することが肝腎です。
というのは、
`loadMultiple`
がそれを見て、どのモデルにどの値を代入するかを決定するからです。
### 不特定の数の新しいレコードを作成する
新しいレコードを作成するのは、モデルのインスタンスを作成する部分を除いて、更新の場合と同じです。
```
php
public
function
actionCreate
()
{
$count
=
count
(
Yii
::
$app
->
request
->
post
(
'Setting'
,
[]));
$settings
=
[
new
Setting
()];
for
(
$i
=
1
;
$i
<
$count
;
$i
++
)
{
$settings
[]
=
new
Setting
();
}
// ...
}
```
ここでは、デフォルトで一個のモデルを含む
`$settings`
配列を初期値として作成し、少なくとも一個のテキストフィールドが常にビューに表示されるようにしています。
そして、受信したインプットの行数に合せて、配列にモデルを追加しています。
ビューでは javascript を使ってインプットの行を動的に追加することが出来ます。
### 更新、作成、削除を一つのページに組み合わせる
> Note|注意: この節はまだ執筆中です。
>
> まだ内容がありません。
(未定)
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