Valeu pelo comentário! Fico feliz que a ideia ressoou.
A sintaxe Flow::GET()->do(fn($req) => ...) foi uma escolha deliberada por alguns motivos:
-
Flow::POST(),Flow::PUT(),Flow::DELETE()seguem o mesmo padrão. Se fossereturn function($req), eu teria que inventar outra forma para os outros verbos HTTP. -
Quando você abre um arquivo de rota, a primeira coisa que vê é
Flow::GET()ouFlow::POST(). O método HTTP está ali, explícito. Sem precisar procurar por uma constante no final do arquivo. -
O arquivo de rota pode ter múltiplos métodos (GET e POST no mesmo arquivo, como no exemplo). Com
return function()você teria que escolher qual método retornar. -
A sintaxe atual permite encadear:
Flow::GET()->name('home')->do(...). Comreturn function()isso ficaria mais verboso.
Dito isso, na verdade, o framework já suporta o formato que você sugeriu:
// app/router/users.php
return function($req) {
return Response::json(['users' => User::all()]);
};
Isso funciona! O router detecta que o arquivo retornou uma função e a executa. Então quem prefere essa sintaxe pode usá-la. Mas aí perde a possibilidade de ter múltiplos métodos HTTP no mesmo arquivo — algo que eu gosto muito:
// app/router/users/[id].php
return [
'GET' => fn($req) => User::find($req->param('id')),
'PUT' => fn($req) => User::update($req->param('id'), $req->all()),
'DELETE' => fn($req) => User::delete($req->param('id'))
];
Quando o Router inclui um arquivo de rota, ele também busca um retorno. Se você retorna:
- Um callable → executa e envia a resposta
- Uma Response → envia a resposta
- Um array → interpreta como um mapeamento
[MÉTODO => handler]
O Flow nasceu dessa necessidade: um arquivo, múltiplos métodos.
Valeu pelo feedback! 🚀