PHP code example of jordan / http-routes

1. Go to this page and download the library: Download jordan/http-routes 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/ */

    

jordan / http-routes example snippets


//index.php
e "foo/bar/arquivo-rotas-exemplo.php";

//arquivo-rotas-exemplo.php
use HttpRoutes\{Route, Bootstrap};
use HttpRoutes\Exception\BootstrapException;

$route = new Route;


//Insira suas rotas aqui


try {
  //Iniciando a aplicação
  $app = new Bootstrap($route, "http:\\url-base-projeto");

} catch (BootstrapException $e) {
  //Erros relacionados à rota
  http_response_code($e->getCode());
  if ($e->getCode() == 404 | $e->getCode() == 405) {
    //Erros causados pelo usuário
    die($e->getMessage());
  } else {
    //Erros internos
    die("Ocorreu um erro inesperado, lamentamos o ocorrido.<br>Detalhes DEBUG: '{$e->getMessage()}'");
  }
}

$route
->method();

$route
->method1()
->method2('foo', 'bar');

->set('get', 'foo');

->set('post', '/bar');

->set('get', 'foo/{obrigatório}');//Correto

->set('post', 'foo/{obrigatório}/{?opcional}');//Correto

->set('DELETE', 'foo/{?opcional}/{obrigatório}');//Essa sequência não funciona muito bem

->set('GET', 'foo/{?opcional}/');//Correto

->name('Nome-da-rota');

$getUriByName('Nome-da-rota', true); //O método retornará a rota antecedida da url base. ex: http://meu-site/rota
$getUriByName('Nome-da-rota', false); //O método retornará somente a rota nomeada. ex: /rota

->callback(function($functions){
  return "Resposta a ser retornada";
});

->callback(function($functions){
  $getUriByName = $functions['getUriByName'];
  return $getUriByName('Nome-da-rota'); 
});

->set('get', 'bar/{obrigatório}')
->callback(function($functions, $params){
  return $params['obrigatório'];
});

->set('get', 'bar/{?opcional}')
->callback(function($functions, $params){
  return !is_null($params['opcional']) ? "parâmetro opcional: {$params['opcional']}" : 'nenhum parâmetro opcional foi informado';
});

->controller('Controller', 'action', false)//false, Defaut; O nome do controller será antecedido do namespace App\Controller\
->controller('Foo\Bar\Controller', 'action', true)//O nome do controller será interpretado como um namespace completo

//Controller.php
namespace App\Controller;

Class Controller{
  public function __construct($functions)
  {

  }

  public function action()
  {
    return "It's work well, dude!";
  }
}

//Controller.php
namespace Foo\Bar;

Class Controller{
  public function __construct($functions)
  {

  }

  public function action()
  {
    return "It's work well, dude!";
  }
}

//Controller.php
namespace App\Controller;

Class Controller{
  public function action($args)
  {
    echo '<pre>';
    print_r($args);
    echo '</pre>';
  }
}

->middleware(['MiddlewareClass' => ['action'] ]);
->middleware(['MiddlewareClass' => ['action'] ], 'App\Mynamespace\\');
->middleware(['MiddlewareClass' => ['action1', 'action2'] ]);
->middleware(['MiddlewareClass1' => ['action1', 'action2'], 'MiddlewareClass2' => ['action1'] ]);

Class Middleware
{
  public function action()
  {
    //Validando...

    //Se nenhum valor for retornado, a aplicação receberá um valor nulo como resposta e seguirar seu fluxo. É facultativo o uso de "return null".

    //Caso algum valor seja retornado além de nulo, o fluxo da aplicação será encerrado e o retorno será exbido como resposta ao usuário.
  }
}

$route->group()

->add([
  $route->set('get', 'foo')->controller('ControllerClass', 'action')->name('foo-route'),
  $route->set('post', 'bar')->controller('ControllerClass', 'action')->name('bar-route')
]);

->path('foo/bar/');

->controller("ControllerClass", ['action1', 'action2']);

->middleware(['Examples\Bar' => ['action'], 'Examples\Foo' => ['action']]);