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
237bd24f
Commit
237bd24f
authored
Nov 28, 2014
by
Nobuo Kihara
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
docs/guide-ja/start-forms.md - revised [ci skip]
parent
2c698f13
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
29 additions
and
30 deletions
+29
-30
start-forms.md
docs/guide-ja/start-forms.md
+29
-30
No files found.
docs/guide-ja/start-forms.md
View file @
237bd24f
フォームを扱う
==============
この節では、ユーザからデータを取得するフォームを持つ新し
いペー
ジを作る方法を説明します。
この節では、ユーザからデータを取得するためのフォームを持
つ新しいペー
ジを作る方法を説明します。
このページは名前の入力フィールドとメールの入力フィールドを持つフォームを表示します。
ユーザからこれら二つの情報を受け取った後、ページは確認のために入力された値をエコ
ーバックします。
ユーザからこれら二つの情報を受け取った後、ページは入力された値を確認のためにエコ
ーバックします。
この目的を達するために、一つの
[
アクション
](
structure-controllers.md
)
と 二つの
[
ビュー
](
structure-views.md
)
を作成する以外に、
一つの
[
モデル
](
structure-models.md
)
をも作成します。
このチュートリアルを通じて、次のことをする方法を学び
ます:
このチュートリアルを通じて、次の方法を学びます。
*
フォームを通じてユーザが入力したデータ
を表す
[
モデル
](
structure-models.md
)
を作成する
*
入力されたデータを検証する規則を宣言する
*
[
ビュー
](
structure-views.md
)
の中で HTML フォームを構築する
*
フォームを通じてユーザによって入力され
るデータを表す
[
モデル
](
structure-models.md
)
を作成する方法
*
入力されたデータを検証する規則を宣言する方法
*
[
ビュー
](
structure-views.md
)
の中で HTML フォームを構築する方法
モデルを作成する<a name="creating-model"></a>
----------------
ユーザからの入
力を要求するデータは下に示されているように
`E
ntryForm`
モデルクラスとして表現され、
`models/EntryForm.php`
というファイルに保存されます。
ユーザに入力し
てもらうデータは、下に示されているように
`
EntryForm`
モデルクラスとして表現され、
`models/EntryForm.php`
というファイルに保存されます。
クラスファイルの命名規約についての詳細は
[
クラスのオートロード
](
concept-autoloading.md
)
の節を参照してください。
```
php
...
...
@@ -49,15 +49,15 @@ class EntryForm extends Model
> Info|情報: [[yii\base\Model]] はデータベーステーブルと関連*しない*モデルクラスの親として使われます。
データベーステーブルと対応するモデルクラスでは、通常は
[
[yii\db\ActiveRecord
]
] が親になります。
`EntryForm`
クラスは二つのパブリックメンバー、
`name`
と
`email`
を持っており、これらがユーザによって入力されたデータを保管するのに使われます。
`EntryForm`
クラスは二つのパブリックメンバー、
`name`
と
`email`
を持っており、これらがユーザによって入力されるデータを保管するのに使われます。
このクラスはまた
`rules()`
という名前のメソッドを持っています。このメソッドがデータを検証する一連の規則を返します。
上記で宣言されている検証規則は次のことを述べています:
上記で宣言されている検証規則は次のことを述べています。
*
`name`
と
`email`
は、ともに値を要求される
*
`email`
のデータは構文的に正当なメールアドレスでなければならない
`EntryForm`
オブジェクトにユーザが入力したデータを投入した後、
[
[yii\base
\Model::validate()|validate()
]
] を呼んでデータ検証ルーチンを始動することが出来ます。
データ検証が失敗すると
[
[yii\base\Model::hasErrors|hasErrors
]
] プロパティが true に設定され、
ユーザによって入力されたデータを
`EntryForm`
オブジェクトに投入した後、
[
[yii\base
\Model::validate()|validate()
]
] を呼んでデータ検証ルーチンを始動することが出来ます。
データ検証が失敗すると
[
[yii\base\Model::hasErrors|hasErrors
]
] プロパティが true に設定されます。
そして、
[
[yii\base\Model::getErrors|errors
]
] を通じて、どのような検証エラーが発生したかを知ることが出来ます。
...
...
@@ -99,32 +99,33 @@ class SiteController extends Controller
$model
=
new
EntryForm
;
if
(
$model
->
load
(
Yii
::
$app
->
request
->
post
())
&&
$model
->
validate
())
{
// $model に受
け取ったデータを検証する
// $model に有
効なデータを受け取った場合
// ここで $model について意味のあ
ることを何かする ...
// ここで $model について何か意味
のあることをする ...
return
$this
->
render
(
'entry-confirm'
,
[
'model'
=>
$model
]);
}
else
{
// ページの初期表示か、または、何か検証エラーがある
// ページの初期表示か、または、何か検証エラーがある場合
return
$this
->
render
(
'entry'
,
[
'model'
=>
$model
]);
}
}
}
```
アクションは最初に
`EntryForm`
オブジェクトを生成します。そして、次に、モデルに
`$_POST`
のデータ、
Yii においては
[
[yii\web\Request::post()
]
] によって
提供されるデータを投入しようと試みます。
モデルへのデータ投入が成功した場合(つまり、ユーザが HTML フォームを送信した場合)、アクションは
[
[yii\base\Model::validate()|validate()
]
]
を呼んで、入力された値が有効なものであることを確認します。
アクションは最初に
`EntryForm`
オブジェクトを生成します。そして、次に、モデルに
`$_POST`
のデータ、Yii においては
[
[yii\web\R
equest::post()
]
]
によって提供されるデータを投入しようと試みます。
モデルへのデータ投入が成功した場合(つまり、ユーザが HTML フォームを送信した場合)、アクションは
[
[yii\base\Model::valid
ate()|validate()
]
]
を呼んで、入力された値が有効なものであることを確認します。
> Info|情報: `Yii::$app` という式は [アプリケーション](structure-applications.md) インスタンスを表現します。
これはグローバルにアクセス可能なシングルトンです。これは、また、特定の機能性をサポートする
`request`
、
`response`
,
`db`
などのコンポーネントを提供する
[
サービスロケータ
](
concept-service-locator.md
)
でもあります。
上記のコードでは、アプリケーションインスタンスの
`request`
コンポーネントが
`$_POST`
データにアクセスするために使われています。
これはグローバルにアクセス可能なシングルトンです。
これは、また、特定の機能性をサポートする
`request`
、
`response`
、
`db`
などのコンポーネントを提供する
[
サービスロケータ
](
concept-service-locator.md
)
でもあります。
上記のコードでは、アプリケーションインスタンスの
`request`
コンポーネントが
`$_POST`
データにアクセスするために使われています。
すべてが適正である場合、アクションは
`entry-confirm`
という名前のビューを表示して、データの送信が成功したことをユーザに確認させます。
データが送信されなかったり、データがエラーを含んでいたりする場合は、
`entry`
ビューが表示され、その中で HTML フォームが
(もし有れば)検証
エラーのメッセージとともに表示されます。
(もし有れば) 検証エラ
ーのメッセージとともに表示されます。
> Note|注意: この簡単な例では、有効なデータ送信に対して単純に確認ページを表示しています。実際の仕事では、
[
フォーム送信の諸問題
](
http://en.wikipedia.org/wiki/Post/Redirect/Get
)
を避けるために、
...
...
@@ -143,7 +144,7 @@ Yii 縺ォ縺翫>縺ヲ縺ッ [[yii\web\Request::post()]] 縺ォ繧医▲縺ヲ謠蝉セ帙&繧後k繝
<?php
use
yii\helpers\Html
;
?>
<p>
あなたは次の情報を入力しました:
</p>
<p>
あなたは次の情報を入力しました
</p>
<ul>
<li><label>
名前
</label>
:
<?=
Html
::
encode
(
$model
->
name
)
?>
</li>
...
...
@@ -190,7 +191,7 @@ http://hostname/index.php?r=site/entry
二つの入力フィールドを持つフォームを表示するページが表示されるでしょう。
それぞれの入力フィールドの前には、どんなデータを入力すべきかを示すラベルがあります。
何も入力せずに、あるいは、無効なメールアドレスを入力して送信ボタンをクリックすると、
それぞれ問題のある入力フィールドの続きにエラーメッセ
ージが
表示されます。
それぞれ問題のある入力フィールドの後ろにエラーメッセ
ージが
表示されます。
![
検証エラーのあるフォーム
](
images/start-form-validation.png
)
...
...
@@ -201,13 +202,11 @@ http://hostname/index.php?r=site/entry
### 魔法の説明<a name="magic-explained"></a>
あなたは、舞台裏で HTML フォームがどのように動いているのか、不思議に思うかも知れません。なぜなら、
フォームが、ほとんど魔法のように、各入力フィールドのラベルを表示し、データを正しく入力しない場合には
ページをリロードすることなくエラーメッセージを表示するからです。
あなたは、舞台裏で HTML フォームがどのように動いているのか、不思議に思うかも知れません。
なぜなら、フォームが、ほとんど魔法のように、各入力フィールドのラベルを表示し、データを正しく入力しなかった場合には、ページをリロードすることなく、エラーメッセージを表示するからです。
そう、データの検証は、最初に JavaScript を使ってクライアントサイドで実行され、次に PHP によってサーバーサイドで実行されます。
[
[yii\widgets\ActiveForm
]
] は、賢いことに、
`EntryForm`
で宣言した検証規則を抽出し、それを実行可能な JavaScript コードに変換して、
JavaScript を使ってデータ検証を実行します。
[
[yii\widgets\ActiveForm
]
] は、賢いことに、
`EntryForm`
で宣言した検証規則を抽出し、それを実行可能な JavaScript コードに変換して、JavaScript を使ってデータ検証を実行します。
ブラウザで JavaScript を無効にした場合でも、
`actionEntry()`
メソッドで示されているように、サーバーサイドでの検証は実行されます。
これにより、どのような状況であっても、データの有効性が保証されます。
...
...
@@ -217,7 +216,7 @@ JavaScript 繧剃スソ縺」縺ヲ繝繧ソ讀懆ィシ繧貞ョ溯。後@縺セ縺吶
入力フィールドのラベルは、モデルのプロパティ名を使用して、
`field()`
メソッドによって生成されます。
例えば、
`name`
というプロパティから
`Name`
というラベルが生成されます。
ビューの中で、下記のコードのように、ラベルをカスタマイズすることも出来ます:
ビューの中で、下記のコードのように、ラベルをカスタマイズすることも出来ます。
```
php
<?=
$form
->
field
(
$model
,
'name'
)
->
label
(
'お名前'
)
?>
...
...
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