|
|
|
@ -11,7 +11,7 @@
|
|
|
|
|
|
|
|
|
|
* Как создать [модель](structure-models.md) для данных, введённых пользователем; |
|
|
|
|
* Как объявить правила проверки введённых данных; |
|
|
|
|
* Как создать HTML форму в [представлении](structure-views.md). |
|
|
|
|
* Как создать HTML-форму в [представлении](structure-views.md). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Создание модели <span id="creating-model"></span> |
|
|
|
@ -96,10 +96,10 @@ class SiteController extends Controller
|
|
|
|
|
|
|
|
|
|
Действие создает объект `EntryForm`. Затем оно пытается заполнить модель данными из массива `$_POST`, доступ |
|
|
|
|
к которому обеспечивает Yii при помощи [[yii\web\Request::post()]]. Если модель успешно заполнена, то есть пользователь |
|
|
|
|
отправил данные из HTML формы, то для проверки данных будет вызван метод [[yii\base\Model::validate()|validate()]]. |
|
|
|
|
отправил данные из HTML-формы, то для проверки данных будет вызван метод [[yii\base\Model::validate()|validate()]]. |
|
|
|
|
|
|
|
|
|
Если всё в порядке, действие отобразит представление `entry-confirm`, которое показывает пользователю введенные им данные. |
|
|
|
|
В противном случае будет отображено представление `entry`, которое содержит HTML форму и ошибки проверки данных, если |
|
|
|
|
В противном случае будет отображено представление `entry`, которое содержит HTML-форму и ошибки проверки данных, если |
|
|
|
|
они есть. |
|
|
|
|
|
|
|
|
|
> Info: `Yii::$app` представляет собой глобально доступный экземпляр-одиночку |
|
|
|
@ -111,7 +111,7 @@ class SiteController extends Controller
|
|
|
|
|
Создание представления <span id="creating-views"></span> |
|
|
|
|
---------------------------------------------------- |
|
|
|
|
|
|
|
|
|
В заключение, создаём два представления с именами `entry-confirm` и `entry`, которые отображаются действием `entry` из |
|
|
|
|
В заключение создаём два представления с именами `entry-confirm` и `entry`, которые отображаются действием `entry` из |
|
|
|
|
предыдущего подраздела. |
|
|
|
|
|
|
|
|
|
Представление `entry-confirm` просто отображает имя и email. Оно должно быть сохранено в файле `views/site/entry-confirm.php`. |
|
|
|
@ -128,7 +128,7 @@ use yii\helpers\Html;
|
|
|
|
|
</ul> |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
Представление `entry` отображает HTML форму. Оно должно быть сохранено в файле `views/site/entry.php`. |
|
|
|
|
Представление `entry` отображает HTML-форму. Оно должно быть сохранено в файле `views/site/entry.php`. |
|
|
|
|
|
|
|
|
|
```php |
|
|
|
|
<?php |
|
|
|
@ -148,7 +148,7 @@ use yii\widgets\ActiveForm;
|
|
|
|
|
<?php ActiveForm::end(); ?> |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
Для построения HTML формы представление использует мощный [виджет](structure-widgets.md) [[yii\widgets\ActiveForm|ActiveForm]]. |
|
|
|
|
Для построения HTML-формы представление использует мощный [виджет](structure-widgets.md) [[yii\widgets\ActiveForm|ActiveForm]]. |
|
|
|
|
Методы `begin()` и `end()` выводят открывающий и закрывающий теги формы. Между этими вызовами создаются поля ввода при |
|
|
|
|
помощи метода [[yii\widgets\ActiveForm::field()|field()]]. Первым идёт поле для "name", вторым — для "email". |
|
|
|
|
Далее для генерации кнопки отправки данных вызывается метод [[yii\helpers\Html::submitButton()]]. |
|
|
|
@ -177,11 +177,11 @@ http://hostname/index.php?r=site%2Fentry
|
|
|
|
|
|
|
|
|
|
### Как работает вся эта «магия» <span id="magic-explained"></span> |
|
|
|
|
|
|
|
|
|
Вы, скорее всего, задаётесь вопросом о том, как же эта HTML форма работает на самом деле. Весь процесс может показаться |
|
|
|
|
немного волшебным: то как показываются подписи к полям, ошибки проверки данных при некорректном вводе и то что всё это |
|
|
|
|
Вы, скорее всего, задаётесь вопросом о том, как же эта HTML-форма работает на самом деле. Весь процесс может показаться |
|
|
|
|
немного волшебным: то как показываются подписи к полям, ошибки проверки данных при некорректном вводе и то, что всё это |
|
|
|
|
происходит без перезагрузки страницы. |
|
|
|
|
|
|
|
|
|
Да, проверка данных на самом деле происходит и на стороне клиента при помощи JavaScript и на стороне сервера. |
|
|
|
|
Да, проверка данных на самом деле происходит и на стороне клиента при помощи JavaScript, и на стороне сервера. |
|
|
|
|
[[yii\widgets\ActiveForm]] достаточно продуман, чтобы взять правила проверки, которые вы объявили в `EntryForm`, |
|
|
|
|
преобразовать их в JavaScript код и использовать его для проведения проверок. На случай отключения JavaScript в браузере |
|
|
|
|
валидация проводится и на стороне сервера как показано в методе `actionEntry()`. Это даёт уверенность в том, что данные |
|
|
|
|