Phalcon Нека се поучим от един пример

Съвсем наскоро PHP MVC Framework, написан на C, беше споменат на Habré, където бяха описани неговите предимства и недостатъци. С тази статия искам да продължа запознанството си с един доста интересен инструмент за уеб разработчици -PhalconPHP.

Най-добрият начин да използвате това ръководство е да преминете през него стъпка по стъпка.

Инсталирането на Phalcon PHP е доста тривиално, всичко се свежда до инсталиране на PHP разширението, което може да бъде изтеглено от официалния сайт.

С инсталиран Phalcon PHP проверете за наличието на секцията „Phalcon“ в изхода на phpinfo() или изпълнете кодовия фрагмент по-долу:

Трябва да видите phalcon сред другите разширения:

Структура на директория

Phalcon не изисква използването на конкретна йерархия на проекта, можете да използвате структурата, с която сте свикнали да работите, за да разработите приложение.

Например в този урок ще използваме следната структура:

Имайте предвид, че нямате нужда от директория като „библиотека“, за да хоствате рамката, Phalcon вече е наличен от паметта и е готов за използване.

Красиви URL адреси

Този урок използва разбираеми за човека URL адреси (NC). CNC са не само полезни за оптимизиране на търсачките, но също така улесняват потребителите да запомнят връзките. Поддръжката на CNC от вашето приложение не се изисква, вие сте свободни да разработите проект без тяхната подкрепа.

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

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

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

Бележка на преводача: От гледна точка на сигурността и производителността е по-ефективно да преместите приложението извън public_html, оставяйки налични само изображения, js и css. Но нека не се отклоняваме от примера.

Bootstrap (bootstrap)

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

Файлът public/index.php на Bootstrap изглежда така:

По-долу ще анализираме всяка част от този файл по-подробно.

Автоматично зареждане

Първата част от файла за инициализация е регистрацията на автоматичното зареждане. Използва се за зареждане на контролери и модели. Например, можем да регистрираме една или повече директории на контролери, увеличавайки гъвкавостта на приложението. В нашия пример се използва компонентът Phalcon\Loader.

Може да се използва за зареждане на класове с помощта на различни подходи, но в този пример избрахме да открием класове въз основа на предварително дефинирани директории.

Управление на зависимостите

Работейки с рамката на Phalcon, трябва да разберете концепцията за инжектиране на зависимости (wiki). Може да звучи сложно, но всъщност е много просто и практично.

Phalcon съдържа механизъм, който съхранява компонентите, необходими за работата на приложението и предоставя достъп до тях при поискване от рамката. Този механизъм е класът Phalcon\DI, който действа като връзка, обединявайки различни компоненти, за да работят заедно.

Phalcon\DI\FactoryDefault потомъкPhalcon\DI прилага инжектиране на зависимости. Той регистрира повечето от стандартните компоненти на рамката. Така че не е нужно да ги регистрираме един по един. Ако е необходимо, можете лесно да го замените със собствена реализация.

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

Последната част от този файл регистрира компонента Phalcon\Mvc\Application. Целта му е да инициализира средата за заявката, да обработи маршрута и да извърши подходящото действие за заявката. Той получава отговор от контролера и го връща, когато процесът приключи.

Както можете да видите, файлът за инициализация е доста прост и не е необходимо да включваме допълнителни файлове. Проправихме пътя за гъвкаво MVC приложение в по-малко от 30 реда код.

Контролер

По подразбиране Phalcon търси контролер и неговото действие, наречено „Индекс“. Той ще бъде изпълнен, ако в заявката не са посочени контролер и действие. Най-простият контролер изглежда така:

Класът на контролера има суфикс „Контролер“, а действието му трябва да има суфикс „Действие“. Ако отворите приложението в браузър, ще видите нещо подобно:

Поздравления, вие летите със сокол!

Преглед

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

В нашия случай това е app/views/index/index.phtml:

А самият контролер ( app/controllers/IndexController.php ) вече съдържа празно действие:

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

Формуляр за регистрация

Нека променим изгледа app/views/index/index.phtml, за да включим връзка към друг контролер за „регистрация“:

Генерираният HTML ще покаже таг с връзка към новия контролер:

Класът Phalcon\Tag беше използван за генериране на връзката. Този помощен клас ви позволява да създавате HTML според стандарта на рамката. Тук можете да намерите по-подробно описание на генерирането на HTML код.

Ето как изглежда новият контролер "Signup" ( app/controllers/SignupController.php ):

Празното действие „indexAction“ ви насочва директно към изгледа на формуляра ( app/views/signup/index.phtml ).

Когато отворите този контролер в браузър, ще видите нещо подобно:

Phalcon\Tag предоставя полезни методи за създаване на елементи на формуляр. В метода Phalcon\Tag::form ние предадохме пътя до контролера/действието на приложението, което ще обработва формуляра.

Като щракнете върху бутона „Регистрация“, ще видите изключение, хвърлено от рамката, което показва, че няма действие „регистриране“ в контролера „регистрация“.

PhalconException: Действието „register“ не беше намерено на контролера „signup“

Чрез прилагането на това действие ще се отървем от изключението:

При повторно изпращане на формуляра ще видите празна страница.

Името и имейлът, въведени от потребителя, трябва да се съхраняват в базата данни. В съответствие с принципите на MVC, взаимодействието с базата данни трябва да се осъществява от модела на приложениетоза предоставяне на чист обектно-ориентиран код.

Phalcon предоставя първата ORM за PHP, написана изцяло на C. Вместо да усложнява разработката, тя я опростява.

Преди да създадем първия си модел, трябва да имаме таблица в базата данни. Проста таблица за съхранение на регистрирани потребители може да изглежда така:

Моделът трябва да се намира в директорията app/models. Ето как ще изглежда моделът, осигуряващ достъп до таблицата „потребители“:

Връзка с база данни

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

Добавеният файл за зареждане (public/index.php) ще изглежда така:

Сега нашите модели са готови за работа и взаимодействие с останалата част от приложението.

Запазване на данни с помощта на модел

Следващата ни стъпка е да вземем данните от формата и да ги запишем в таблицата. Допълнете действието „регистриране“:

Никога не можете да се доверите на данните, получени от потребителя. Данните, предадени на нашето приложение, трябва да бъдат валидирани/филтрирани. Това ще направи приложението по-сигурно срещу атаки чрез SQL инжектиране.

Компонентът Phalcon\Filter прави тази задача лесна, тъй като се инжектира от контейнера за зависимости в извикването на метода getPost.

След това създаваме екземпляр на модела Users. Публичните свойства на модела съответстват на полетата на таблицата потребители. Чрез задаване на стойностите на новия модел и извикване на метода save() записваме в базата данни. Методът save() връща булева стойност, която ни информира далипроизведен запис.

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

За съжаление бяха генерирани следните проблеми: изисква се име изисква се имейл

Заключение

Този много прост урок има за цел да ви покаже колко лесно е да започнете да разработвате вашето приложение с PHP рамката на Phalcon. Фактът, че Phalcon е разширение на PHP, написано на C, изобщо не пречи на лекотата на разработка.

Каня ви да продължите да четете ръководството, което ще ви отвори допълнителни възможности, предлагани от Phalcon!

___ * Соколът е най-бързата птица и като цяло живо същество в света. Но, честно казано, заслужава да се отбележи, че в скоростта на хоризонталния полет соколът е по-нисък от бързия.

Hardcore conf в C++. Каним само професионалисти.