PHP code example of yuri-oliveira / router

1. Go to this page and download the library: Download yuri-oliveira/router library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

yuri-oliveira / router example snippets




use YuriOliveira\Router\Request;
use YuriOliveira\Router\Response;
use YuriOliveira\Router\Router;

_SERVER['REQUEST_METHOD'],
    $_SERVER['REQUEST_URI'],
    $_FILES,
    $_GET,
    $_POST,
    getallheaders()
);

$response = new Response();

$router = new Router($request, $response, SITE['root']);



// Definindo o namespace dos Controllers
$router->namespace('YuriOliveira\Router\Controllers')

// Exemplo de rotas simples
$router->get('/home', 'WebController:home', 'web.home');
$router->post('/registrar', 'WebController:register', 'web.register');

// Exemplo de rotas com parâmetros dinâmicos
$router->get('/usuarios/:user', 'WebController:showUser', 'web.showUser');
$router->post('/usuarios/deletar/:user', 'WebController:deleteUser', 'web.deleteUser');

// Rota dinâmica para receber os erros de requisição
$router->get('/oops/:errorcode', 'App:error', 'app.error');

// Método que faz a classe trabalhar
$router->dispatch();

if ($error = $router->error()) { $router->redirect('app.error', ['errorcode' => $error]); }


$router->get('/', function(Router $router, array $data, ResponseInterface $response){

    $response->addContent('Olá mundo!')->sendResponse();
    
}, 'web.home');

$router->post('/registrar', function(Router $router, array $data, ResponseInterface $response){

    $data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);

    $user = new User();
    
    $user->name = $data['name'];
    $user->email = $data['email'];
    $user->password = password_hash($data['password'], PASSWORD_DEFAULT);

    $user->save();

}, 'web.register');

$router->group('/admin');
$router->get('/perfil', 'AdminController:adminProfile', 'admin.adminProfile');
$router->post('/relatorio', 'AdminController:report', 'admin.report');

$router->group('/usuarios');
$router->get('/:user', 'WebController:showUser', 'web.showUser');
$router->post('/deletar/:user', 'WebController:deleteUser', 'web.deleteUser');

$router->group(null);
$router->get('/home', 'WebController:home', 'web.home');
$router->post('/contatos', 'WebController:contacts', 'web.contacts');

$router->redirect('web.home');
$router->redirect('/postagens/tecnologia/55214');
$router->redirect('http://www.site.com/home');


class WebController
{
    protected Router $router;
    
    public function __construct($router)
    {
        $this->router = $router;
    }

    public function showUsers($data, ResponseInterface $response): void
    {
       $users = User::find()->all();

       $response->addContent(print_r($data))->sendResponse();
    }
}

class WebController
{
    protected Router $router;
    
    public function __construct($router)
    {
        $this->router = $router;
    }

    public function showUsers($data, ResponseInterface $response): void

    {
        // O status da resposta. O status 200 já é o padrão
        $response->setStatusHttp(200);

        // Conteúdo a ser enviado como resposta
        $response->addContent(mixed $content);

        // Tipo do conteúdo a ser enviado como resposta. O ContentType 'text/html' já é o padrão
        $response->setContentType('text/html');

        // Definindo Headers da resposta
        // O header Content-Type é informado automaticamente usando o setContentType informado
        $response->addHeader(string $key, string $value);

        // Enviando resposta para o browser
        $response->sendResponse();
    }
}
apache
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ ./index.php [QSA,NC]
</IfModule>