Commit a0724a83 by RichWeber

Grammar fix

parent b57eb8e1
Робота з формами Робота з формами
================ ================
В даному розділі ми обговоримо отримання даних від користувачів. На сторінці буде розміщена форма з полями де можна буде вказати ім’я та email. Отримані дані будуть зображені на сторінці для їх підтвердження. В даному розділі ми обговоримо отримання даних від користувачів. На сторінці буде розміщена форма з полями, де можна буде вказати ім’я та email. Отримані дані будуть зображені на сторінці для їх підтвердження.
Для того, щоб досягти дану ціль, окрім створення [події](structure-controllers.md) і двох [представлень](structure-views.md) Для того, щоб досягти дану ціль, крім створення [події](structure-controllers.md) і двох [представлень](structure-views.md)
ви створите [модель](structure-models.md). ви створите [модель](structure-models.md).
В даному керівництві ви вивчите: В даному керівництві ви дізнаєтесь:
* Як створити [модель](structure-models.md) для даних, вказаних користувачем; * Як створити [модель](structure-models.md) для даних, вказаних користувачем;
* Як оголосити правила провірки переданних даних; * Як оголосити правила перевірки переданих даних;
* Як створити HTML форму в [представлені](structure-views.md). * Як створити HTML форму в [представлені](structure-views.md).
Створення моделі <a name="creating-model"></a> Створення моделі <a name="creating-model"></a>
--------------------------------------------- ---------------------------------------------
У файлі `models/EntryForm.php` створіть клас моделі `EntryForm` як показано нижче. Він буде використовуватись для зберігання даних, вказаних користувачем. Детальніше про присвоєння імен для файлів класів читайте в розділі У файлі `models/EntryForm.php` створіть клас моделі `EntryForm` як показано нижче. Він буде використовуватись для зберігання даних, вказаних користувачем. Детальніше про присвоєння імен файлам класів читайте в розділі
«[Автозавантаження класів](concept-autoloading.md)». «[Автозавантаження класів](concept-autoloading.md)».
```php ```php
...@@ -41,7 +41,7 @@ class EntryForm extends Model ...@@ -41,7 +41,7 @@ class EntryForm extends Model
} }
``` ```
Даний класс розширює класс [[yii\base\Model]], який є складовою частиною фреймворка і зазвичай використовується для роботи з даними форм. Даний клас розширює клас [[yii\base\Model]], який є складовою частиною фреймворка і зазвичай використовується для роботи з даними форм.
Клас містить 2 публічні властивості `name` і `email`, які використовуються для зберігання даних, вказаних користувачем. Клас містить 2 публічні властивості `name` і `email`, які використовуються для зберігання даних, вказаних користувачем.
Він також містить метод `rules()`, який повертає набір правил поведінки даних. Правила, оголошені в коді вище означають наступне: Він також містить метод `rules()`, який повертає набір правил поведінки даних. Правила, оголошені в коді вище означають наступне:
...@@ -49,8 +49,8 @@ class EntryForm extends Model ...@@ -49,8 +49,8 @@ class EntryForm extends Model
* Поля `name` і `email` обов’язкові для заповнення; * Поля `name` і `email` обов’язкові для заповнення;
* Поле `email` повино містити правильну адресу email. * Поле `email` повино містити правильну адресу email.
Якщо об’єкт `EntryForm` заповнений даними користувача, то для їх провірки ви можете визвати метод Якщо об’єкт `EntryForm` заповнений даними користувача, то для їх перевірки ви можете викликати метод
[[yii\base\Model::validate()|validate()]]. У випадку невдалої провірки властивість [[yii\base\Model::hasErrors|hasErrors]] [[yii\base\Model::validate()|validate()]]. У випадку невдалої перевірки властивість [[yii\base\Model::hasErrors|hasErrors]]
дорівнюватиме `true`. За допомогою [[yii\base\Model::getErrors|errors]] можна дізнатись, які саме виникли помилки. дорівнюватиме `true`. За допомогою [[yii\base\Model::getErrors|errors]] можна дізнатись, які саме виникли помилки.
...@@ -90,13 +90,13 @@ class SiteController extends Controller ...@@ -90,13 +90,13 @@ class SiteController extends Controller
} }
``` ```
Подія створює об’єкт `EntryForm`. Потім вона намагається заповнити модель даними іх масива `$_POST`, доступ Подія створює об’єкт `EntryForm`. Потім вона намагається заповнити модель даними із масива `$_POST`, доступ
до якого забеспечує Yii з допомогою [[yii\web\Request::post()]]. Якщо модель успішно заповнена, тобто користувач відправив дані з HTML форми, то для перевірки даних буде викликаний метод [[yii\base\Model::validate()|validate()]]. до якого забеспечує Yii за допомогою [[yii\web\Request::post()]]. Якщо модель успішно заповнена, тобто користувач відправив дані з HTML форми, то для перевірки даних буде викликаний метод [[yii\base\Model::validate()|validate()]].
Якщо все гаразд, подія зобразить представлення `entry-confirm`, яке покаже користувачу вказані ним дані. Якщо все гаразд, подія зобразить представлення `entry-confirm`, яке покаже користувачу вказані ним дані.
В іншому випадку буде зображено представлення `entry`, яке містить HTML форму і помилки перевірки даних, якщо вони є. В іншому випадку буде зображено представлення `entry`, яке містить HTML форму і помилки перевірки даних, якщо вони є.
> Інформація: `Yii::$app` являє собою глобально доступний екземпляр-одиночку > Інформація: `Yii::$app` являє собою глобально доступний екземпляр-одинак
[додатка](structure-applications.md) (singleton). Одночасно це [Service Locator](concept-service-locator.md), [додатка](structure-applications.md) (singleton). Одночасно це [Service Locator](concept-service-locator.md),
який надає доступ до компонентів типу `request`, `response`, `db` і так далі. В коді выще для доступу до даних з `$_POST` який надає доступ до компонентів типу `request`, `response`, `db` і так далі. В коді выще для доступу до даних з `$_POST`
був використаний компонент `request`. був використаний компонент `request`.
...@@ -107,7 +107,7 @@ class SiteController extends Controller ...@@ -107,7 +107,7 @@ class SiteController extends Controller
В завершення, створюємо два представлення з іменами `entry-confirm` і `entry`, котрі зображаються подією `entry` з минулого підрозділа. В завершення, створюємо два представлення з іменами `entry-confirm` і `entry`, котрі зображаються подією `entry` з минулого підрозділа.
Представлення `entry-confirm` просто зображає ім’я та email. Воно мусить бути збереженим в файлі `views/site/entry-confirm.php`. Представлення `entry-confirm` просто зображає ім’я та email. Воно мусить бути збережене у файлі `views/site/entry-confirm.php`.
```php ```php
<?php <?php
...@@ -121,7 +121,7 @@ use yii\helpers\Html; ...@@ -121,7 +121,7 @@ use yii\helpers\Html;
</ul> </ul>
``` ```
Представлення `entry` відображає HTML форму. Воно мусить бути збереженим в файлі `views/site/entry.php`. Представлення `entry` відображає HTML форму. Воно мусить бути збережене у файлі `views/site/entry.php`.
```php ```php
<?php <?php
...@@ -142,14 +142,14 @@ use yii\widgets\ActiveForm; ...@@ -142,14 +142,14 @@ use yii\widgets\ActiveForm;
``` ```
Для побудови 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". Методи `begin()` і `end()` виводять відкриваючий і закриваючий теги форми. Між цими викликами створюються поля для заповнення за допомогою метода [[yii\widgets\ActiveForm::field()|field()]]. Першим іде поле для "name", другим — для "email".
Далі для генерації кнопки відправлення даних викликається метод [[yii\helpers\Html::submitButton()]]. Далі для генерації кнопки відправлення даних викликається метод [[yii\helpers\Html::submitButton()]].
Спробуєм <a name="trying-it-out"></a> Спробуєм <a name="trying-it-out"></a>
-------------------------------------- --------------------------------------
Щоб побачити все, що було створено в роботі, відкрийте в браузері наступний URL: Щоб побачити все, що було створено під час роботи, відкрийте в браузері наступний URL:
``` ```
http://hostname/index.php?r=site/entry http://hostname/index.php?r=site/entry
...@@ -169,7 +169,7 @@ http://hostname/index.php?r=site/entry ...@@ -169,7 +169,7 @@ http://hostname/index.php?r=site/entry
### Як працює вся ця «магія» <a name="magic-explained"></a> ### Як працює вся ця «магія» <a name="magic-explained"></a>
Ви, більш за все, ставите питанням про те, як все ж ця HTML форма працює насправді і яким чином. Весь процес може здатися трохи магічним: те як зображається підписи до полів, помилки перевірки даних при некорректному заповненні і те що все це відбувається без перезавантаження сторінки. Ви, більш за все, ставите питанням про те, як все ж ця HTML форма працює насправді і яким чином. Весь процес може здатися трохи магічним: те як зображаються підписи до полів, помилки перевірки даних при некоректному заповненні і те що все це відбувається без перезавантаження сторінки.
Так, провірка даних дійсно проходить на стороні клієнта за допомогою JavaScript і на стороні сервера. Так, провірка даних дійсно проходить на стороні клієнта за допомогою JavaScript і на стороні сервера.
[[yii\widgets\ActiveForm]] достатньо продуманий, щоб взяти правила перевірки, які ви оголосили в `EntryForm`, [[yii\widgets\ActiveForm]] достатньо продуманий, щоб взяти правила перевірки, які ви оголосили в `EntryForm`,
...@@ -191,7 +191,7 @@ http://hostname/index.php?r=site/entry ...@@ -191,7 +191,7 @@ http://hostname/index.php?r=site/entry
В даному розділі ви випробували кожну частину шаблона проектування MVC. Ви дізналися як створювати класи моделей для опрацювання і перевірки даних вказаних користувачем. В даному розділі ви випробували кожну частину шаблона проектування MVC. Ви дізналися як створювати класи моделей для опрацювання і перевірки даних вказаних користувачем.
Також, ви дізналися як отримати дані від користувача і як їх відобразити тому ж користувачу. Ця задача може зайти багато часу в процесі розробки. Yii надає потужні віджети, які роблять задачу максимально простою. Також, ви дізналися як отримати дані від користувача і як їх відобразити тому ж користувачу. Ця задача може займати багато часу в процесі розробки. Yii надає потужні віджети, які роблять задачу максимально простою.
В наступному розділі ви дізнаєтесь як працювати з базами даних, що необхідно в більшості додатків. В наступному розділі ви дізнаєтесь як працювати з базами даних, що необхідно в більшості додатків.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment