Nette Documentation Preview

syntax
Глоссарий терминов
******************


AJAX
----
Асинхронный JavaScript и XML — технология взаимодействия клиента и сервера по протоколу HTTP без необходимости перезагрузки всей страницы при каждом запросе. Несмотря на аббревиатуру, формат [#JSON] часто используется вместо XML.


Действие презентера .[#toc-presenter-action]
--------------------------------------------
Логическая часть [#presenter], выполняющая одно действие, например, показать страницу продукта, выписать пользователя и т. д. У одного презентера может быть несколько действий.


BOM
---
Так называемая *маска порядка байтов* — это специальный первый символ файла, который указывает порядок байтов в кодировке. Некоторые редакторы включают его автоматически, он практически незаметен, но он вызывает проблемы с заголовками и отправкой вывода из PHP. Для массового удаления можно использовать [Code Checker|code-checker:].


Контроллер .[#toc-controller]
-----------------------------
Контроллер обрабатывает запросы от пользователя и на их основе вызывает определенную логику приложения (т. е. [#Модель]), затем он вызывает [#Вид] для рендеринга данных. Аналогом контроллеров в фреймворке Nette являются [презентеры|#Presenter].


Межсайтовый скриптинг (XSS) .[#toc-cross-site-scripting-xss]
------------------------------------------------------------
Межсайтовый скриптинг - это метод нарушения работы сайта с использованием неэкранированного ввода. Злоумышленник может внедрить свой собственный код HTML или JavaScript и изменить внешний вид страницы или даже собрать конфиденциальную информацию о пользователях. Защита от XSS проста: последовательное и правильное экранирование всех строк и вводимых данных.

Nette Framework предлагает совершенно новую технологию [Context-Aware Escaping |latte:safety-first#Context-Aware-Escaping], которая навсегда избавит вас от рисков межсайтового скриптинга. Он автоматически экранирует все вводимые данные, основываясь на заданном контексте, поэтому кодер не сможет случайно что-то забыть.


Подделка межсайтовых запросов (CSRF) .[#toc-cross-site-request-forgery-csrf]
----------------------------------------------------------------------------
Атака Cross-Site Request Forgery заключается в том, что злоумышленник заманивает жертву посетить страницу, которая молча выполняет запрос в браузере жертвы к серверу, на котором жертва в данный момент зарегистрирована, и сервер считает, что запрос был сделан жертвой по собственному желанию. Сервер выполняет определенное действие под личностью жертвы, но без ее ведома. Это может быть изменение или удаление данных, отправка сообщения и т.д.

Nette Framework **автоматически защищает формы и сигналы в презентаторах** от этого типа атак. Это делается путем предотвращения их отправки или вызова из другого домена.


Инъекция зависимостей .[#toc-dependency-injection]
--------------------------------------------------
Инъекция зависимостей (DI) - это шаблон проектирования, который рассказывает, как отделить создание объектов от их зависимостей. То есть класс не отвечает за создание или инициализацию своих зависимостей, а вместо этого эти зависимости предоставляются внешним кодом (который может включать [контейнер DI |#Dependency Injection container]). Преимущество заключается в том, что это позволяет повысить гибкость кода, улучшить читаемость и упростить тестирование приложений, поскольку зависимости легко заменяются и изолированы от других частей кода. Для получения дополнительной информации см. раздел [Что такое инъекция зависимостей? |dependency-injection:introduction]


Контейнер инжекции зависимостей .[#toc-dependency-injection-container]
----------------------------------------------------------------------
Контейнер инъекции зависимостей (также DI контейнер или IoC контейнер) - это инструмент, который управляет созданием и управлением зависимостями в приложении (или [службах |#service]). Обычно контейнер имеет конфигурацию, которая определяет, какие классы зависят от других классов, какие конкретные реализации зависимостей использовать и как создавать эти зависимости. Затем контейнер создает эти объекты и предоставляет их классам, которые в них нуждаются. Для получения дополнительной информации см. раздел [Что такое контейнер DI? |dependency-injection:container]


Экранирование .[#toc-escaping]
------------------------------
Экранирование — это преобразование символов, имеющих особое значение в данном контексте, в другие эквивалентные последовательности. Пример: Мы хотим записать кавычки в заключенную в кавычки строку. Поскольку кавычки имеют особое значение в контексте заключенной в кавычки строки, необходимо использовать другую эквивалентную последовательность. Конкретная последовательность определяется правилами контекста (например, `\"` в заключенной в кавычки строке PHP, `"` в атрибутах HTML и т. д.).


Фильтр .[#toc-filter-formerly-helper]
-------------------------------------
Функция фильтрации. В шаблонах [filter |latte:syntax#Filters] — это функция, которая помогает изменить или отформатировать данные в выходную форму. В шаблонах предопределено несколько [стандартных фильтров |latte:filters].


Инвалидация .[#toc-invalidation]
--------------------------------
Уведомление о [сниппете |#SameSite-Cookie] для повторного рендеринга. В другом контексте также очистка кэша.


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


Компонент .[#toc-component]
---------------------------
Многократно используемая часть приложения. Это может быть визуальная часть страницы, как описано в главе [application:components], или этот термин может также обозначать класс [Component |component-model:] (такой компонент не обязательно должен быть визуальным).


Управляющие символы .[#toc-control-characters]
----------------------------------------------
Управляющие символы — это невидимые символы, которые могут встречаться в тексте и в конечном итоге вызывать некоторые проблемы. Для их массового удаления из файлов можно использовать [Code Checker|code-checker:], для удаления из переменной — функцию [Strings::normalize()|utils:strings#normalize].


События .[#toc-events]
----------------------
Событие - это ожидаемая ситуация в объекте, при наступлении которой вызываются так называемые обработчики, то есть обратные вызовы, реагирующие на событие ("образец":https://gist.github.com/dg/332cdd51bdf7d66a6d8003b134508a38). Событием может быть, например, отправка формы, вход пользователя в систему и т.д. Таким образом, события являются формой *инверсии управления*.

Например, вход пользователя в систему происходит в методе `Nette\Security\User::login()`. Объект `User` имеет публичную переменную `$onLoggedIn`, представляющую собой массив, в который каждый может добавить обратный вызов. Как только пользователь входит в систему, метод `login()` вызывает все обратные вызовы в массиве. Имя переменной в форме `onXyz` — это соглашение, используемое во всем Nette.


Latte
-----
Одна из самых инновационных [систем шаблонирования |latte:] за всю историю.


Модель .[#toc-model]
--------------------
Модель представляет собой данные и функциональную основу всего приложения. Она включает в себя всю логику приложения (иногда также называемую «бизнес-логикой»). Это **M** из **M**VC или MPV. Любое действие пользователя (вход в систему, помещение товара в корзину, изменение значения базы данных) представляет собой действие модели.

Модель управляет своим внутренним состоянием и предоставляет публичный интерфейс. Вызывая этот интерфейс, мы можем принимать или изменять его состояние. Модель не знает о существовании [Вида |#Вид] или [Контроллера |#Controller], она полностью независима от них.


Модель-Вид-Контроллер (MVC) .[#toc-model-view-controller]
---------------------------------------------------------
Архитектура программного обеспечения, возникшая при разработке GUI-приложений для отделения кода управления потоком ([#Контроллер]) от кода логики приложения ([#Модель]) и от кода рендеринга данных ([#Вид]). Таким образом, код становится более понятным, это облегчает будущую разработку и позволяет тестировать отдельные части отдельно.


Модель-Вид-Презентер (MVP) .[#toc-model-view-presenter]
-------------------------------------------------------
Архитектура, основанная на [#Модель-Вид-Контроллер (MVC)].


Модуль .[#toc-module]
---------------------
Модуль в фреймворке Nette представляет собой набор презентеров и шаблонов, в конечном итоге также компонентов и моделей, которые служат данными для презентера. Таким образом, это определенная логическая часть приложения.

Например, электронный магазин может состоять из трех модулей:
1) Каталог товаров с корзиной.
2) Администрирование для клиента.
3) Администрирование для владельца магазина.


Пространство имен .[#toc-namespace]
-----------------------------------
Пространство имен является особенностью языка PHP, начиная с версии 5.3, а также некоторых других языков программирования. Это помогает избежать столкновений имен (например, два класса с одинаковым именем) при совместном использовании различных библиотек. Более подробную информацию смотрите в [документации PHP |https://www.php.net/manual/ru/language.namespaces.rationale.php].


Презентер .[#toc-presenter]
---------------------------
Презентер — это объект, который принимает [запрос |api:Nette\Application\Request], переведенный маршрутизатором из HTTP-запроса, и генерирует [ответ |api:Nette\Application\Response]. Ответом может быть HTML-страница, картинка, XML-документ, файл, JSON, перенаправление или всё, что вы придумаете.

Под презентером обычно подразумевается потомок класса [api:Nette\Application\UI\Presenter]. По запросам он выполняет соответствующие [действия |application:presenters#Life-Cycle-of-Presenter] и рендерит шаблоны.


Роутер .[#toc-router]
---------------------
Двунаправленный переводчик между HTTP-запросом / URL и действием презентера. Двунаправленность означает, что можно не только получить [#Действие презентера] из HTTP-запроса, но и сгенерировать соответствующий URL для действия. См. подробнее в главе об [URL-маршрутизации |application:routing].


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


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


Фрагмент .[#toc-snippet]
------------------------
Фрагмент страницы, который может быть отдельно повторно отображен во время [AJAX-запроса |#AJAX].


Посмотреть .[#toc-view]
-----------------------
Представление - это слой приложения, который отвечает за отрисовку результатов запроса. Обычно он использует систему шаблонов и знает, как отобразить свои компоненты или результаты, взятые из модели.



{{leftbar: www:@menu-common}}
{{priority: -2}}

Глоссарий терминов

AJAX

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

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

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

BOM

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

Контроллер

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

Межсайтовый скриптинг (XSS)

Межсайтовый скриптинг – это метод нарушения работы сайта с использованием неэкранированного ввода. Злоумышленник может внедрить свой собственный код HTML или JavaScript и изменить внешний вид страницы или даже собрать конфиденциальную информацию о пользователях. Защита от XSS проста: последовательное и правильное экранирование всех строк и вводимых данных.

Nette Framework предлагает совершенно новую технологию Context-Aware Escaping, которая навсегда избавит вас от рисков межсайтового скриптинга. Он автоматически экранирует все вводимые данные, основываясь на заданном контексте, поэтому кодер не сможет случайно что-то забыть.

Подделка межсайтовых запросов (CSRF)

Атака Cross-Site Request Forgery заключается в том, что злоумышленник заманивает жертву посетить страницу, которая молча выполняет запрос в браузере жертвы к серверу, на котором жертва в данный момент зарегистрирована, и сервер считает, что запрос был сделан жертвой по собственному желанию. Сервер выполняет определенное действие под личностью жертвы, но без ее ведома. Это может быть изменение или удаление данных, отправка сообщения и т.д.

Nette Framework автоматически защищает формы и сигналы в презентаторах от этого типа атак. Это делается путем предотвращения их отправки или вызова из другого домена.

Инъекция зависимостей

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

Контейнер инжекции зависимостей

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

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

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

Фильтр

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

Инвалидация

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

JSON

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

Компонент

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

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

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

События

Событие – это ожидаемая ситуация в объекте, при наступлении которой вызываются так называемые обработчики, то есть обратные вызовы, реагирующие на событие (образец). Событием может быть, например, отправка формы, вход пользователя в систему и т.д. Таким образом, события являются формой инверсии управления.

Например, вход пользователя в систему происходит в методе Nette\Security\User::login(). Объект User имеет публичную переменную $onLoggedIn, представляющую собой массив, в который каждый может добавить обратный вызов. Как только пользователь входит в систему, метод login() вызывает все обратные вызовы в массиве. Имя переменной в форме onXyz — это соглашение, используемое во всем Nette.

Latte

Одна из самых инновационных систем шаблонирования за всю историю.

Модель

Модель представляет собой данные и функциональную основу всего приложения. Она включает в себя всю логику приложения (иногда также называемую «бизнес-логикой»). Это M из MVC или MPV. Любое действие пользователя (вход в систему, помещение товара в корзину, изменение значения базы данных) представляет собой действие модели.

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

Модель-Вид-Контроллер (MVC)

Архитектура программного обеспечения, возникшая при разработке GUI-приложений для отделения кода управления потоком (Контроллер) от кода логики приложения (Модель) и от кода рендеринга данных (Вид). Таким образом, код становится более понятным, это облегчает будущую разработку и позволяет тестировать отдельные части отдельно.

Модель-Вид-Презентер (MVP)

Архитектура, основанная на Модель-Вид-Контроллер (MVC).

Модуль

Модуль в фреймворке Nette представляет собой набор презентеров и шаблонов, в конечном итоге также компонентов и моделей, которые служат данными для презентера. Таким образом, это определенная логическая часть приложения.

Например, электронный магазин может состоять из трех модулей:

  1. Каталог товаров с корзиной.
  2. Администрирование для клиента.
  3. Администрирование для владельца магазина.

Пространство имен

Пространство имен является особенностью языка PHP, начиная с версии 5.3, а также некоторых других языков программирования. Это помогает избежать столкновений имен (например, два класса с одинаковым именем) при совместном использовании различных библиотек. Более подробную информацию смотрите в документации PHP.

Презентер

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

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

Роутер

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

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

Сервис

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

Фрагмент

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

Посмотреть

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