Caramba, antes de eu abrir o projeto eu fui pegar esse link do post mas quando fui ler os comentarios ja esta aqui. hahaha.
Inicio
Ja faz 25 dias desde aquele post e ja começei a contribuir em um projeto, eu até pensei em fazer um post no tabnews aqui mas nao sei se tenho tanta coisa pra contar, talvez eu faça para inspirar pessoas como o dono do post que esta na mesma situaçao que eu estava quase um mês atras, entao por enquanto vou deixar aqui a atualização da historia nesse comentario.
Escolha do projeto
Fiz algumas contribuiçoes, escolhi o projeto iMono encontrei ele aqui mesmo no tabnews alguns dias depois de fazer meu post procurando ajuda, o post erahttps://www.tabnews.com.br/FabioAugustoRodrigues/php-imono-framework-mvc
Encontrando os primeiros issues
Imediatamente eu ja abri, vi que era algo pequeno entao me senti animado ja que eu nao demoraria dias para entender uma parte x.
Entao olhando eu ja senti falta de um monte de coisas, por exemplo as views, vi que eram simplesmente arquivos .html com um javascript pedindo dados de alguma rota /api então ja fiz um issue falando sobre Templates, é o unico issue do projeto que ainda esta parado por enquanto, ja que estou mexendo em outra parte por agora.
Depois vi que nao havia nenhum sistema de cache, entao fiz a mesma coisa abri um issue, futuramente implementei cache em memoria com a contribuição do dono do repo, como voce pode ver mais abaixo no issue e deixamos o framework recepitivel pra cache em algo como redis por exemplo.
Depois reparei que o framework se conectava apenas com mysql, tinha uma linha hardcoded no arquivo de conexao com banco de dados que impedia que qualquer outro fosse conectado, fiz o mesmo, abri um issue. Esse especificamente foi so um issue, nao criei nenhum codigo pra resolver isso, mas eu deveria.
Depois ja achei estranho o jeito que o framework usava rotas, ja que eram gerenciadas pelo servidor em um arquivo .htacess e so aceitava uma rotas de prefixo /framework por exemplo se voce criasse uma rota /perfil a rota de acesso seria /framework/perfil, era apenas uma linha entao foi meu primeiro pull request
Mas o sistema de rotas ainda me estranhava bastante por 2 motivos.
Nao existiam rotas para frontend, qualquer rota get simplesmente era uma procura de arquivo .html na pasta /views, como por exemplo pra acessar a view index.html voce literalmente escrevia /index.html, e como eu gostaria de adicionar templates eu precisava que houvesse uma camada antes e nao algo tao direto.
E o segundo motivo, as rotas de api, as rotas post, eram criadas diretamente no codigo de uma classe, no construtor da classe voce setava, literalmente voce escreva o path da rota dentro do construtor, algo proximo disso:
public function constructor()
{
$this->addRoute('/api/profile', 'app\controllers\http\ProfileController', 'index');
}
Nisso ja vi varias atualizaçoes como:
- Desacoplar isso do construtor.
- Transformar tudo em metodo estatico ja que nao era necessario aquilo virar um objeto.
- Trocar o uso de caminho do controller pra algo mais como ProfileController::class
- Inverter o diretorio das pastas pois controller\http parece estranho de usar.
As 3 primeiras da listas ja foram feitas nesse pull request, infelizmente por um problema de configuraçao no git meu github ficou cinza por 3 dias enquanto eu contribuia e minhas atualizaçoes nesse pr nao estavam linkadas ao meu perfil e sim a um usuario "user" haha.
Conclusão
Nesse momento ja estou atualizando o sistema de rotas que acabamos de fazer, para agora usar arrays ao inves de uma string direta com todo o caminho da rota nesse pull request
E parece ter bastante coisa pra fazer, pelo visto pelo menos 28/29 dias de fevereiro vao ficar verdinhos ja que um bug impediu de eu ter os 29 haha, deixa pro proximo mês.
Por sinal se voce entender sobre php poderia nos ajudar a implementar o sistema de template, estou muito empenhado nisso.
Obrigado pela leitura, qualquer dica a mais ou qualquer outra coisa sinta-se a vontade para comentar.