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 * :
- O navegador está apontado para um URL,
- O servidor da Web captura a solicitação e a encaminha para um ponto de entrada comum, geralmente um
index.php
script,
index.php
obtém o URL e inicia o processo de roteamento.
- 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,
- Se existir uma classe de controlador que corresponda ao primeiro parâmetro, um objeto do controlador será instanciado,
- 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 $route
matriz mantém os padrões como chaves e as ações resultantes como valores em controller/action_method/dynamic_parameter
formato.
* Isso não pretende ser uma descrição do processo canônico, apenas uma explicação simplificada.