ПредишенСледващото

Харесва ли ви PHP-разработчик, най-вероятно, че трябваше да се справят с Symfony. Е, поне сте чували за него. Може би не знаете - така че това е фактът, че Symfony основно се състои от набор от отделни библиотеки, наречени компоненти. които могат да бъдат използвани самостоятелно във всяко приложение PHP.

Например, една популярна рамка Laravel е разработен с помощта множествена Symfony компонент. В този урок ще ги използват също. Следващата версия на популярната CMS Drupal също се основава на някои от основните компоненти на Symfony.

Тук ще разгледаме как да се изгради малък PHP рамка с използването на тези компоненти и как те биха могли да си взаимодействат, за да се създаде основната структура на всеки уеб приложение.

Направи си PHP Symfony рамка на компонентите

Бих искала да отбележа, че в тази статия няма да се обсъди всеки Symfony компоненти и техните възможности. Аз ще кажа само за основните неща, които са необходими, за да се изгради минимално функциониране рамка. Ако искате да изследвате компонентите на Symfony - Препоръчвам ви да се консултира с документация.

създадем проект

Нека да започнем от нулата с прост index.php в основната директория на проекта, както и да създава зависимости ще използва композитора.

На този етап от нашето досие ще съдържа просто парче код:

Този код просто сравнява поиска URL фрагмента (съдържащ се в $ _SERVER [ 'PATH_INFO']), съответстващ ехо изявление. Това е много, много проста рутер.

компонент HttpFoundation

HttpFoundation играе ролята на абстракции от високо ниво за работа с HTTP поток. Най-важният от своите входни точки са на запитване и отговор класове.

Заявка позволява да се работи с информацията за заявка HTTP като исканите URI или клиентски заглавията, е построен на PHP свръхглобалните масиви ($ _GET. $ _POST. И т.н.). Отговор се използва за изпращане на HTTP хедъри и данни за клиента, а не да се използва стандартната заглавието и ехото. тъй като това би било в "класическата" PHP.

Комплект с композитора:

Тази команда ще постави доставчика на компонента и директория. Сега поставете този код във файла index.php:

Това, което направихме тук, не е нещо специално:

  • Създаване на копие от искането с статичния метод createFromGlobals на. Вместо да се налага да създадете празен обект, той изпълва текущата заявка Заявка обект на данни;
  • Ние проверяваме стойността, получена чрез метод getPathInfo.

Ние също може да замести ехо структурата да се използва обект Response да се съхранява на изходни данни, както и използването на метода на изпращане, за да изпратите отговора на клиента (което е в действителност, премахва заглавията и съдържанието на изходния буфер).

HttpKernel използва като обвивка на рамката на ядро

В момента, ние имаме най-простия случай - цялата логика на рамката е в наш пред контролер - на index.php файла. Ако искаме да добавим още код, по-добре е тя да се отдели в друг клас, който ще бъде "ядрото" на нашата рамка.

HttpKernel компонент просто създаден за тази цел. Той е проектиран да работи с HttpFoundation, Заявка обект се превръща в отговор на един обект, а също така осигурява редица класове, за да се постигне тази цел. Сега ние ще използваме HttpKernelInterface. Този интерфейс определя само един метод: дръжка.

Този метод отнема като аргументи Заявка обект. и изисква връщането на отговора на обект. Така че всеки един клас, който реализира този интерфейс може да се справи искане Заявка. и да се върнете Response отговор.

Нека да създадем рамка клас ядро ​​който реализира HttpKernelInterface интерфейс. Създаване Core.php файл в ИЪ / Рамковата директория.

Забележка. метод дръжка също се извършва по два избираеми аргументи: вид на заявката, както и Булева аргумент се посочва дали ядрото трябва да се хвърли изключение, ако възникне грешка. В тази статия няма да ги използва, но ние трябва да се приложи метод в точната форма, както е описано в HttpKernelInterface интерфейс. друго PHP хвърля грешка.

Единственото нещо, което направихме в този пасаж - премества кода, за да се справят с този метод. Сега можем да се отървем от този код във файла index.php. и вместо това използвайте новосъздадената класа:

Подобрената система маршрутизация

В нашия клас все още има проблем: той все още се справя определяне на маршрута на цялото приложение. Ако е необходимо, добавете нов URL адрес, трябва да промените кода в рамка, която определено не е добра идея. Освен това, тя ще изисква добавянето на нов случай на блокове за всеки нов маршрут. Не, ние определено не искам да ходя по този хлъзгав наклон.

Решението е да се добави в системата на рамка за маршрутизиране. Можете да направите това, като създава карта метод. URI, който съпоставя със затварянето на PHP, която ще бъде изпълнена, ако URI съвпада с маршрута.

Сега маршрутите могат да се добавят директно в предната контролера:

Нуждаем се от по-гъвкава и мощна система за маршрутизиране, поради което трябва да използваме компонент Routing.

Използването Routing компонент ще ни позволи да прехвърляте Route обекти (пътища) в UrlMatcher. които ще сравнят искания URI съответстващ маршрута. Маршрут Тази цел може да съдържа някой от атрибутите, които ще ни помогнат да изпълняват изискваната част на приложението. В този случай, такъв обект ще съдържа верига, която трябва да се извърши в случай на съвпадение на маршрута. Също така, всички динамични параметри, които се съдържат в URL адреса ще присъстват в списъка на атрибутите на маршрута.

