Речник на термините
AJAX
Asynchronous JavaScript and XML – технология за обмен на информация между клиента и сървъра чрез HTTP протокол без необходимост от презареждане на цялата страница при всяка заявка. Въпреки че от името може да изглежда, че изпраща данни само във формат XML, често се използва и форматът JSON.
Действие на presenter
Логическа част на presenter-а, която изпълнява едно действие. Например, показва страница на продукт, излиза от системата потребител и т.н. Един presenter може да има няколко действия.
BOM
Така нареченият byte order mark е специален първи знак във файла, който се използва като индикатор за реда на байтовете в кодирането. Някои редактори го вмъкват във файловете. Той е практически невидим, но причинява проблеми с изпращането на изход и хедъри от PHP. За масово премахване можете да използвате Code Checker.
Controller
Контролер, който обработва заявките на потребителя и въз основа на тях извиква съответната логика на приложението (т.е. модел) и след това изисква от изглед да изобрази данните. Аналог на контролерите в Nette Framework са presenter-ите.
Cross-Site Scripting (XSS)
Cross-Site Scripting е метод за нарушаване на уеб страници, който използва необработени изходи. Нападателят може да вмъкне свой собствен код в страницата и по този начин да я промени или дори да получи чувствителни данни за посетителите. Защитата срещу XSS е възможна само чрез последователна и коректна обработка на всички низове.
Nette Framework идва с революционна технология Context-Aware Escaping, която завинаги ще ви отърве от риска от Cross-Site Scripting. Тя обработва всички изходи автоматично, така че програмистът не може да забрави нещо.
Cross-Site Request Forgery (CSRF)
Атаката Cross-Site Request Forgery се състои в това, че нападателят примамва жертвата към страница, която незабелязано в браузъра на жертвата изпълнява заявка към сървъра, на който жертвата е влязла, и сървърът смята, че заявката е изпълнена от жертвата по нейна воля. Така под самоличността на жертвата се извършва определено действие, без тя да знае за това. Това може да бъде промяна или изтриване на данни, изпращане на съобщение и т.н.
Nette Framework автоматично защитава формите и сигналите в presenter-ите от този тип атака. Това става чрез предотвратяване на тяхното изпращане или извикване от друг домейн.
Dependency Injection
Dependency Injection (DI) е патърн за дизайн, който указва как да се отдели създаването на обекти от техните зависимости. Тоест, класът не е отговорен за създаването или инициализирането на своите зависимости, а вместо това тези зависимости му се предоставят от външен код (това може да бъде и DI контейнер). Предимството се състои в това, че позволява по-голяма гъвкавост на кода, по-добра разбираемост и по-лесно тестване на приложението, тъй като зависимостите са лесно заменяеми и изолирани от останалите части на кода. Повече в главата Какво е Dependency Injection?
Dependency Injection контейнер
Dependency Injection контейнер (също DI контейнер или IoC контейнер) е инструмент, който се грижи за създаването и управлението на зависимостите в приложението (или сървиси). Контейнерът обикновено има конфигурация, която дефинира кои класове зависят от други класове, кои конкретни имплементации на зависимости трябва да се използват и как трябва да се създават тези зависимости. След това контейнерът създава тези обекти и ги предоставя на класовете, които ги нуждаят. Повече в главата Какво е DI контейнер?
Екраниране
Екранирането е преобразуване на знаци, които имат специално значение в даден контекст, в други съответстващи последователности. Пример: в низ, ограден с кавички, искаме да запишем кавички. Тъй като кавичките имат специално значение в контекста на низа и простото им записване би се разбрало като край на низа, е необходимо да се запишат с друга съответстваща последователност. Коя точно, определят правилата на контекста.
Филтър (преди helper)
В шаблоните под понятието филтър обикновено се разбира функция, която помага да се модифицират или преформатират данните в крайната им форма. Шаблоните разполагат с няколко стандартни филтъра.
Инвалидиране
Уведомяване на snippet, за да се прерисува. В друг смисъл също изтриване на съдържанието на кеша.
JSON
Формат за обмен на данни, базиран на синтаксиса на JavaScript (е негово подмножество). Точната спецификация можете да намерите на страницата www.json.org.
Компонент
Компонент за многократна употреба в приложението. Може да бъде визуална част от страницата, както е описано в главата Писане на компоненти, или под понятието компонент се разбира също клас Component (такъв компонент не е задължително да бъде визуален).
Контролни знаци
Контролните знаци са невидими знаци, които могат да се срещат в текста и евентуално да причиняват проблеми. За масовото им премахване от файлове можете да използвате Code Checker, а за премахване от променлива – функцията Strings::normalize().
Събития (events)
Събитие е очаквана ситуация в обект, която когато настъпи, се извикват т.нар. хендлъри, т.е. callback-ове, реагиращи на събитието (пример). Събитие може да бъде например изпращане на форма, влизане на потребител и т.н. Събитията са форма на Inversion of Control.
Например, влизането на потребител се случва в метода
Nette\Security\User::login()
. Обектът User
има публична променлива
$onLoggedIn
, която е масив, към който всеки може да добави callback. В
момента, в който потребителят влезе, методът login()
извиква всички
callback-ове в масива. Името на променливата във формата onXyz
е
конвенция, използвана в цял Nette.
Latte
Една от най-напредналите системи за шаблони.
Model
Моделът е данновата и особено функционалната основа на цялото приложение. Той съдържа цялата логика на приложението (използва се и терминът бизнес логика). Това е M от MVC или MVP. Всяко действие на потребителя (влизане, добавяне на стока в количката, промяна на стойност в базата данни) представлява действие на модела.
Моделът управлява своето вътрешно състояние и предлага навън строго определен интерфейс. Чрез извикване на функциите на този интерфейс можем да проверяваме или променяме неговото състояние. Моделът не знае за съществуването на изглед или контролера.
Model-View-Controller
Софтуерна архитектура, възникнала от необходимостта да се отдели кодът за управление (контролер) от кода на логиката на приложението (модел) и от кода за показване на данни (изглед) в приложения с графичен интерфейс. Това изяснява приложението, улеснява бъдещото развитие и позволява тестването на отделните части поотделно.
Model-View-Presenter
Архитектура, базирана на Model-View-Controller.
Модул
Модулът представлява логическа част от приложението. В типична
подредба това е група от presenter-и и шаблони, които решават определена
област на функционалност. Модулите се поставят в отделни директории,
като например Front/
, Admin/
или Shop/
.
Например, електронен магазин можем да разделим на:
- Frontend (
Shop/
) за разглеждане на продукти и пазаруване - Клиентска секция (
Customer/
) за управление на поръчки - Администрация (
Admin/
) за оператора
Технически това са обикновени директории, които обаче благодарение
на ясното разделение помагат за мащабирането на приложението. Presenter
Admin:Product:List
така ще бъде физически разположен например в
директорията app/Presentation/Admin/Product/List/
(виж картографиране на
presenter-и).
Namespace
Именно пространство, част от езика PHP от версия 5.3 и някои други програмни езици, позволяващо използването на класове, които са наречени еднакво в различни библиотеки, без да възникне колизия на имена. Вижте документацията на PHP.
Presenter
Presenter е обект, който взема заявка, преведена от рутера от HTTP заявка, и генерира отговор. Отговорът може да бъде HTML страница, изображение, XML документ, файл на диска, JSON, пренасочване или каквото и да измислите.
Обикновено под понятието presenter се разбира наследник на класа Nette\Application\UI\Presenter. Според входящите заявки той стартира съответните действия и рендира шаблони.
Рутер
Двупосочен преводач между HTTP заявка / URL и действие на presenter. Двупосочно означава, че от HTTP заявка може да се изведе действие на presenter, но също така и обратно – към действието да се генерира съответстващ URL адрес. Повече в главата за маршрутизиране на URL.
SameSite cookie
SameSite бисквитките предоставят механизъм за разпознаване на това,
което е довело до зареждането на страницата. Може да има три стойности:
Lax
, Strict
и None
(последният изисква HTTPS). Ако заявката
за страницата идва директно от уебсайта или потребителят отвори
страницата чрез директно въвеждане в адресната лента или чрез
кликване върху отметка, браузърът изпраща на сървъра всички бисквитки
(т.е. с флагове Lax
, Strict
и None
). Ако потребителят
кликне върху връзка от друг уебсайт, на сървъра се предават бисквитки с
флагове Lax
и None
. Ако заявката възникне по друг начин, като
изпращане на POST форма от друг уебсайт, зареждане в iframe, чрез JavaScript и т.н.,
се изпращат само бисквитки с флаг None
.
Сървис
В контекста на Dependency Injection като сървис се означава обект, който се създава и управлява от DI контейнера. Сървисът може лесно да бъде заменен с друга имплементация, например за целите на тестване или за промяна на поведението на приложението, без да е необходимо да се променя кодът, който използва сървиса.
Snippet
Фрагмент, част от страницата, която може да се прерисува самостоятелно по време на AJAX заявка.
View
View, т.е. изглед, е слоят на приложението, който отговаря за показването на резултата от заявката. Обикновено използва система за шаблони и знае как да покаже даден компонент или резултат, получен от модела.