Yii фреймворкын үйренеміз (шәйнектен шәйнектерге). Алғашқы бағдарлама.

Өмір — бұл мүмкіндік. Оны жіберіп алма!
Пхпшы, менің мақалаларымнан көз жазып қалма!

Ал, халайық, Yii-ді үйренуді жалғастырамыз. Алдыңғы мақаланы қорытып үлгердіңіздер деп үміттенем. Бүгін кішкеееентай жұмыс істейтін бағдарлама жазып көреміз.

MVC

MVC ол архитектуралық паттерн десек те болады. Оның кең тарағаны сонша, оны технологиямен шатастыратындар да бар. Паттерннің негізгі ойы, деректер қорымен жұмыс істеуді, пайдаланушы интерфейсін және пайдаланушымен қарым-қатынас болатын бөліктерді үш түрлі компонентке бөлу. Осылай код үш бөлікке бөлініп, бағдарламаның оңай дамуына жол жасайды. Аты айтып тұрғандай паттерн үш компоненттен тұрады:

  • Модель (Model) — деректер қорымен жұмыс жасау бөлігі, ол деректер туралы мәліметті және олармен қалай жұмыс жасау керектігі туралы мәлімет сақтайды. Бірақ, оны қалай көрсету туралы білмейді.
  • Көрсетілім (View) — деректерді визуалды түрде көрсетуге жауап береді.
  • Контроллер (Controller) — пайдаланушымен қарым-қатынасқа жауап береді. Яғни, пайдаланушының жасаған іс-әрекетіне модельді (Model) және көрсетілімді (View) қолдана отырып жауап беретін негізгі механизм. Бағдарламаның негізгі логикасы осында болуы керек.

Yii осы MVC паттерніне негізделген деп айтып кеткен едім. Естеріңізде болса, біз yii орнатқанда үш папка бар еді:
controllers/
views/
models/

Осы үш папка сәйкесінше MVC-дің үш компонентіне арналған.

Сұраныстың өмір сүру циклі

Енді MVC туралы кішкентай ұққан болсаңыздар, енді Yii-дің қалай жұмыс атқаратынына қарайық. Егер қаланы құс ұшатын биіктіктен көрсең, жолдардың қалай бағытталғанын көріп, ненің қайда екенін түсіну оңай болады (карта), дәл сол сияқты Yii-ге құс ұшатын биіктіктен қарасаң мынандай көрініс көруге болады:



Бұл бір сұраныстың өмір сүру циклі. Сұранысқа жауап беру үшін Yii не істейтіні көрсетілген. Рет ретімен жазатын болсақ:

  1. Пайдаланушы кіру нүктесіне сұраныс жасайды. Бізде кіру нүктесі web/index.php файлы. Барлық сұраныстар осы файл арқылы өтеді.
  2. index.php бағдарлама баптауларын жүктеп бағдарламаны іске қосады
  3. Бағдарлама сұраныс компонентінің көмегімен сұраныс маршрутын шешеді
  4. Бағдарлама сұранысқа жауап беретін контроллерді құрады
  5. Контроллер өз кезегінде сұранысөа жауап беру үшін әрекетті (Action) құрады және фильтрден өткізеді
  6. Егер сұраныс фильтрлердің біреуінен өтпесе әрекет тоқтатылады, орындалмайды
  7. Егер сұраныс фильтрлердің бәрінен өтсе, әрекет орындалуын жалғастырады
  8. Әрекет қажет болса модельді жүктейді
  9. Әрекет алынған модельді/деректерді қолданып көрсетілімді құрып
  10. Жауап беру компоненті құрылған көрсетілімді пайдаланушы браузеріне жібереді

Кейбір компоненттердің не үшін керектігі сәл де болса түсінікті болды деп ойлаймын. Мұндағы негізгі рольді атқаратын Әрекет (Action), ол белгілі бір сұранысқа жауап беру кезінде деректер қоры мен көрсетілімді байланыстырады. Ал қалған компоненттер өз ретінде қарастырылады.

Кішігірім бағдарлама...

Енді тарихи қалыптасқан үрдіс бойынша «Сәлем, әлем!» дейтін сөз шығаратын бағдарлама құрамыз.

Біздің бағдарламамыз сұраныстан «message» параметрін оқып, соны пайдаланушыға кері қайтарады.

Оны жасау үшін, ең алдымен контроллер және оның ішінде әрекет құруымыз керек. Ең бастысы контроллерімізді controllers папкасының ішінде құрамыз, оны «SiteController» деп атайық:
<?php
namespace app\controllers;

use yii\web\Controller;

class SiteController extends Controller {
    // мұнда код жазамыз
}


осындай кодты controllers/SiteController.php файлының ішіне сақтаңыз. Енді бізге керегі, ол — әрекет (Action). Оны жоғарыда құрған контроллердің ішінде жазамыз. Сұранысымызға жауап беретін әрекетті «say» деп атайтын болсақ, ол былай жазылады:
<?php

namespace app\controllers;

use yii\web\Controller;

class SiteController extends Controller {

    public function actionSay($message = 'Hello') {
        return $this->render('say', ['message' => $message]);
    }

}


Бұл біздің пайдаланушының хатын өзіне қайта шығарып беретін әрекет. Контроллерде бірнеше әрекет болуы мүмкін. Ең бастысы оларды логикалық тұрғыдан бөлу керек.

Кейін әрекеттің атына назар аударыңыз «actionSay», яғни әрекеттер «action» сөзінен басталып, әрекеттің атын бас әріптен бастап жазып жалғау керек.

