Com estruturas PHP, por que o conceito de "rota" é usado?


31

A razão pela qual pergunto isso é porque um script PHP não é uma rota? Por exemplo, se você possui um article.php, sua rota é simplesmente http://mysite.com/article.php .

Por que abstrair ainda mais o conceito de uma rota quando ela já existe como um arquivo simples?

Respostas:


44

Para entender o que um roteador faz, você deve primeiro entender o que é um mecanismo de reescrita. Do artigo da Wikipedia (ênfase minha):

Um mecanismo de reescrita é um software que modifica a aparência de uma URL da Web (reescrita de URL). URLs reescritos (às vezes conhecidos como URLs curtos, sofisticados ou compatíveis com mecanismos de pesquisa - SEF) são usados ​​para fornecer links mais curtos e relevantes para as páginas da Web. A técnica adiciona um grau de separação entre os arquivos usados ​​para gerar uma página da Web e a URL que é apresentada ao mundo .

Quando um mecanismo de reescrita é usado, você não tem uma correlação 1: 1 entre a URL e um script PHP. Um exemplo do mesmo artigo:

http://example.com/wiki/index.php?title=Page_title

pode ser reescrito como:

http://example.com/wiki/Page_title

Existem vários benefícios em usar a técnica. Como o PHP geralmente é fortemente associado ao Apache, o mecanismo de reescrita mais usado é o mod_rewrite do Apache .

Se você deseja reescrever URLs, precisa de algum tipo de roteamento, pois o roteamento é o processo de pegar o URL, dividi-lo em componentes e decidir qual é o script real a ser chamado. A página de documentação do roteador padrão do Zend Framework explica o processo como:

O roteamento é o processo de obter um ponto de extremidade do URI (a parte do URI que vem após a URL base) e decompô-lo em parâmetros para determinar qual módulo, controlador e ação desse controlador deve receber a solicitação.

Atualmente, a maioria das estruturas PHP são baseadas no padrão MVC e, em uma estrutura MVC, o processo é mais ou menos assim * :

  1. O navegador está apontado para um URL,
  2. O servidor da Web captura a solicitação e a encaminha para um ponto de entrada comum, geralmente um index.phpscript,
  3. index.php obtém o URL e inicia o processo de roteamento.
  4. O URL é decomposto em parâmetros, onde o primeiro é o controlador, o segundo é o método de ação e o restante são considerados parâmetros dinâmicos,
  5. Se existir uma classe de controlador que corresponda ao primeiro parâmetro, um objeto do controlador será instanciado,
  6. O método de ação que geralmente é uma função do objeto do controlador é chamado e seu retorno é o que realmente retornou ao navegador.

A correspondência de parâmetros com controladores e métodos geralmente emprega a correspondência por meio de expressões regulares para poder lidar com padrões de roteamento complexos e dinâmicos, conhecidos como rotas. Bons exemplos de rotas podem ser encontrados na página de documentação de Roteamento de URI do CodeIgniter :

$ route ['journals'] = "blogs";

$ route ['blog / joe'] = "blogs / usuários / 34";

$ route ['product / (: any)'] = "catalog / product_lookup";

$ route ['product / (: num)'] = "catalog / product_lookup_by_id / $ 1";

A $routematriz mantém os padrões como chaves e as ações resultantes como valores em controller/action_method/dynamic_parameterformato.

* Isso não pretende ser uma descrição do processo canônico, apenas uma explicação simplificada.


15
Deveria haver um distintivo para descrever um roteador mvc sem usar nenhum derivado de "dispatch" ...
— yannis
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.