diff --git a/docs/guide-ja/README.md b/docs/guide-ja/README.md index cefcae1acf..de81fc920c 100644 --- a/docs/guide-ja/README.md +++ b/docs/guide-ja/README.md @@ -87,9 +87,9 @@ All Rights Reserved. ユーザからのデータ取得 ---------------------- -* **翻訳未着手** [フォームを作成する](input-forms.md) -* **翻訳未着手** [入力を検証する](input-validation.md) -* **翻訳未着手** [ファイルをアップロードする](input-file-upload.md) +* [フォームを作成する](input-forms.md) +* **翻訳中** [入力を検証する](input-validation.md) +* **翻訳中** [ファイルをアップロードする](input-file-upload.md) * **TBD** [複数モデルのためのデータ取得](input-multiple-models.md) diff --git a/docs/guide-ja/input-forms.md b/docs/guide-ja/input-forms.md new file mode 100644 index 0000000000..486fa37c8d --- /dev/null +++ b/docs/guide-ja/input-forms.md @@ -0,0 +1,191 @@ +フォームを扱う +============== + +> Note|注意: この節はまだ執筆中です。 + +Yii においてフォームを使用する主たる方法は [[yii\widgets\ActiveForm]] によるものです。 +フォームがモデルに基づくものである場合はこの方法を優先すべきです。 +これに加えて、[[yii\helpers\Html]] にはいくつかの有用なメソッドがあり、通常は、あらゆるフォームにボタンやヘルプテキストを追加するのに使うことが出来ます。 + +モデルに基づくフォームを作成する場合、最初のステップは、モデルそのものを定義することです。 +モデルは、アクティブレコードクラス、あるいは、もっと汎用的な Model クラスから派生させることが出来ます。 +このログインフォームの例では、汎用的なモデルを使用します。 + +```php +use yii\base\Model; + +class LoginForm extends Model +{ + public $username; + public $password; + + /** + * @return array 検証規則 + */ + public function rules() + { + return [ + // username と password はともに必須 + [['username', 'password'], 'required'], + // password は validatePassword() によって検証される + ['password', 'validatePassword'], + ]; + } + + /** + * パスワードを検証する + * このメソッドがパスワードのインライン検証に使用される + */ + public function validatePassword() + { + $user = User::findByUsername($this->username); + if (!$user || !$user->validatePassword($this->password)) { + $this->addError('password', 'Incorrect username or password.'); + } + } + + /** + * 提供された username と password でユーザをログインさせる。 + * @return boolean ユーザのログインが成功したかどうか + */ + public function login() + { + if ($this->validate()) { + $user = User::findByUsername($this->username); + return true; + } else { + return false; + } + } +} +``` + +コントローラはこのモデルのインスタンスをビューに渡し、ビューでは [[yii\widgets\ActiveForm|ActiveForm]] ウィジェットが使われます。 + +```php +use yii\helpers\Html; +use yii\widgets\ActiveForm; + + 'login-form', + 'options' => ['class' => 'form-horizontal'], +]) ?> + = $form->field($model, 'username') ?> + = $form->field($model, 'password')->passwordInput() ?> + +