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 fosse return 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() ou Flow::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(...). Com return function() isso ficaria mais verboso.
Dito isso, na verdade, o framework já suporta o formato que você sugeriu:
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:
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! 🚀