Bonjour la commu,
J'ai une question qui porte sur le router (AltoRouter) et la porté des variables :
J'ai lu la doc c'est un exploit ! mais elle est simple il n'y a pas beaucoup de fonction, donc dans un premier temps je fais ceci sans refactoring
$router = new AltoRouter();
$router->map('GET|POST', '/', 'home');
$match = $router->match();
if(is_array($match)){
if(is_callable($match['target'])){
call_user_func_array($match['target'], $match['params']);
}else{
$params = $match['params'];
// theme var
$themeForLayout = $GetParams->themeForLayout($GetParams->GetParam(3));
// buffer
ob_start();
//templates parts
require '..';
$contentForLayout = ob_get_clean();
require '..';
}
}else{
redirect($router->generate('error'));
}
Ici comme ça fonctionne j'ai pas de problème de porté, mais refactoring oblige j'ai fait la même mais dans des fonction
public function GetRoute(){
//get|post -> url -> file -> name
$this->router->map('GET|POST', '/', 'home');
$this->router->map('GET|POST', '/home', 'home');
return $this->match = $this->router->match();
}
public function RenderPage(){
$this->GetRoute();
$router = $this->router;
$match = $router->match();
if(is_array($match)){
if(is_callable($match['target'])){
call_user_func_array($match['target'], $match['params']);
}else{
'...'
}
}else{
App::setFlash('message','rouge');
App::redirect('error');
}
}
}
Mon problème est que j'ai besoin de macthé mes route id, csrf etc.. partout dans les traitements
donc quand je fais ma fonction par exemple
public static function checkCsrf(){
if(
(isset($_POST['csrf']) && $_POST['csrf'] == self::csrf())
||
(isset($match['params']['csrf']) && $match['params']['csrf'] == self::csrf())
)
{
return true;
}
App::setFlash('message','rouge');
App::redirect('error');
}
ça fonctionne pas parce que j'ai pas
$this->GetRoute();
$router = $this->router;
$match = $router->match();
Je vois où ça coince si vous voulez mais je vois pas comment injecté ça sans avoir :
cannot redeclare route 'route ... ' dès que j'inject $this->GetRoute();
Et j'ai besoin des GetRoute car il y a les paramêtres dedans et je peut pas faire le fourbe avec des global ou des ?csrf=ratonlaveur
l'optique que j'aurais serai de mettre toutes mes variables dans
$router->RenderPage(){
$csrf = $this->Session();
global $db;//en attendant
'...'
}
Mais ça implique de tout importé comme tout mon bordel
$Generator = new App\SlugGenerator;
$Parsing = new App\Parsing;
$GetParams = new App\Parameters;
$Router = new App\Route;
$Router->RenderPage($Generator,$Parsing,$GetParams,$Router);
Mais je ne pense pas que ça soit judicieux même si je n'ai plus a mettre tout ça dans mes vues, enfin voilà c'est surtout une question de bonne pratique, faut-il faire une fonction RenderPage() ? ou laisser le if comme il est dans mon index ?
En plus que je dois injecté mes match GET dans tout mes script poster un topic, sujet résolu, suppression etc... j'ai des fonction pour tout ça et c'est là le soucis des porté de variables j'ai un cannot redeclare route a chaque fois.
Voila je ne sais pas trop laquelle des méthode choisir refectoring ou brute ?
Bonne journée.