Ал «render» функциясы «viewsay» атты көрсетілімді алады да, оған «message» деген айнымалыда сақталған мәліметті беріп, көрсетілімді құрады. Біз әлі «say» атты көрсетілімді құрған жоқпыз. Енді сол көрсетілімді құрайық. Ол үшін «views/site/viewsay.php» файлын құрып, соның ішіне былай деп жазыңыз:
<?php
use yii\helpers\Html;
?>
<?= Html::encode($message) ?>


Иә, қарапайым көрсетілім. «render» функциясы көрсетілімді мынандай жолдан іздейді: «views/ControllerID/[көрсетілім аты].php». Бізде ControllerID ол «site», көрсетілімнің аты «viewsay». Сондықтан да көрсетілімді views/site/viewsay.php" файлында құрдық. $message айнымалысы қайдан келгенін түсініп тұрған боларсыздар, ол әрекеттен көрсетілімге берілді ['message' => $message]. «Html::encode()» XSS шабуылынан қорғану үшін қажет.

Енді барлығы дайын, тексереміз. Браузерде мынандай сұраныс жіберіңіз:
http://hostname/index.php?r=site/say&message=Hello+World




Уау, міне, кішкеееентай кірпіш қаланды. Егер сұранысымызда message параметрін алып тастасақ, «Hello, world» орнына жай ғана «Hello» деген сөз алатын едік. «r» параметрі әрекетке бағытталған маршрутты көрсетеді, мұндағы «site» контроллер аты, ал «say» сол контроллердені әрекет. Нәтижесінде, біздің құрған «say» әрекетіміз орындалып, «viewsay» көрсетілімі браузерде ашылады. Шынайы үлкен бағдарламаларда бұл бірнеше есе күрделеніледі, бірақ 1000 шақырымға жол бір қадамнан басталады дейді ғой.

Қорытынды

Бұл жолы біз MVC паттерніне шолу жасадық, контроллер мен әрекетті құрып, пайдаланушыға еш болмағанда бір жауап қайтара алатындай болдық. Келесі мақалаларда модельдермен жұмыс, формаларды құру секілді тақырыпты қозғаймыз.

I’ll be back

Келесі мақаланы күтіңіздер.

  • +3
15 пікір
shainek
басты бетке сурет қойған адамға рақмет, астында тұр екен, мен бірінші қойылған сурет шығып тұра ма десем )
kamyrov
оқасы жоқ, бізді көп күткізбей жаңа пост жазғанынызға рахмет! Айтпақшы маған бүгін поштама тегін вебинарға сілтеме келді, вебинарда ең танымал фреймворктар туралы айтылады, соның ішінде Yii болады. Қызықты болса, мына сілтемеге есік ашық)
shainek
рақмет, міндетті түрде қараймын!!!
vfvtnjd
Статьяга семиз 5 десе де болады, тек мысалдарынызда short tags пайдаланганынызды дурыс деп ойламаймын
shainek
тек "<?php" ғана жазылғанын айтып жатырсыз ба?
vfvtnjd
керісінше, "<?=" жазбаған дұрыс, ол барлық жерде жұмыс істемеуі мүмкін
shainek
мысалы?
vfvtnjd
бұлай жазуға мүмкіндік алу үшін:
1)php.ini де «short_open_tag=On» опциясын өзгерту
2)htaccess те «php_value short_open_tag 1» деп опция жазу
3)тіпті болмаса, PHP ді configure-де --enable-short-tags опциясы арқылы компиляциялау
Бұларды жазған себебім, көп адамдар виртуальный хостингта отырады, бұл дегеніміз бұл мүмкіндіктің бәрі бола бермейді деген сөз.
shainek
Осы сілтемені жақсылап оқысаңыз, php 5.4.0 нұсқасынан бастап "<?=" тегі сіз бірінші пікірде жазған баптаулар бар жоғына қарамай жұмыс жасай береді екен. Мен бірінші мақалада жазып кеткендей yii 2.0 php-дің 5.4.0 нұсқасынан жоғары нұсқаларда жұмыс жасайды. Демек, "<?=" тегін қорықпай пайдалануға болады. Егер php <5.4.0 болса, онда иә, келісем, ойланып пайдалану керек.
vfvtnjd
мен бір қате іздеп, әр нәрсеге ілігейін деген ойым жоқ. Тек мынадай оқу, үйренуге арналған статьяға жалпыға ортақ "<?php" жазсаңыз дегенім еді, себебі шайнектерді білесіз ғой, қалай жазулы тұрса соны көшіре салады өздеріне.
Ал өз проектеріңізде не деп жазсаңыз да, "<?=" өз еркіңізде әрине. Бар айтарым сол.
Және сұрақ: комментарий неге редактировать етілмейді?
shainek
Сұрақ сайт администраторларына.
Ойнолойнау, мен сізді бәле іздеп жатыр деген жоқпын )) айтқым келгенi yii 2 php 5.4.0 болмаса жұмыс жасамайды ғой, демек, қандай шәйнек болса да бірінші ода 5.4.0 тұруы керек, ал онда "<?=" еш қиындықсыз жұмыс жасайды. Өзім шәйнек болсам шәйнектерді қалай білмейін ))
kamyrov
Бізде айтылған сөз, атылған оқ принципі сақталады)
itblogkz
Php-да қандай мықты тексттік редактор бар. Мені интеллисенс, және «ыстық батырмалары» қызықтырады. Бүкіл кодты үтір нүктесіне шейін қолмен жазып отырмас үшін.
shainek
Негізі PhpStorm-ға жететіні жоқ, жақында шолу жазамын мүмкіндіктеріне. Білем ол мәтіндік редактор емес, бірақ мәтіндік редакторлардың қайсысы болсын плагиндерді орнату арқылы ғана сондай мүмкіндіктерді алуға болады. Былайша Sublime-ні кеңес беремін, php-ге арналған плагиндері көп.
Тек тіркелген қолданушылар ғана пікір қалдыра алады.