Glossário de Termos
AJAX
Asynchronous JavaScript and XML – tecnologia de troca de informações entre cliente e servidor via protocolo HTTP sem a necessidade de recarregar a página inteira a cada requisição. Embora o nome possa sugerir que envia dados apenas no formato XML, o formato JSON também é comumente usado.
Ação (do presenter)
Parte lógica do presenter que executa uma ação. Por exemplo, exibe a página do produto, desloga o usuário, etc. Um presenter pode ter várias ações.
BOM
O chamado byte order mark é um caractere especial no início de um arquivo, usado como indicador da ordem dos bytes na codificação. Alguns editores o inserem nos arquivos. É praticamente invisível, mas causa problemas com o envio de saída e cabeçalhos do PHP. Para remoção em massa, você pode usar o Code Checker.
Controller
Controlador que processa as requisições do usuário e, com base nelas, chama a lógica da aplicação apropriada (ou seja, model) e, em seguida, solicita ao view a renderização dos dados. O equivalente aos controllers no Nette Framework são os presenters.
Cross-Site Scripting (XSS)
Cross-Site Scripting é um método de violação de sites que explora saídas não tratadas. O invasor pode então injetar seu próprio código na página e, assim, modificá-la ou até mesmo obter dados confidenciais dos visitantes. A única maneira de se defender contra XSS é tratar todas as strings de forma consistente e correta.
O Nette Framework vem com uma tecnologia revolucionária Context-Aware Escaping, que o livrará para sempre do risco de Cross-Site Scripting. Ele trata todas as saídas automaticamente, para que não haja chance de o codificador esquecer algo.
Cross-Site Request Forgery (CSRF)
O ataque Cross-Site Request Forgery consiste em o invasor atrair a vítima para uma página que executa discretamente uma requisição no navegador da vítima para um servidor no qual a vítima está logada, e o servidor acredita que a requisição foi feita pela vítima por vontade própria. Assim, sob a identidade da vítima, realiza uma determinada ação sem que ela saiba. Pode ser a alteração ou exclusão de dados, envio de uma mensagem, etc.
O Nette Framework protege automaticamente formulários e sinais nos presenters contra este tipo de ataque. Isso é feito impedindo que sejam enviados ou acionados de outro domínio.
Dependency Injection
Dependency Injection (DI) é um padrão de projeto que diz como separar a criação de objetos de suas dependências. Ou seja, a classe não é responsável por criar ou inicializar suas dependências, mas, em vez disso, essas dependências são fornecidas a ela por código externo (que pode ser um Contêiner de DI). A vantagem é que permite maior flexibilidade do código, melhor legibilidade e testes mais fáceis da aplicação, pois as dependências são facilmente substituíveis e isoladas de outras partes do código. Mais no capítulo O que é Injeção de Dependência?
Contêiner de DI
Contêiner de Injeção de Dependência (também Contêiner de DI ou Contêiner IoC) é uma ferramenta que cuida da criação e gerenciamento de dependências na aplicação (ou seja, serviços). O contêiner geralmente tem uma configuração que define quais classes dependem de outras classes, quais implementações específicas de dependências devem ser usadas e como essas dependências devem ser criadas. Em seguida, o contêiner cria esses objetos e os fornece às classes que precisam deles. Mais no capítulo O que é um Contêiner de DI?
Escaping
Escaping é a conversão de caracteres que têm um significado especial em um determinado contexto para outras sequências correspondentes. Exemplo: queremos escrever aspas em uma string delimitada por aspas. Como as aspas têm um significado especial no contexto da string e sua simples escrita seria entendida como o fim da string, é necessário escrevê-las usando outra sequência correspondente. Qual exatamente é determinada pelas regras do contexto.
Filtro (Latte)
Nos templates, o termo filtro geralmente se refere a uma função que ajuda a modificar ou reformatar dados para a forma final. Os templates possuem vários filtros padrão.
Invalidação
Notificação para um snippet para que ele seja redesenhado. Em outro sentido, também a exclusão do conteúdo do cache.
JSON
Formato para troca de dados baseado na sintaxe JavaScript (é um subconjunto dela). A especificação exata pode ser encontrada em www.json.org.
Componente
Parte reutilizável da aplicação. Pode ser uma parte visual da página, como descrito no capítulo Escrevendo Componentes, ou o termo componente também se refere à classe Component (tal componente não precisa ser visual).
Caracteres de controle
Caracteres de controle são caracteres invisíveis que podem ocorrer no texto e, eventualmente, causar problemas. Para sua remoção em massa de arquivos, você pode usar o Code Checker e para remover de uma variável, a função Strings::normalize().
Eventos
Um evento é uma situação esperada em um objeto, que quando ocorre, chama os chamados handlers, ou seja, callbacks que reagem ao evento (exemplo). Um evento pode ser, por exemplo, o envio de um formulário, o login de um usuário, etc. Os eventos são, portanto, uma forma de Inversion of Control.
Por exemplo, o login do usuário ocorre no método Nette\Security\User::login()
. O objeto User
tem
uma variável pública $onLoggedIn
, que é um array ao qual qualquer um pode adicionar um callback. No momento em que
o usuário faz login, o método login()
chama todos os callbacks no array. O nome da variável no formato
onXyz
é uma convenção usada em todo o Nette.
Latte
Um dos mais avançados sistemas de template.
Model
O modelo é a base de dados e, especialmente, funcional de toda a aplicação. Contém toda a lógica da aplicação (o termo lógica de negócios também é usado). É o M de MVC ou MVP. Qualquer ação do usuário (login, adicionar item ao carrinho, alterar valor no banco de dados) representa uma ação do modelo.
O modelo gerencia seu estado interno e oferece uma interface fixa para o exterior. Chamando as funções desta interface, podemos consultar ou alterar seu estado. O modelo não sabe da existência do view ou do controller.
Model-View-Controller
Arquitetura de software que surgiu da necessidade de separar, em aplicações com interface gráfica, o código de manipulação (controller) do código da lógica da aplicação (model) e do código que exibe os dados (view). Isso torna a aplicação mais clara, facilita o desenvolvimento futuro e permite testar partes individuais separadamente.
Model-View-Presenter
Arquitetura baseada no Model-View-Controller.
Módulo
Um módulo representa uma parte lógica da aplicação. Em um arranjo típico, é um grupo de presenters e templates que lidam
com uma área específica de funcionalidade. Colocamos os módulos em diretórios separados, como
Front/
, Admin/
ou Shop/
.
Por exemplo, dividimos uma loja virtual em:
- Frontend (
Shop/
) para visualização de produtos e compra - Seção do cliente (
Customer/
) para gerenciamento de pedidos - Administração (
Admin/
) para o operador
Tecnicamente, são diretórios comuns, mas graças à organização clara, ajudam a escalar a aplicação. O presenter
Admin:Product:List
estará fisicamente localizado, por exemplo, no diretório
app/Presentation/Admin/Product/List/
(veja mapeamento de presenters).
Namespace
Namespace, parte da linguagem PHP desde a versão 5.3 e algumas outras linguagens de programação, permitindo o uso de classes que são nomeadas da mesma forma em diferentes bibliotecas sem causar conflito de nomes. Veja a documentação do PHP.
Presenter
Presenter é um objeto que pega a requisição traduzida pelo roteador da requisição HTTP e gera uma resposta. A resposta pode ser uma página HTML, imagem, documento XML, arquivo em disco, JSON, redirecionamento ou qualquer coisa que você inventar.
Geralmente, o termo presenter se refere a um descendente da classe Nette\Application\UI\Presenter. De acordo com as requisições recebidas, ele executa as ações correspondentes e renderiza os templates.
Roteador
Tradutor bidirecional entre requisição HTTP / URL e ação do presenter. Bidirecional significa que a partir da requisição HTTP é possível derivar a ação do presenter, mas também o inverso, gerar a URL correspondente para a ação. Mais no capítulo sobre roteamento de URL.
SameSite cookie
Os cookies SameSite fornecem um mecanismo para reconhecer o que levou ao carregamento da página. Pode ter três valores:
Lax
, Strict
e None
(este requer HTTPS). Se a requisição para a página vier diretamente
do site ou o usuário abrir a página digitando diretamente na barra de endereços ou clicando em um favorito, o navegador
enviará todos os cookies ao servidor (ou seja, com os sinalizadores Lax
, Strict
e None
).
Se o usuário clicar em um link de outro site para acessar o site, os cookies com os sinalizadores Lax
e
None
serão passados para o servidor. Se a requisição surgir de outra forma, como o envio de um formulário POST
de outro site, carregamento dentro de um iframe, usando JavaScript, etc., apenas os cookies com o sinalizador None
serão enviados.
Serviço
No contexto da Injeção de Dependência, um serviço refere-se a um objeto que é criado e gerenciado pelo contêiner de DI. Um serviço pode ser facilmente substituído por outra implementação, por exemplo, para fins de teste ou para alterar o comportamento da aplicação, sem a necessidade de modificar o código que usa o serviço.
Snippet
Fragmento, parte da página que pode ser redesenhada separadamente durante uma requisição AJAX.
View
View, ou visão, é a camada da aplicação responsável por exibir o resultado da requisição. Geralmente usa um sistema de templates e sabe como exibir um determinado componente ou o resultado obtido do modelo.