Shaklar bilan ishlash ================ Ushbu bo'limda biz foydalanuvchidan ma'lumotlarni qabul qilishni o'rganamiz. Sahifada ma'lumotlarni kiritish uchun ism va emailni kiritish uchun shakl bor. Sahifada kiritilgan ma'lumotlar tasdiqlanishi uchun ko'rsatiladi. Shu maqsadga erishish uchun biz bitta [amal](structure-controllers.md) va ikkta [ko'rinish](structure-views.md) yasashdan tashqari [model](structure-models.md) yaratasiz. Ushbu qo'lanmada siz quydagilarni o'rganasiz: * Qandey qilib foydalanuvchi tomonidan kiritilgan ma'lumotlar uchun [modelni](structure-models.md) yaratish mumkin; * Qandey qilib ma'lumotlarni tekshirish uchun mantiq yozishimiz mumkin; * Qandey qilib HTML-shaklni [ko'rinish](structure-views.md) ichida yaratishimiz mumkin. Model yaratilishi --------------------------------------------- Fayl `models/EntryForm.php`da `EntryForm` pastda ko'rsatilganidek klassini yarating. U foydalanuvchidan kelgan ma'lumotlar saqlash uchun ishlatiladi. Klasslarni nomlari haqida siz «[Klasslarni avtoyuklanishi](concept-autoloading.md)» bo'limida o'qishingiz mumkin. ```php ------------------------------------------------ Endi esa huddi pastda ko'rsatilganidek `site` nazoratchisi ichida `entry` amalini yarating. ```php load(Yii::$app->request->post()) && $model->validate()) { // $model ichidagi ma'lumotlar tekshirishdan muvaffaqiyatli o'tgan // endi esa biror $model bilan mantiq... return $this->render('entry-confirm', ['model' => $model]); } else { // Sahifaga kirilgan holatda yoki hato mavjud bo'ganida return $this->render('entry', ['model' => $model]); } } } ``` Amal `EntryForm` nusxasini yaratadi. Keyin esa u `$_POST` dan kelgan ma'lumotlar bilan modelni to'ldirayapti, u ma'lumotlar Yiida [[yii\web\Request::post()]] usulu orqali olinadi. Agar model muvaffaqiyatli to'ldirilsa, foydalanuvchi ma'lumotlarni shakldan foydalanib jonatib ma'lumotlar shu orqali kelganini nazarda tutayapmiz, keyin ma'lumotlar tekshirish uchun [[yii\base\Model::validate()|validate()]] usuli ishlatilayapti. Agar hammasi yaxshi o'tsa, amal `entry-confirm` ko'rinishini qaytaradi, u esa foydalanuvchi tomonidan kiritilgan ma'lumotlarini ko'rsatadi. Aks holda esa `entry` ko'rinishi qaytariladi, u esa HTML-shaklni va xatolarni chiqarib beradi, agar ular bor bo'lsa. > Info: `Yii::$app` yagona global xossasi Yiining nusxasini o'z ichiga oladi [ilova](structure-applications.md) (singleton). Bir vaqtni o'zida u [Service Locator](concept-service-locator.md) ham hisoblanadi, undan esa quydagi komponentlar bilan foydalanish mumkin `request`, `response`, `db` va boshqa. Yuqorida ko'rsatilgan kodda `$_POST` massivini qabul qilish uchun biz `request` komponentini ishlatdik. Ko'rinish yaratilishi ---------------------------------------------------- Yakunda biz `entry-confirm` va `entry` ko'rinishlarini yaratamiz, ular esa yuqorida yozilgan `entry` amali orqali ma'lum bir xolatlarda qaytariladi. Ko'rinish `entry-confirm` kiritilgan email va ismni ko'rsatadi. U `views/site/entry-confirm.php` fayli ichiga saqlangan bo'lishi kerak. ```php

Siz quydagi ma'lumotlarni kiritingiz:

``` Ko'rinish `entry` HTML-shaklni yasaydi. U quydagi faylga saqlangan bo'lishi kerak `views/site/entry.php`. ```php field($model, 'name') ?> field($model, 'email') ?>
'btn btn-primary']) ?>
``` HTML-shaklni yasash uchun juda mukammal [vidjet](structure-widgets.md) [[yii\widgets\ActiveForm|ActiveForm]] ishlatilmoqda. Quydagi usular `begin()` va `end()` shaklni ochilish va yopilish teglarini yasaydi. Bular orasida esa ma'lumotlar kiritilishi uchun kerak bo'lgan maydonlar [[yii\widgets\ActiveForm::field()|field()]] yaratilmoqda . Birinchi "name", ikkinchisi esa "email". Keyin esa shaklni ma'lumotlarni jonatish uchun tugma yasalishiga javob beradigan usul [[yii\helpers\Html::submitButton()]] chaqirilmoqda. Keling, sinab ko'raylik -------------------------------------- Ish jarayonida yaratilgan bor narsani ko'rish uchun, browserni ochib quydagi URLni kiritaylik: ``` http://hostname/index.php?r=site%2Fentry ``` Siz ikkta maydoni o'z ichiga olgan shaklni ko'rishingiz mumkin. Har bir maydon oldida esa yorlig' bor, u yorlig'lar, qanaqa ma'lumotlar kiritilishi kerak bo'lishi haqida ma'lumot saqlaydi. Agar siz ma'lumotlarni kiritmasdan jonatish tugasiga bosangiz yoki email noto'g'ri kiritsangiz, siz har bir maydon oldida hatolarni ko'rishingiz mumkin bo'ladi. ![Hatolar bilan shakl](images/start-form-validation.png) Ma'lumot kiritilib jonatilgandan so'ng esa, siz hozirgina kiritilgan ma'lumotlar sahifasini ko'rasiz. ![Kiritilgan tasdiqlangan ma'lumotlar](images/start-entry-confirmation.png) ### Bu qandey ishlayapti? Siz, bu HTML-shakl aslida qandey qilib ishlayotganini haqida savollar borligi bo'lishi mumkin. Butun jarayon ozgina murakkab ko'rinishi mumkin: maydonlar oldida yorlig'lar, ma'lumotlar noto'g'ri kiritilganda hatolar va bularni hammasi sahifa qayta yuklanmasdan ishlayotganiga ajablanishingiz mumkin. Ha albatta, ma'lumotlar tekshirishi aslida Javascript tarafida ham Serverda ham amalga oshirilmoqda. [[yii\widgets\ActiveForm]] judda yaxshi o'langan, siz `EntryForm`da kirigan qoidalarni olish uchun. Ularni Javascript kodga aylantirib va tekshirish jarayonida ishlatiladi. Agar browserda Javascript o'chsa tekshirish server tarafda ham `actionEntry()` usulida ko'rsatilganidek o'tmoqda. Bu esa foydalanuvchi tomonidan kiritilgan ma'lumotlar ishonchli ekanliginini ko'rishimiz mumkin. Moydonlar uchun yasalgan yorlig'lar xossalar nomlari assosida quydagi usul `field()` orqali yaratilmoqda. Misol uchun, yasalgan `Name` yorlig'i `name` xossasi uchun shaklangan. Siz yorlig'larni quydagicha o'zgartirishingiz mumkin: ```php field($model, 'name')->label('Sizning ismingiz') ?> field($model, 'email')->label('Sizning elektron qutingiz') ?> ``` > Info: Yiida juda ham ko'p vidjetlar bor, ular sizga tez va murakkab ko'rinishlarni yasashga yordam beradi. Vijetlarni yasash judda oson va sodda ekanligini keyin (oldinda) bilishingiz mumkin. Ko'rinishdagi narsalarni ko'p narsani vijetlarga chiqarsa bo'ladi, nimaga? keyinchalik ham boshqa joylarda ishlatish uchun, bu esa ishni soddalashtiradi. Xulosa ----------------------------- Bu bo'limda siz MVC-arxitekturasidagi xar bir qismini ishlatib ko'rdingiz.Siz foydalanuvchidan kelgan ma'lumotlarni qabul qilib tekshirish uchun, model klasslarini yaratishni o'rgandingiz. Shuningdek, siz foydalanuvchidan ma'lumotlarni qabul qilish va ularni ko'rsatishni o'rgandingiz. Aslida bu ish jarayonida ma'lum bir vaqtni talab qilishi mumkin. Yii esa juda mukammal vidjetlarni taqdim qiladi, ular esa sizga ish jarayonini tezlashtirishni yordam beradi. Keyingi bo'limda siz ma'lumotlar ombori bilan ishlashni o'rganasiz, bu esa juda ko'p ilovalarda talab qilinadi.