Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, eu estou criando esse tópico com o intuito de mostrar o que eu sei sobre o sistema de rotas (routing) e tentar saber qual a visão de vocês sobre o mesmo.
Já foram criados dois tópicos distintos sobre o assunto, tópicos com assuntos diferentes mas que acabaram chegando no tema.
Um era meu, sobre a questão da organização do código, onde eu comecei o tópico querendo saber dos membros mais avançados na programação com o PHP Orientado a Objeto algumas dúvidas que eu tinha, e o código de exemplo que eu tinha colocado era um sistema de rotas simples, onde foi discutido algumas coisas e chegamos há algumas conclusões. – Quem quiser fazer a leitura como complemento, segue o link (http://forum.imasters.com.br/topic/504477-orientao-a-objetos/)
O outro tópico foi do membro @dedas, onde ele deixou claro que está criando um sistema de rotas para a aplicação dele. (http://forum.imasters.com.br/topic/504724-abstrao/)
O porque eu estou iniciando esse tópico?
Simples, o assunto é único, sistema de rotas (routing).
De ontem para hoje eu analisei muitos códigos e lembrei de outros códigos que eu já tinha olhado, e cada um interpreta o sistema de rotas de uma forma diferente.
Por exemplo:
No Code Igniter, como foi discutido no primeiro tópico utiliza um tipo “antigo” de rotas, onde as rotas podem ser definidas por configuração de usuário, ou o sistema automaticamente faz o roteamento utilizando a url.
O Code Igniter tem um sistema de configuração de rotas dessa forma:
$route['product/(:num)'] = "catalog/product_lookup_by_id/$1";
Onde as rotas são definidas em uma variável chamada $route e logo em seguida passado como atribuição o controller/action/ e parâmetros utilizando wildcards (:num) – exemplo.
Explicando o sistema de router do Code Igniter no meu ponto de vista:
O sistema de router do Code Igniter ele utiliza dos números mágicos para fazer a separação de quem é o controller, action e parâmetros. Exemplo: $controller = $uri_splitted[0]; - Da mesma forma que eu fiz primeiro tópico.
Um padrão comum entre frameworks “antigos”.
Mas porque antigo?
Existem alguns frameworks que utilizam essa forma de definição de rotas:
"/blog/:num" => array(
"controller" => "blog",
"action" => "post",
"params" => array(
"id" => "$1"
)
)
A segunda forma eu creio que seja mais convencional, pois na hora de desenvolver não é preciso utilizar métodos como preg_split para separar a url por / para depois pegar por números mágicos o primeiro index, segundo e tentar descobrir quem é o controller ou action, o que é diferente dessa forma, onde já existe um índice no array informando que o controller é “index”, por exemplo, dessa forma o programador só precisaria de um foreach para obter o valor do “controller”.
Já vi várias formas de router.
Router que faz a função de dispatcher junto, onde ele faz o parser da configuração de rotas e ao mesmo tempo já executa a função de dispatcher chamando a “classe” controller, instanciando, chamando o método (action) e passando os parâmetros. (O que eu acho totalmente errado).
Router que faz a função apenas de parser da configuração de rotas e com métodos como “get_controller” permite que outra classe como a dispatcher faça a função dela, de obter o controller e fazer a função dela. (meio certa) – Lembrando que o dispatcher nesse caso recebe um parâmetro com type hinting Router, onde só aceita objetos do tipo Router para depois utilizar os métodos get_controller();
Já vi sistema de rotas utilizando objetos Request e Response, onde o Dispatcher recebe dois parâmetros com type hinting Request e Reponse, onde o Request funciona como o router, que tem o controller, action e tudo mais, pois fez o parser da configuração de rotas e depois o dispatcher pega esse Request e utiliza o Response para responder de várias formas, em AJAX, dentre outras (eu ainda não entendi direito como essa funciona).
Eu queria saber de você qual a sua definição para um sistema de rotas, pois pelo que eu percebi cada sistema implementa de uma forma, mas para você, qual é a correta e qual você utilizaria?
Obrigado.
Carregando comentários...