YII 2, начало за начинаещи
Стъпка 1. Въведение.
Кратки определения и обяснения преди да продължите:
1) Композитор.Тази програма ще обработи компилирания от нас composer.json, ще създаде папка на доставчик и ще изтегли най-новата версия на YII2 и всички други „пакети“, от които рамката зависи, чрез Git. Повече ▼. Ще ви предупредя веднага, на Windows можете да срещнете куп проблеми по време на инсталацията.
2) PSR-4.Разработчиците непрекъснато променят колко интервала трябва да има раздел, как да наименуват променливи и т.н. Сега тенденцията е разделът да е 4 интервала, а PSR-4 се използва като стандарт за съхраняване и зареждане на класове. В стандарта PSR-4 Composer събира изтеглените файлове:
След обработка на composer.json, YII2 се намира
Съдържанието на папката с рамка от YII2 Github стига там.
Като цяло, който не е в темата, съветвам ви да прочетете за PSR. Ако сте лош човек, можете да се обадите на your_methods_like_this, но бъдете готови, че скоро всичко мирише лошо, все още трябва да се подчините на YII и да раждате метода getYour_method - перфекционисткият ад.
3) Пространство от имена. Пространствата от имена бяха въведени в PHP 5.3. За да разберете цялата кухня, отворете vendor/yiisoft/yii2/classes.php. Ето класовете, заредени от YII2. Основният клас за уеб приложения се намира в web/application.php. Както можете да видите, неговото пространство от имена е yiiweb. Какво означава? Да, още нищо, просто този клас може да се нарече така:
$приложение = ново yiiwebПриложение;
И ако по-късно в системата се появи друг клас Application, ние ще го извикаме чрез неговото уникално пространство от имена, като това:
$application2 = ново vasyamegasoftApplication;
Преди PHP 5.3 два класа с едно и също име не можеха да се използват в едно и също приложение.
Всички classes.php са разделени от пространства от именаyii****, това създава абстрактна рамкова структура. Ние също така ще разпръснем нашето приложение в нашите собствени пространства от имена и YII ще може да навигира през тях в нашата структура.
4) MVC. Все още не е измислено нищо по-добро от схемата MVC (model-view-controller), почти всички популярни рамки работят по тази схема. Това означава, че всяка потребителска заявка минава през (задължително) контролер и (евентуално) модел и (евентуално) изглед. Това е много удобно, практично и красиво, следването на тази верига ще позволи на проекта да остане в сглобено състояние - нищо няма да стърчи от никъде (спомнете си с ужас първия си проект не на MVC).
Ето три YII2 класа, разширяващи персонализирани класове за контролер и модел и шаблонни файлове:
5) CRUD. Създаване, четене, актуализиране, изтриване. Почти всички уеб приложения са изградени около тези четири букви. Ние създаваме, четем, актуализираме, изтриваме данни в базата данни.
Стъпка 2. Инсталиране.
В основата на проекта създайте composer.json с попълнената необходима секция:
Когато бъде пусната стабилната версия на YII2, първият ред (минимална стабилност) вече няма да е необходим. Сега нека предадем този файл на Composer. В Linux трябва да стартирате инсталирането на композитора в папката на проекта. В Windows ви съветвам да поставите отметка в квадратчето „вграждане в Explorer“ по време на инсталацията и да инсталирате пакети чрез десния бутон на мишката (RMB върху папката с composer.json).
Ако всичко е наред, ще бъде създадена папка vendor, в която ще бъдат поставени YII2 и всички необходими пакети. Папката ще съдържа и autoload.php, който ще зареди всички необходими класове.
В бъдеще ще имаме нужда от още пакети - например панел за отстраняване на грешки и генератор на код. Незабавно добавете всичко, изброено в изискването:
И нека актуализираме: актуализация на композитора.
След тренировка ще нитамесайтове, базирани на готови рамки. Вижте тук как да инсталирате основна или разширена рамка YII2 сайт чрез Composer, заедно със самия YII.
Стъпка 3. Конфигурация.
Следващата стъпка след инсталацията е конфигурацията. Нашето бъдещо приложение ще бъде възможно най-близо до CodeIgniter по структура. Но като цяло в YII2 можете (но по-добре не) да разбърквате всичко с папки и пространства от имена.
Създаваме папка на приложението и в нея стандартен набор от други папки: config, контролери, модели, изгледи, компоненти, време за изпълнение (YII ще пише системни журнали тук).
index.php изглежда така, той просто получава конфигурацията и я предава на yiiwebApplication:
На този етап е важно да разберем какво правим като цяло. yiiwebApplication е обикновен клас като всичко останало в YII. Всеки клас е добре документиран. Например, тук е документацията за този, тя описва всяко свойство и метод. След конфигурирането, свойствата ще бъдат попълнени с данните, от които се нуждаем. Относно „добре описано“ - хитрувах, всъщност „скоро ще бъде добре описано“, в момента YII2 е в бета фаза и има много неточности в документацията.
Минимално приложение/config/config.php за приложение, което работи с базата данни:
Тази конфигурация ще зареди един компонент - класът на базата данни. И ако константата за разработка е дефинирана в index.php, няколко модула за уважавания разработчик.
Сега нека проверим дали всичко работи. Създаваме папка с активи с „лоши“ права в корена на проекта, наричаме модула за генериране на код site.lc/?r=gii. По пътя оценяваме панела за отстраняване на грешки по-долу. Приказка.
След като прочетете статията, вашата домашна работа ще бъде да генерирате модел, базиран на вашата таблица в базата данни, както и CRUD приложение.
Стъпка 4. Контролер.
Контролер - клас, съдържащ действия, които обработват заявкипотребител. Всяко действие е определен бутон на общия панел. Натискаме бутона - получаваме резултата.
Контролерът по подразбиране в YII2 е SiteController, той трябва да бъде в пространството от имена на appcontrollers (пространството от имена може да бъде променено чрез задаване на ключа controllerNamespace в конфигурацията). Действието по подразбиране е Индекс. Създайте приложение/контролери/SiteController.php. Помните ли PSR? Така че класовете се препоръчват да бъдат именувани с главна буква, както и файловете, съдържащи класа. Методите са с малки букви.
Тук всичко е интуитивно. Ще видим здравей свят, като се обадим на главната страница на сайта. Ако все още не разбирате защо изобщо имате нужда от контролер, можете да създадете друго действие:
И извикайте /?r=site/vasya в браузъра. Богородица, да, YII определи от _GET[r], че е поискан методът actionVasya на класа SiteController. Освен това в методите на контролера ще напишем всички условия if-else, ще получим всички данни от базата данни чрез модела, за да прехвърлим резултата от обработката на заявката на потребителя към шаблона (изглед).
Прочетете повече за класа yiiwebController, чиято функционалност е заимствана от нашия клас контролер.
Почти всички наши приложения в бекенда ще съдържат методи в техния CRUD контролер: actionRead, actionUpdate, actionDelete, actionCreate, всяко ще прави своето нещо, но всички ще използват общ модел. Ще пропусна описанието на тези действия в тази статия. За да разберете как работи всеки, можете да използвате примера на готовия код, генериран в домашното ви.
Стъпка 4. Модел.
Моделът в YII е най-важното нещо, чрез модела си взаимодействат всички части на системата, моделът поддържа приложението в сглобено състояние. Модел в YII2 почти винаги е обвързан с база данни. Има таблица и има модел, който го описва.
Тук ще си позволятръгване от YII. Преди да използвате модел в YII, трябва да разберете какво представлява моделът в програмирането като цяло. От гледна точка на ООП всичко в света е обект - река, човек, пясък, компютър. По-добре е човекът да се състои и от предмети - ноздра, пръсти на краката и т.н. Е, да не отиваме твърде далеч, обратно към модела. Ще създадем приложение за управление на клиенти на одиторска фирма, като основният обект е дружество с ограничена отговорност (отговорността може да бъде ограничена чрез частни методи, но няма да стигнем дотам). Всички пайове на компанията се въртят около LLC, това е нейната основа, така че можем да заключим, че най-важното нещо, което е в уеб приложението на компанията, е моделът LLC. Нека създадем този модел въз основа на PHP клас.
Всичко, след което можем да заредим нашия модел в контролера (използваме appmodels), да създадем толкова екземпляри, колкото желаем, с различни имена и основатели, да завъртаме и обръщаме тези LLCs в контролера и изгледи, както желаем.
Тук трябва да помним, че LLC е не само информация, но и различни действия. Например сливания. Можем да създадем метод за сливане в модела, който ще извърши необходимите манипулации и ще прехвърли обект за сливане там.
С помощта на модели можете да опишете целия живот. Как YII2 ще ни помогне с това? На първо място, класът yiidbActiveRecord (съветвам ви да го проучите внимателно), има много от всичко, което ще помогне да свържете нашия модел на данни с MySQL таблици. Нека го наследим и използваме.
Между другото, важно е да разберете, че ActiveRecord включва наследяването на yiibaseModel, като сте изучавали този клас, ще разберете какво е модел в YII. Това са правила за валидиране на подадени от потребители данни, това са „атрибути“, това са „поведения“, това са магически сетери и гетери, които взаимодействат с моделния клас, който сте създали.
В основатаданните ще бъдат три таблици:
Основното е ооо. Учредителите ще съхраняват учредителите. founders_to_ooo - таблица за свързване, която свързва колкото желаете основатели към един запис в таблицата ooo.
За основателите създаваме отделен модел на основателя.
След това в контролера добавете use appmodelsOOO; и показва информация за LLC с >
Ето как можете (трябва) да използвате метода yiibasemodelload() в комбинация с yiidbActiveRecordsave(), за да заредите данни в модела и да ги запишете в базата данни:
YII при зареждане ще провери всички валидации, описани в правилата на модела, и само ако данните са правилни, ще изпълни save (), ако данните са неправилни, необходимата грешка ще се покаже до полето в изгледа. Разбира се, ако вмъкнем данни в базата данни чрез YII API, ще се защитим от всякакъв вид инжектиране. Не е зле.
Това е шаблон за сайт. Контролерът връща резултата от изобразяването на шаблона с предадените променливи ($this->render('index', ['model' => $model]);) и този резултат се показва на браузъра. В YII2 шаблонът е разделен на два типа: слой и изглед. Слоевете се съхраняват в изгледи/оформления, изгледите се съхраняват в изгледи/. Създайте папки /application/views/layouts/ и /application/views/site/
Създайте слой main.php (това е слоят по подразбиране). Ето как изглежда слоят YII2.
Защо всички тези endBody() ?> вместо обикновен етикет? За да може рамката да повлияе на поведението на тази част от страницата по време на рендиране, тя ще замени своите скриптове там и т.н.
Помощният html ще се използва в почти всички изгледи, вижте документацията за него.
Най-умните вече се досетиха, в $content на слоя YII ще върне изглед, който ще се определя от името на действието. Създайте application/views/site/index.php
$model се предава на изгледа чрез действие на контролер.
Стъпка 6. Джаджи.
Основната цел на рамката еускоряване на процеса на създаване на проект. Колкото по-малко код, толкова по-добре. И единственото по-добро нещо от кратък код е съществуващ код. Widget вече е съществуващ код. Пример за такъв уиджет е GridView, който ще покаже таблица с данни с възможност за сортиране по всяка колона.
Променяме нашия изглед:
Всички, гледаме ли резултата? Бихме искали, но не, липсват ни $searchModel и $dataProvider. Първата променлива е отделен LLC модел, който извършва търсенето. Втората променлива е нашият стар $model, резултат от селекцията, но малко по-сложен. Всичко е по-сложно, отколкото бихме искали. Но в този пример ще видите как „комуникацията“ се осъществява чрез модела между независими части на YII.
Създаване на модела OOOSearch
Сега получаваме резултата - табела с пагинация и възможност за филтриране и сортиране на съдържанието. Страничен ефект от копирането и персонализирането на готовия код за себе си е доста досадна задача. За щастие има генератор на CRUD код (/?r=gii), с помощта на който можем (не винаги, *trollface*) да генерираме както модел за търсене, така и изглед с тази джаджа.
Отделно, струва си да останете на джаджата yiiwidgetsActiveForm. С него се създават всички форми в сайта. Тази джаджа може да показва основните елементи на формуляра и ще поеме функцията за проверка на данните, преди да ги изпрати на сървъра. Като цяло е изключително просто. Извеждаме формата и един вход, предаваме модела с правила на входа, така че джаджата да знае какво трябва да се въведе във всяко поле:
Повтарям, в идеалния случай няма да пишем цялата тази мръсотия, просто трябва да овладеем генератора на код и изгледът ще бъде генериран въз основа на посочената таблица.
Стъпка 8. Поведения и събития.
Тук ще цитирам изречението на тази статия.
В Yii има такова нещо като поведение.
Както всичко останало вYII2, поведението е клас. Създайте клас applicationcomponentsLog.php в пространство от имена appcomponents
Готов! Сега нашият контролер регистрира, можем да използваме това поведение във всички следващи сайтове. Примерът е малко прост, по-боен пример в същата статия, сега трябва да ви е по-ясен. Вярно, има „велосипед“, сега YII има вградено поведение yiibehaviorsSluggableBehavior, което използва yiibehaviorsAttributeBehavior (не знам дали се поддържа кирилица, не съм го проверявал).
Стъпка 8. Модули.
Както се казва, в добрия OOP код няма проблеми, които не могат да бъдат решени чрез въвеждане на ново ниво на абстракция. С изключение на едно - твърде високо ниво на абстракция. Модулът е допълнителен слой абстракция в приложение. Модулът е пакет. MVC пакет, съдържащ собствени контролери, модели и изгледи, отделени от други контролери, модели и изгледи. Веднъж някакъв програмист искаше да добави нов раздел към сайта, погледна купчината боклук от вече създадени контролери и обеща, че ще създаде свои собствени контролери с блекджек и курви. Е, добавих поддръжка за модули в YII.
Модулите на приложението са изброени в конфигурацията:
Това е „модулът“, който е генераторът на gii код, който свързахме първоначално. За да разберете какво е какво, отворете vendor/yiisoft/yii2, вижте модулния клас Module.php, папката контролери и изгледи. Можете да се досетите, че по същия принцип бихме могли да създадем наш собствен OOO модул и да го използваме на всеки сайт, като извикаме /?r=ooo
Прочетохме тази статия. Там цялото приложение е изградено на модули. Сложно е, аз самият сега ровя там.
Стъпка 10. Послеслов.
Тук просто искам да опиша чувствата си от YII2 по време на първото запознанство. Преди това изрязах сайтове на CodeIgniter и направих свои собствени инструменти загенериране на код, автоматично валидиране на формуляр и др. Сега виждам всичко това в YII2, но тук е реализирано наистина страхотно и универсално. Това е цялото усещане. Ще продължа да уча YII, има още много интересни неща.