За да се приложи тази система, ние трябва да направи следните промени:

  • замени маршрути масив например RouteCollection. за съхраняване на нашите маршрути;
  • промените метода на картата на логиката, така че той се регистрира Route например в тази колекция;
  • UrlMatcher създаде обект и да го каже как да търсят пътища съвпадение на URI в предавания, като посочва съответния контекст от RequestContext обект.

метод мач се опитва да намери подходящ маршрут за прие URL, и при успех ще се върне на съответните атрибути на маршрути. В противен случай, той хвърля изключение ResourceNotFoundException. че можем да се хване и ще покаже страница 404.

Сега можете да използвате компонента за маршрутизация за обработка на всякакъв вид параметри. След като се отървете от атрибута контролер, можете да се обадите всяка верига, минаваща параметрите като аргументи (с помощта на call_user_func_array функция):

Сега ние можем лесно да се справят с динамичен URL, като:

Имайте предвид, че тук ние правим нещо много подобно на това, което той прави, които искат да получат Symfony: представяме URL параметри в необходимата контролера.

Ние се намеси в рамките на процеса на работа

Symfony рамка също предоставя редица възможности да въвеждат в жизнения цикъл на поискване и да го променят. Един добър пример за това е слой за сигурност, прихващане на искане, което се опитва да получите достъп до защитени URL.

Всичко това е възможно благодарение на компонент EventDispatcher. позволява различни компоненти на приложенията да комуникират един с друг чрез прилагане модел дизайн наблюдател.

В основата на този компонент е класа EventDispatcher, което е подписано от абонатите на отделните събития. Когато управителят известие за събитието, причинена от всички известни абонатите на това събитие. Абонат може да бъде всеки правилен функция за обратно извикване или метод.

Осъзнайте, при това поведение, което можем, добавяйки диспечер собственост. в която да се съхранява EventDispatcher обекта. както и от метода. който ще свързва събитието, за да се върне PHP функция разговор. Мениджър ще използваме, за да се регистрирате функция за обратно извикване, както и за следващото поколение на събитията в рамка.

Сега имаме възможност да се регистрирате за абонати, които са прости функции за обратно повикване. Сега, нека да напише метод за пожар. която разказва контролера, че е необходимо да се уведомява всички абонати са му известни, че е имало някакво събитие.

По-малко от десет реда код, които добавихме добро събитие в нашия рамка за обработка на система, и всичко това благодарение на компонент EventDispatcher.

метод изпращането също отнема втори аргумент - обект на събитието. Всяко събитие е наследен от общия клас събитие. и е предназначена за съхраняване на информация, свързана със събитието.

Нека напиши клас RequestEvent събития. което ще се дължи веднага, веднага след като рамката ще обработи заявката. Разбира се, това събитие трябва да има достъп до текущата заявка, използвайки атрибут, който ще се съхранява текущата инстанция на искането.

Сега можем да добавим код, за да се справят с този метод може да се генерира RequestEvent събитие всеки път, когато получите искане.

По този начин, всички абонати до събитието ще имат достъп до RequestEvent обект. както и за текущата заявка инстанция. В момента, ние не са писали като абонат, но лесно можем да си представим, че манипулатор преди главния код ще провери дали ограниченият достъп до исканата URL.

Това е проста система за сигурност, но вие може да реализира всичко, което желаете, тъй като сега имате възможност да се намеси в рамките на процеса на работа по всяко време, което значително разширява възможностите му.

заключение

В тази статия, можете да видите, че Symfony компоненти са отлични самостоятелни библиотеки. Освен това, те могат да си взаимодействат един с друг, за да образуват заедно рамка, която отговаря на вашите нужди. Все още има много компоненти, които, без съмнение, са много интересни - например, DependencyInjection или сигурността компоненти.

Разбира се, рамки, в пълен размер, като Symfony или Laravel използват тези компоненти в тяхната цялост техните възможности, за да се създаде мощен инструмент, който ние сега притежават.

Направи си PHP Symfony рамка на компонентите

До получаване на информация от два канала (зрение и слух) на ефективността на обучението далеч по-добър живот от книги. А домашните задачи и онлайн тестове ще ви позволи да мисля постоянно в целевия език и веднага провери знанията си!

Направи си PHP Symfony рамка на компонентите

Направи си PHP Symfony рамка на компонентите

Ако искате по-дълго време, за да проучи как да се HTML, че ме има, за което трябва добра новина!

Направи си PHP Symfony рамка на компонентите

Ако вече сте се научили HTML и искат да се движи напред, следващата стъпка ще бъде да се проучи CSS технологията.

Направи си PHP Symfony рамка на компонентите

Ако искате да се разбере концепцията на домейн и хостинг, да научат как да се създаде база данни, да качвате файлове към уеб сайт чрез FTP сървър, създаване на поддомейни, да конфигурирате пощенските кутии за сайта и мониторинг на посещаемостта, този курс е разработен специално за вас!

Подкрепете проекта - споделете линка, благодаря!