juliogomes26297 / julius
Julius é um framework simples para criar aplicações Web com arquitetura MVC
Installs: 20
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/juliogomes26297/julius
Requires
- twig/twig: ^3.8
This package is auto-updated.
Last update: 2025-12-05 21:32:19 UTC
README
- Básico
- Avançado
Básico
Primeiro passos
Antes de começar usar o sistema de rotas deve iniciar a método boot()
use Julius\Framework\Http\Request; use Julius\Framework\Routing\Router; Router::boot(new Request); // Rotas ...
Tip
As tuas rotas deve estar no index.php
Rota mais simples
Aqui temos um exemplo de uma rota mais simples possível, sem complicações
// Router::boot(...) Router::get('/bem-vindo', function(Request $request) { echo 'Olá mundo!'; });
Important
Todas as rotas devem começar com /
Métodos
A class Router disponibiliza alguns métodos para controle de rota:
Router::get(); Router::post(); Router::put(); Router::patch(); Router::delete(); Router::options();
Tambem pode usar o método add() que o seu primeiro parâmetros será o tipo de método
Router::add('GET', ...); Router::add('POST', ...); // Outros ....
Parâmetros
Gostamos de passar parâmetros no uri como o nome do utilizador ou id de uma postagem, para fazer-mos isso é bastante simples
Router::get('/utilizador/:name', function(Request $request, string $name) { echo "Olá {$name}"; });
Warning
Atenção! O primeiro parâmetro será sempre do tipo Julius\Framework\Http\Request, em seguida é que vem os parâmetros customizados.
Podemos definir que tipos de dados queremos que o parâmetro aceite, no exemplo acima ele por defeito aceita qualquer tipo de palavra ou numeros, mas agora vou criar um parâmetro onde só quero que aceite numeros
Router::get('/postagem/:id', function(Request $request, string $postagem_id) { echo "Esta postagem tem o ID: {$postagem_id}"; }, ['id' => ([0-9]+));
Multi Parâmetros
Podemos usar numero de parâmetros que for necessario
Router::get('/utilizador/:name/postagem/:id', function(Request $request, string $name, string $id) { echo "O {$name} tem uma postagem com o ID: {$id}"; }, ['name' => '([a-zA-Z]+)', 'id' => ([0-9]+));
Grupos
Para um código mais limpo e facil de ler era bom agrupar as rotas, não é? Então vamos fazer isso
Router::group('/painel', function() { // Rota: /painel Router::get('/', function(Request $request) { echo "Aqui é o landing page ao acessar /painel"; }); // Rota: /painel/funcionarios Router::get('/funcionarios', function(Request $request) { echo "Estamos na página dos funcionarios"; }); // Rota: /painel/configuracoes Router::get('/configuracoes', function(Request $request) { echo "Estamos na página das configurações"; }); });
Aqui temos 3 rotas dentro do grupo painel, para acessar basta aceder /painel, /painel/functionarios ou /painel/configuracoes
Note
Se dentro do grupo não tiver nenhuma landing page ele vai dar como rota não encontrada, no exemplo acima temos uma rota que uri é /, portante ao aceder /painel ele chama essa rota.
Tip
No uri da função group() não é obrigatorio usar o / logo ao inicio, como nas rotas são obrigadas usar o / logo de inicio
Grupos com Parâmetros
O grupo tambem pode receber parâmetros, vamos ver um exemplo
Router::group('utilizador/:id', function() { // Rota: /utilizador/123 <- qualquer coisa Router::get('/', function(Request $request, string $user_id) { echo "Aqui é o landing page do utilizador/{$user_id}"; }); // Rota: /utilizador/456/postagens Router::get('/postagens', function(Request $request, string $user_id) { echo "Estamos na página de postagens do utilizador {$user_id}"; }); // Rota: /utilizador/780/fotos Router::get('/fotos', function(Request $request, string $user_id) { echo "Estamos na página de fotos do utilizador {$user_id}"; }); });
Só consigo aceder ao grupo a cima se eu entrar em utilizador/id-do-utilizador depois disso posso aceder /utilizador/123, /utilizador/456/postagens ou /utilizador/780/fotos
Tip
O método group() não consegue controlar o que entra no parâmetro :id, só nas rotas que podem controlar Ver Parâmetros
Exemplo controlar :id do exemplo em cima
Router::group('utilizador/:id', function() { $regex = ['id' => '([0-9]+)']; // Rota: /utilizador/123 <- qualquer coisa Router::get('/', function(Request $request, string $user_id) { echo "Aqui é o landing page do utilizador/{$user_id}"; }, $regex); // Rota: /utilizador/456/postagens Router::get('/postagens', function(Request $request, string $user_id) { echo "Estamos na página de postagens do utilizador {$user_id}"; }, $regex); // Rota: /utilizador/780/fotos Router::get('/fotos', [\MyApp\Controllers\UserPhotosController::class, 'index'], $regex); });
Note
Aqui está a ser controlado pela variavel $regex que neste caso só aceita numeros
Rota não encontrada
E se as tuas rotas que definiste não forem encontras ou o utilizador digitar mal a url? Ai é que entra o método fallback(), o fallback é um método que só é chamado caso nenhuma rota for encontrada.
// Router::boot() .... // Rotas ... Router::fallback(function(Request $request){ echo "Nenhuma das rotas foram encontras!"; });
Warning
Atenção! Este função deve estar no fim de todas as rotas.
Avançado
Já reparaste que a gente usa sempre um callable quando adicionamos uma rota? Imagina que cada rota tem um script muito grande, o código não ficava bom para ler, certo?
Router::get('/postagens', function(Request $request) { // código ... });
Então em vez de usar callable, vamos usar o um Controlador.
MasterController
O Julius Framework já tem um controlador para ser utlizado, mas ele não pode ser utlizado diretamente no Router, nós devemos criar os proprios controladores e fazer abstração do MasterController, no __construct dele já contém o parâmetro Request.
Warning
O __construct() do MasterController não vai receber os parâmetros da uri, simplesmente recebe só Request, quem vai receber os parâmetros, são as funções dos controlador que seram chamados no Router
Criar Controlador
Para termos um código mais limpo e legivel, vamos criar uma pasta chamada Controllers, em seguida vamos criar 2 controlados um que se vai se chamar LandingController.php e outro NotFoundController.php.
// LandingController.php namespace MyApp\Controllers; use Julius\Framework\Controllers\MasterController; class LandingController extends MasterController { public function index() : void { // Podes usar o Request, basta aceder '$this->request' echo "Olá mundo!"; } }
// NotFoundController.php namespace MyApp\Controllers; use Julius\Framework\Controllers\MasterController; class NotFoundController extends MasterController { public function index() : void { echo "Página não encontrada"; } }
Agora vamos fazer a chamada no Router.
// Router::boot(...) Router::get('/bem-vindo', [\MyApp\Controllers\LandingController::class, 'index']); // Outras rotas .... Router::fallback([\MyApp\Controllers\NotFoundController::class, 'index']);
Important
O Router pode receber tanto um array onde contém o nome da class (LandingController ou NotFoundController) e o nome do método (index) ou um callable como temos usado ao inicio.
Parâmetros no controlador
Agora como posso usar os parâmetros utilizando controladores?
// UserController.php namespace MyApp\Controllers; use Julius\Framework\Controllers\MasterController; class UserController extends MasterController { public function getUser(string $utilizador_id) : void { echo "Utilizador com ID: {$utilizador_id}"; } }
// index.php Router::get('/utilizador/:id', [\MyApp\Controller\UserController::class, 'getUser']);
No método que criei com o nome getUser vai receber um parâmetro :id
Important
Brevemente vai haver mais atualizações na documentação sobre este framework ;)