Le système de route est basé sur l'existence ou non d'un contrôleur. Il est donc inutile de définir les routes à l'avance.
A charge au contrôleur de traiter la requête que lui soumet le routeur.
Le
routeur est la pierre angulaire du framework. C'est lui qui détermine
les tokens, les paramètres GET/POST/autres, les id Ajax pour faire
réapparaître les liens, les contrôleurs, les namespaces, l'accès
administrateur ou autre, etc.
Une requête http peut ressembler à ceci :
- https://www.muretech.com
- https://www.muretech.com/admin/blog
Une requête Ajax peut ressembler à ceci :
- https://www.muretech.com/admin/blog/post/updatemodal/2/c99a2af8e5063b2c61153805ba30122e8c9cebd1b3d3941ec435b4bdcaf6a9e3/linkf15a80af-89fe-1669-ede3-50ffae93d42d
Même si l'entrée du site se fait par app.php, l'url suivante ne fonctionnera pas :
- https://www.muretech.com/app.php
/****************************** app.php
*****************************/
namespace Feralz;
// [...]
require_once 'vendor/autoload.php';
require_once 'src/constants.php';
// [...]$router = \Feralzdev\Router::getInstance();
$router->run();
/****************************** Router.php
*****************************/
namespace Feralzdev;
// [...]
/**
* routing
* http and ajax requests
*/
class Router
{
/**
* call the request corresponding controller
* @param void
*/
private function setController() {
// [...]
}
/**
* return html response according to existing controller and request nature (html or ajax)
* if not exists, return 404 error
* @param void
*/
public function run()
{ // [...] } else {
echo $this->error404();
}
} else {
if ($this->isAjax()) {
$ajax = Ajax::getInstance();
echo json_encode($ajax->getData());
} else {
echo $this->controller->render();
}
/*****************************
* HomeController.php
*****************************/
namespace Feralz;
// [...]
/**
* Main Controller
* Home page Interface
*/
class HomeController extends Controller
{
public function __construct() {
parent::__construct();
$this->htmlPath = '/';
$this->allowBot();
}
// [...] /**
* Method returning rendered html
* @return string
*/
public function render() {
$session = Session::getInstance();
$router = Router::getInstance();
$postManager = new BlogPostManager();
$posts = $postManager->findAll('date', true);
$userId = $session->getUser()->getId();
return $this->twig->render('home.html', [
'posts' => $posts
]);
}
}