From b57eb8e16ebe6e376c6eced259e1a7ea91a4ad73 Mon Sep 17 00:00:00 2001 From: RichWeber Date: Wed, 30 Jul 2014 17:35:49 +0300 Subject: [PATCH] add page start-forms.md --- docs/guide-uk/start-forms.md | 197 ++++++++++++++++++++++++++++ docs/internals/translation-teams.md | 3 +- 2 files changed, 199 insertions(+), 1 deletion(-) create mode 100644 docs/guide-uk/start-forms.md diff --git a/docs/guide-uk/start-forms.md b/docs/guide-uk/start-forms.md new file mode 100644 index 0000000000..194c55f5ee --- /dev/null +++ b/docs/guide-uk/start-forms.md @@ -0,0 +1,197 @@ +Робота з формами +================ + +В даному розділі ми обговоримо отримання даних від користувачів. На сторінці буде розміщена форма з полями де можна буде вказати ім’я та email. Отримані дані будуть зображені на сторінці для їх підтвердження. + +Для того, щоб досягти дану ціль, окрім створення [події](structure-controllers.md) і двох [представлень](structure-views.md) +ви створите [модель](structure-models.md). + +В даному керівництві ви вивчите: + +* Як створити [модель](structure-models.md) для даних, вказаних користувачем; +* Як оголосити правила провірки переданних даних; +* Як створити HTML форму в [представлені](structure-views.md). + + +Створення моделі +--------------------------------------------- + +У файлі `models/EntryForm.php` створіть клас моделі `EntryForm` як показано нижче. Він буде використовуватись для зберігання даних, вказаних користувачем. Детальніше про присвоєння імен для файлів класів читайте в розділі +«[Автозавантаження класів](concept-autoloading.md)». + +```php + +------------------------------------------------ + +Далі створіть подію `entry` в контролері `site`, точно так, як ви робили це раніше. + +```php +load(Yii::$app->request->post()) && $model->validate()) { + // дані в $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()]]. + +Якщо все гаразд, подія зобразить представлення `entry-confirm`, яке покаже користувачу вказані ним дані. +В іншому випадку буде зображено представлення `entry`, яке містить HTML форму і помилки перевірки даних, якщо вони є. + +> Інформація: `Yii::$app` являє собою глобально доступний екземпляр-одиночку +[додатка](structure-applications.md) (singleton). Одночасно це [Service Locator](concept-service-locator.md), +який надає доступ до компонентів типу `request`, `response`, `db` і так далі. В коді выще для доступу до даних з `$_POST` +був використаний компонент `request`. + + +Створення представлення +---------------------------------------------------- + +В завершення, створюємо два представлення з іменами `entry-confirm` і `entry`, котрі зображаються подією `entry` з минулого підрозділа. + +Представлення `entry-confirm` просто зображає ім’я та email. Воно мусить бути збереженим в файлі `views/site/entry-confirm.php`. + +```php + +

Ви вказали наступну інформацію:

+ + +``` + +Представлення `entry` відображає HTML форму. Воно мусить бути збереженим в файлі `views/site/entry.php`. + +```php + + + + field($model, 'name') ?> + + field($model, 'email') ?> + +
+ 'btn btn-primary']) ?> +
+ + +``` + +Для побудови HTML форми представлення використовує потужний [віджет](structure-widgets.md) [[yii\widgets\ActiveForm|ActiveForm]]. +Методи `begin()` і `end()` виводять відкриваючий і закриваючий теги форми. Між цими викликами створюються поля заповнення за допомогою метода [[yii\widgets\ActiveForm::field()|field()]]. Першим іде поле для "name", другим — для "email". +Далі для генерації кнопки відправлення даних викликається метод [[yii\helpers\Html::submitButton()]]. + + +Спробуєм +-------------------------------------- + +Щоб побачити все, що було створено в роботі, відкрийте в браузері наступний URL: + +``` +http://hostname/index.php?r=site/entry +``` + +Ви побачите сторінку з формою і двома полями для заповнення. Перед кожним полем є надпис, який вказує, яку саме +інформацію слід вказувати. Якщо ви натиснете на кнопку відправлення даних без самих даних або якщо вкажете email в невірному +форматі, то ви побачите повідомлення з помилкою біля кожного проблемного поля. + +![Форма з помилками](../guide/images/start-form-validation.png) + +Після введення вірних даних і їх відправки, ви побачите сторінку з даними, які щойно вказали. + +![Підтвердження введених даних](../guide/images/start-entry-confirmation.png) + + + +### Як працює вся ця «магія» + +Ви, більш за все, ставите питанням про те, як все ж ця HTML форма працює насправді і яким чином. Весь процес може здатися трохи магічним: те як зображається підписи до полів, помилки перевірки даних при некорректному заповненні і те що все це відбувається без перезавантаження сторінки. + +Так, провірка даних дійсно проходить на стороні клієнта за допомогою JavaScript і на стороні сервера. +[[yii\widgets\ActiveForm]] достатньо продуманий, щоб взяти правила перевірки, які ви оголосили в `EntryForm`, +перетворити їх в JavaScript код і використовувати його для проведення перевірки. На випадок, якщо в браузері буде вимкнено JavaScript валідація проходить і на стороні сервера, як показано в методі `actionEntry()`. Це дає впевненість в тому, що дані коректні за любих обставин. + +Підписи для полів генеруються методом `field()`, на основі імен властивостей моделі. Наприклад, підпис `Name` генерується +для властивості `name`. Ви можете модифікувати підписи наступним чином: + +```php +field($model, 'name')->label('Ваше ім’я') ?> +field($model, 'email')->label('Ваш Email') ?> +``` + +> Інформація: У Yii є велика кількість віджетів, які дозволяють швидко будувати складні і динамічні представлення. + Як ви дізнаєтесь пізніше, розробляти нові віджети доволі просто. Багато із представленнь можна винести у віджети, щоб використовувати це повторно в інших частинах і тим самим спростити розробку в майбутньому. + +Резюме +----------------------------- + +В даному розділі ви випробували кожну частину шаблона проектування MVC. Ви дізналися як створювати класи моделей для опрацювання і перевірки даних вказаних користувачем. + +Також, ви дізналися як отримати дані від користувача і як їх відобразити тому ж користувачу. Ця задача може зайти багато часу в процесі розробки. Yii надає потужні віджети, які роблять задачу максимально простою. + +В наступному розділі ви дізнаєтесь як працювати з базами даних, що необхідно в більшості додатків. + diff --git a/docs/internals/translation-teams.md b/docs/internals/translation-teams.md index 267f46a926..d19abf2bdf 100644 --- a/docs/internals/translation-teams.md +++ b/docs/internals/translation-teams.md @@ -34,4 +34,5 @@ Spanish Ukrainian --------- -- Alexandr Bordun [@borales](https://github.com/Borales), admin@yiiframework.com.ua \ No newline at end of file +- Alexandr Bordun [@borales](https://github.com/Borales), admin@yiiframework.com.ua +- Roman Bahatyi [@RichWeber](https://github.com/RichWeber), rbagatyi@gmail.com \ No newline at end of file