PHP boshqaruvchisi (Xulq-atvori)
PHP kontrollerlari biz index.php orqali yuborgan foydalanuvchi so'rovlarini qabul
qilishadi va ularga muvofiq modelni moslashtirishadi. Php dasturlari boshqariladi deb
aytish yanada to'g'ri.
PHP yuborish
Ko'rinish modeldagi o'zgarishlarni kuzatadi va dasturning php interfeysini yaratadi
yoki o'zgartiradi.
Ma'lumotlar ro'yxati
ismingiz?\u003e
familiyasi?\u003e
Bu qanday ishlaydiPhpMVC shablonimi?
Foydalanuvchi kerakli url-ga kirganda, ko'rinishi va modeliga tegishli mos keladigan
kontrolör tanlanadi va ma'lumotlar ko'rsatiladi. Boshqacha aytganda, mvc-dagi
boshqaruvchi - bu model va ko'rinish o'rtasidagi bog'liqlik.
PHP dasturini yaratishda MVC shablonining afzalliklari
Yuqorida aytib o'tilganidek, bu birinchi navbatda php sayt yaratuvchilarini bo'limlarga
ajratishdir. Shuningdek, agar katta loyiha yaratilsa, php dasturining tezligi oshadi. Php
dasturchisining o'zi haqida gap ketganda, bu php kodini to'g'ri tuzishdir (hamma
narsani o'z joyida tushunish osonroq).
Ko'pchilik bitta vazifa bilan ishlash uchun loyihani yozishni boshlaydi, bu ko'p
foydalanuvchilarni boshqarish tizimiga aylanishi mumkinligini anglatmaydi, aytaylik,
tarkib yoki Xudo taqiqlagan, ishlab chiqarish. Va hamma narsa ajoyib va
\u200b\u200bsalqin bo'lib ko'rinadi, yozilgan kod butunlay baliqlar va qattiq kodlardan
iborat ekanligini tushunishni boshlamaguningizcha hamma narsa ishlaydi. Kod, ba'zida
hatto o'qib bo'lmaydigan tartib, so'rovlar va baliqlar bilan aralashtirilgan. Favqulodda
muammo mavjud: yangi xususiyatlarni qo'shganda, siz "bu erda nima yozilgan edi?"
Ni eslab, uzoq vaqt davomida ushbu kod bilan aralashishingiz kerak. va o'zingizni
o'tmishda la'natlang.
Ehtimol, siz dizayn naqshlari haqida eshitgansiz va hatto ushbu ajoyib kitoblardan
yozgansiz:
▪
E. Gamma, R. Xelm, R. Jonson, J. Vlissidlar "Ob'ektiv dizayn texnikasi. Dizayn
naqshlari ”;
▪
M. Fouller "Korporativ dasturiy ta'minot arxitekturasi".
Ko'pchilik, ulkan qo'llanmalar va hujjatlardan qo'rqmagan holda, har qanday
zamonaviy ramkalarni o'rganishga harakat qilishdi va tushunish qiyinligiga duch
kelishdi (bir-biri bilan chambarchas bog'langan ko'plab me'moriy tushunchalar
mavjudligi sababli) zamonaviy vositalarni o'rganishni va "uzoq quti" da qo'llashni
keyinga qoldirdilar.
Ushbu maqola birinchi navbatda yangi boshlanuvchilar uchun foydali bo'ladi. Qanday
bo'lmasin, bir necha soat ichida siz barcha zamonaviy veb-ramkalar ostidagi MVC
naqshini amalga oshirish to'g'risida fikrga ega bo'lasiz, va buni qanday amalga oshirish
haqida batafsil ma'lumot olish uchun "ovqat" olasiz. Maqolaning oxirida foydali
havolalar to'plami mavjud bo'lib, ular sizga (MVC-dan tashqari) veb-ramkalar nimadan
iboratligini va qanday ishlashini aniqlashga yordam beradi.
Qattiq yadroli PHP dasturchilari ushbu maqolada o'zlari uchun yangilik topishlari
dargumon, ammo ularning asosiy matndagi sharhlari va izohlari juda foydali bo'ladi!
Chunki nazariyasiz, amaliyot mumkin emas, va amaliyotsiz, nazariya befoyda, keyin
dastlab ozgina nazariya bo'ladi va keyin biz amaliyotga o'tamiz. Agar siz MVC
tushunchasi bilan allaqachon tanish bo'lsangiz, nazariya bo'limini o'tkazib
yuborishingiz va to'g'ridan-to'g'ri amaliyotga o'tishingiz mumkin.
1. Nazariya
MVC modeli dastur tuzilishini yaratishning oddiy usulini tavsiflaydi, uning maqsadi
biznes mantig'ini foydalanuvchi interfeysidan ajratishdir. Natijada, dasturni o'lchash,
sinash, saqlash osonroq va albatta amalga oshiriladi.
MVC shablonining kontseptual sxemasini ko'rib chiqing (mening fikrimcha, bu men
ko'rgan eng muvaffaqiyatli sxema):
MVC arxitekturasida model ma'lumotlar va biznes mantiqiy qoidalarini ta'minlaydi,
ko'rinish foydalanuvchi interfeysi uchun javobgar va nazoratchi model va ko'rinish
o'rtasidagi o'zaro ta'sirni ta'minlaydi.
MVC dasturining odatiy ketma-ketligini quyidagicha ta'riflash mumkin:
1.
Foydalanuvchi veb-resursga kirganda, initsializatsiya skripti dasturning nusxasini
yaratadi
va
uni
bajarish
uchun
ishga
tushiradi.
Bu ko'rinishni namoyish etadi, deylik saytning asosiy sahifasida.
2.
Ilova foydalanuvchidan so'rovni qabul qiladi va so'ralgan boshqaruvchi va harakatni
aniqlaydi. Asosiy sahifa holatida odatiy amal bajariladi (
indeks
).
3.
Ilova kontrolör nusxasini yaratadi va harakat usulini ishga tushiradi,
masalan, ma'lumotlar bazasida ma'lumotni o'qiydigan namunaviy qo'ng'iroqlar
mavjud.
4.
Shundan so'ng, harakat modeldan olingan ma'lumotlar bilan ko'rinishni hosil qiladi va
natijani foydalanuvchiga namoyish etadi.
Model
- ilovaning biznes mantig'ini o'z ichiga oladi va ularni tanlash usullari (bu
ORM usullari bo'lishi mumkin), ishlov berish (masalan, tasdiqlash qoidalari) va aniq
ma'lumotlarni taqdim etish kiradi, bu esa uni juda qalin qiladi, bu juda normal holat.
Model foydalanuvchi bilan bevosita aloqada bo'lmasligi kerak. Foydalanuvchi so'rovi
bilan bog'liq bo'lgan barcha parametrlar kontrolörde qayta ishlanishi kerak.
Model HTML yoki boshqa displey kodini yaratmasligi kerak, bu foydalanuvchi
ehtiyojlariga qarab farq qilishi mumkin. Bunday kod ko'rinishda ko'rib chiqilishi
kerak.
Xuddi shu model, masalan: foydalanuvchini autentifikatsiya qilish modelidan
foydalanuvchida ham, dasturning ma'muriy qismida ham foydalanish mumkin. Bunday
holda, siz umumiy kodni alohida sinfga olib, merosxo'rlarda amaliy dasturlarni
aniqlash orqali undan meros olishingiz mumkin.
Ko'rish - tekshirgich va modeldan olingan ma'lumotlarning tashqi displeyini belgilash
uchun
ishlatiladi.
Ko'rishlar HTML-ni belgilaydi va ma'lumotlarni aylantirish, formatlash va namoyish
qilish
uchun
kichik
PHP-kod
qo'shimchalarini
o'z
ichiga
oladi.
Ma'lumotlar bazasiga bevosita kirmasligi kerak. Buni model tomonidan amalga
oshirish
kerak.
Foydalanuvchi so'rovidan olingan ma'lumotlar bilan ishlamaslik kerak. Ushbu vazifa
nazoratchi
tomonidan
bajarilishi
kerak.
Chiqarishga tayyor ma'lumotlarni olish uchun kontrolör yoki modellarning
xususiyatlari
va
usullariga
to'g'ridan-to'g'ri
kirish
mumkin.
Ko'rishlar odatda barcha sahifalar uchun umumiy bo'lgan belgilar (masalan, sarlavha
va pastki nomi) va shablonning modeldan ma'lumotlarni chiqarish yoki ma'lumotlarni
kiritish shakllarini namoyish qilish uchun ishlatiladigan qismlarini o'z ichiga olgan
umumiy shablonga bo'linadi.
Nazoratchi - ishchi dasturga modellar, ko'rinishlar va boshqa qismlarni bog'laydigan
biriktiruvchi aloqa. Nazoratchi foydalanuvchi so'rovlarini ko'rib chiqish uchun
javobgardir. Tekshirish moslamasida SQL so'rovlari bo'lmasligi kerak. Ular eng yaxshi
modellarda saqlanadi. Tekshirish moslamasida HTML yoki boshqa belgilar bo'lmasligi
kerak.
Uni
turlarga
kiritish
kerak.
Yaxshi ishlab chiqilgan MVC dasturida kontrolörler odatda juda nozik va bir necha
o'nlab kod satrlarini o'z ichiga oladi. Xo'sh, siz Joomla CMS-dagi ahmoq yog
'nazoratchilari (SFC) haqida gapira olmaysiz. Tekshirish moslamasining mantig'i juda
odatiy
va
uning
asosiy
qismi
asosiy
sinflarda
amalga
oshiriladi.
Modellar, aksincha, juda qalin va ma'lumotlarni qayta ishlash bilan bog'liq kodlarning
ko'pini o'z ichiga oladi, chunki Ulardagi ma'lumotlar tuzilishi va biznes mantiqlari
odatda ma'lum bir dastur uchun juda o'ziga xosdir.
1.1. Old kontroller va sahifa boshqaruvchisi
Ko'pgina hollarda foydalanuvchining veb-ilova bilan o'zaro aloqasi havolalarni bosish
orqali amalga oshiriladi. Endi brauzerning manzil satriga qarang - siz ushbu havoladan
ushbu matnni oldingiz. Boshqa havolalar, masalan, ushbu sahifaning o'ng tomonida,
sizga har xil tarkib beriladi. Shunday qilib, havola veb-ilovaga ma'lum bir buyruqni
anglatadi.
Umid qilamanki, siz allaqachon turli saytlarda manzillar panelini yaratish uchun
mutlaqo boshqacha formatlarga ega bo'lishini payqadingiz. Har bir format veb-
ilovaning arxitekturasini namoyish qilishi mumkin. Garchi bu har doim ham shunday
bo'lmasa-da, aksariyat hollarda bu aniq dalil.
Bir nechta matn va foydalanuvchi profilini ko'rsatadigan manzil panelining ikkita
variantini ko'rib chiqing.
Birinchi variant:
1.
www.example.com/article.php?id\u003d3
2.
www.example.com/user.php?id\u003d4
Bu erda har bir skript ma'lum bir buyruqning bajarilishi uchun javobgardir.
Ikkinchi variant:
1.
www.example.com/index.php?article\u003d3
2.
www.example.com/index.php?user\u003d4
Va bu erda barcha qo'ng'iroqlar bitta stsenariy bo'yicha amalga oshiriladiindeks.php.
Siz phpBB dvigateli bilan forumlarda ko'plab o'zaro ta'sirlashuv nuqtalari bilan
yondashuvni kuzatishingiz mumkin. Forumni ko'rish skript orqali amalga
oshiriladi viewforum.phpmavzuni ko'rishviewtopic.php va hokazo. Bitta jismoniy
skript fayli orqali kirish imkoniga ega bo'lgan ikkinchi yondoshishni, mening barcha
CMS MODX-da kuzatish mumkin, bu erda barcha qo'ng'iroqlar o'tadiindeks.php.
Ushbu ikki yondashuv butunlay boshqacha. Birinchisi, sahifa boshqaruvchisi
shabloniga (Page Controller) xosdir, ikkinchisi esa so'rovlarni boshqarish namunasi
(Front Controller) yordamida amalga oshiriladi. Sahifa boshqaruvchisi juda oddiy
mantiqqa ega bo'lgan saytlar uchun juda yaxshi. O'z navbatida, so'rovlar
boshqaruvchisi so'rovlarni qayta ishlash uchun barcha harakatlarni bir joyda
birlashtiradi, bu unga qo'shimcha funktsiyalarni beradi, buning natijasida odatda sahifa
boshqaruvchisi tomonidan hal qilinganidan ko'ra qiyinroq vazifalarni bajarish mumkin.
Men sahifa boshqaruvchisini amalga oshirish tafsilotlariga kirmayman, faqat shuni
aytamanki, amaliy qismda u aniq buyurtma nazorati (ba'zi bir o'xshashlik) ishlab
chiqiladi.
1.2. URL-manzilni yo'naltirish
URL-yo'riqnomasi ilovani amaldagi fayllarga mos kelmaydigan URL-larning
so'rovlarini qabul qilish, shuningdek foydalanuvchilar uchun semantik ma'noga ega va
qidiruv tizimini optimallashtirishni afzal ko'rgan CNC-larni sozlash imkonini beradi.
Masalan, mulohaza shaklini ko'rsatadigan oddiy sahifada, URL quyidagicha ko'rinishi
mumkin:
http://www.example.com/contacts.php?action\u003dfeedback
Bu
holda
taxminiy
qayta
ishlash
kodi:
switch ($ _GET ["action"]) (case "about": request_once ("about.php"); // sahifa "Biz
haqimizda" sindirish; case "contacts": request_once ("contacts.php"); // Aloqa
sahifasi sindirish; case "feedback": request_once ("feedback.php"); // sahifa "Teskari
aloqa" sindirish; sukut bo'yicha: request_once ("sahifa404.php"); // "404" tanaffus; )
Menimcha, deyarli hamma buni oldin qilgan.
URL-manzilni boshqarish vositasidan foydalanib, xuddi shu ma'lumotni aks ettirish
uchun quyidagi so'rovlarni olish uchun dasturni sozlashingiz mumkin:
http://www.example.com/contacts/feedback
Bu erda kontaktlar bu kontroller, va geribildirim bu aloqa shaklini ko'rsatadigan
kontaktlarni boshqarish usuli va boshqalar. Biz ushbu masalaga amaliy qismda
qaytamiz.
Shuni ham bilish kerakki, ko'pgina veb-ramkalarning yo'riqchilari o'zboshimchalik
bilan URL manzillarini yaratishga imkon beradi (URL har bir qismi nimani
anglatishini
aniqlang)
va
ularni
qayta
ishlash
qoidalari.
Endi biz amaliyotga o'tish uchun etarli nazariy bilimga egamiz.
2. Amaliyot
Birinchidan, quyidagi fayl va papka tuzilishini yarating:
Oldinga qarab, Model, View va Controller asosiy sinflari yadro papkasida saqlanadi
deb
aytaman.
Ularning avlodlari boshqaruv direktorlarida, modellarda va qarashlarda saqlanadi.
Fayl indeks.php Ilovada ishlayotgan nuqta. Fayl bootstrap.php dasturni yuklab
olishni boshlash, barcha kerakli modullarni ulash va hk.
Biz ketma-ket boramiz; index.php faylini oching va quyidagi kod bilan to'ldiring:
ini_set ("display_errors", 1); demand_once "application / bootstrap.php";
Bu erda savollar paydo bo'lmasligi kerak.
Keyinchalik,
to'g'ridan-to'g'ri
xalidaga
boramiz bootstrap.php:
request_once "core / model.php"; demand_once "core / view.php"; request_once "core
/ Controller.php"; demand_once "core / train.php"; Yo'l: start (); // yo'riqnoma ishga
tushirish
Birinchi uchta qatorda yadro fayllari mavjud emas. So'nggi satrlarga marshrutizator
klassi bilan fayl kiradi va statik boshlash usulini chaqirib ishga tushiramiz.
2.1. URL Router dasturini amalga oshirish
Hozircha, MVC naqshini bajarishdan chetga chiqamiz va marshrutlashni amalga
oshiramiz. Biz qilishimiz kerak bo'lgan birinchi qadam bu quyidagi kodni
yozishdir.htaccess:
Yo'nalishni alohida faylga joylashtiramiz marshrut.php asosiy katalogga. Ushbu
faylda biz kontrollerlarning usullarini ishlatadigan Route klassini tasvirlaymiz, bu o'z
navbatida sahifalarning ko'rinishini keltirib chiqaradi.
Funktsiyadan foydalanish
Do'stlaringiz bilan baham: |