Словарь терминов

AJAX

Asynchronous JavaScript and XML — технология обмена информацией между клиентом и сервером по протоколу HTTP без необходимости перезагрузки всей страницы при каждом запросе. Хотя из названия может показаться, что данные передаются только в формате XML, обычно используется и формат JSON.

Действие презентера

Логическая часть презентера, выполняющая одно действие. Например, отображение страницы продукта, выход пользователя из системы и т.д. Один презентер может иметь несколько действий.

BOM

Так называемая byte order mark — это специальный первый символ в файле, который используется как индикатор порядка байтов в кодировке. Некоторые редакторы вставляют его в файлы. Он практически невидим, но вызывает проблемы с отправкой вывода и заголовков из PHP. Для массового удаления можно использовать Code Checker.

Контроллер

Контроллер, который обрабатывает запросы пользователя и на их основе вызывает соответствующую логику приложения (т.е. модель), а затем запрашивает у представления отрисовку данных. Аналогом контроллеров в Nette Framework являются презентеры.

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 автоматически защищает формы и сигналы в презентерах от этого типа атак. Это делается путем предотвращения их отправки или вызова из другого домена.

Внедрение зависимостей (Dependency Injection)

Внедрение зависимостей (DI) — это шаблон проектирования, который описывает, как отделить создание объектов от их зависимостей. То есть класс не несет ответственности за создание или инициализацию своих зависимостей, а вместо этого эти зависимости предоставляются ему внешним кодом (это может быть и DI-контейнер). Преимущество заключается в том, что это обеспечивает большую гибкость кода, лучшую понятность и упрощает тестирование приложения, поскольку зависимости легко заменяемы и изолированы от других частей кода. Подробнее в главе Что такое внедрение зависимостей?

DI-контейнер (Dependency Injection container)

DI-контейнер (также DI-контейнер или IoC-контейнер) — это инструмент, который управляет созданием и управлением зависимостями в приложении (или сервисов). Контейнер обычно имеет конфигурацию, которая определяет, какие классы зависят от других классов, какие конкретные реализации зависимостей следует использовать и как эти зависимости должны создаваться. Затем контейнер создает эти объекты и предоставляет их классам, которые в них нуждаются. Подробнее в главе Что такое DI-контейнер?

Экранирование

Экранирование — это преобразование символов, имеющих специальное значение в данном контексте, в другие соответствующие последовательности. Пример: мы хотим записать кавычки в строку, заключенную в кавычки. Поскольку кавычки имеют специальное значение в контексте строки, и их простое написание было бы воспринято как конец строки, их необходимо записать другой соответствующей последовательностью. Какая именно последовательность — определяется правилами контекста.

Фильтр (ранее helper)

В шаблонах под понятием фильтр обычно понимается функция, которая помогает изменить или переформатировать данные в конечный вид. Шаблоны имеют несколько стандартных фильтров.

Инвалидация

Уведомление сниппета о необходимости перерисовки. В другом значении также удаление содержимого кеша.

JSON

Формат обмена данными, основанный на синтаксисе JavaScript (является его подмножеством). Точную спецификацию можно найти на странице www.json.org.

Компонент

Повторно используемая часть приложения. Это может быть визуальная часть страницы, как описано в главе Написание компонентов, или под понятием компонент также понимается класс Component (такой компонент не обязательно должен быть визуальным).

Управляющие символы

Управляющие символы — это невидимые символы, которые могут встречаться в тексте и иногда вызывать проблемы. Для их массового удаления из файлов можно использовать Code Checker, а для удаления из переменной — функцию Strings::normalize().

События (Events)

Событие — это ожидаемая ситуация в объекте, при возникновении которой вызываются так называемые обработчики (handlers), то есть обратные вызовы (callbacks), реагирующие на событие (пример). Событием может быть, например, отправка формы, вход пользователя в систему и т.д. Таким образом, события являются формой 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.

Модуль (Module)

Модуль представляет собой логическую часть приложения. В типичной структуре это группа презентеров и шаблонов, которые решают определенную область функциональности. Модули размещаются в отдельных каталогах, таких как Front/, Admin/ или Shop/.

Например, интернет-магазин можно разделить на:

  • Фронтенд (Shop/) для просмотра товаров и покупок
  • Клиентскую секцию (Customer/) для управления заказами
  • Администрирование (Admin/) для оператора

Технически это обычные каталоги, которые, однако, благодаря четкому разделению помогают масштабировать приложение. Презентер Admin:Product:List физически будет расположен, например, в каталоге app/Presentation/Admin/Product/List/ (см. сопоставление презентеров).

Пространство имен (Namespace)

Пространство имен, часть языка PHP с версии 5.3 и некоторых других языков программирования, позволяющая использовать классы с одинаковыми именами в разных библиотеках без конфликта имен. См. документацию PHP.

Презентер (Presenter)

Презентер — это объект, который принимает запрос, преобразованный маршрутизатором из HTTP-запроса, и генерирует ответ. Ответом может быть HTML-страница, изображение, XML-документ, файл на диске, JSON, перенаправление или что угодно, что вы придумаете.

Обычно под понятием презентер подразумевается потомок класса Nette\Application\UI\Presenter. В зависимости от входящих запросов он запускает соответствующие действия и отрисовывает шаблоны.

Маршрутизатор (Router)

Двунаправленный преобразователь между HTTP-запросом / URL и действием презентера. Двунаправленный означает, что из HTTP-запроса можно вывести действие презентера, а также наоборот, для действия сгенерировать соответствующий URL. Подробнее в главе о маршрутизации URL.

SameSite cookies предоставляют механизм для определения того, что привело к загрузке страницы. Он может иметь три значения: Lax, Strict и None (последний требует HTTPS). Если запрос на страницу поступает непосредственно с сайта или пользователь открывает страницу, введя ее непосредственно в адресную строку или щелкнув по закладке, браузер отправляет серверу все файлы cookie (т.е. с флагами Lax, Strict и None). Если пользователь переходит на сайт по ссылке с другого сайта, серверу передаются файлы cookie с флагами Lax и None. Если запрос возникает другим способом, например, при отправке POST-формы с другого сайта, загрузке внутри iframe, с помощью JavaScript и т.д., отправляются только файлы cookie с флагом None.

Сервис (Service)

В контексте внедрения зависимостей сервисом называется объект, который создается и управляется DI-контейнером. Сервис может быть легко заменен другой реализацией, например, для целей тестирования или для изменения поведения приложения без необходимости изменять код, использующий сервис.

Сниппет (Snippet)

Фрагмент, часть страницы, которую можно перерисовать отдельно во время AJAX-запроса.

Представление (View)

View, то есть представление, — это слой приложения, отвечающий за отображение результата запроса. Обычно он использует систему шаблонов и знает, как отобразить тот или иной компонент или результат, полученный из модели.

версия: 4.0