Rendre les URLs par défaut sensibles à la casse avec FuelPHP
Primo, créons le fichier
fuel/app/classes/router.php
, et éditons-le comme suit :<?php
class Router extends Fuel\Core\Router
{
protected static function parse_segments($segments, $namespace = '', $module = false)
{
$temp_segments = $segments;
$case_sensitive = \Config::get('routing.case_sensitive', true);
foreach (array_reverse($segments, true) as $key => $segment) {
if (($case_sensitive) && ($segment != mb_strtolower($segment))) {
return false;
}
$class = $namespace.'Controller_'.\Inflector::words_to_upper(implode('_', $temp_segments));
array_pop($temp_segments);
if (class_exists($class)) {
return array(
'controller' => $class,
'action' => isset($segments[$key + 1]) ? $segments[$key + 1] : null,
'method_params' => array_slice($segments, $key + 2),
);
}
}
if ($module) {
$class = $namespace.'Controller_'.ucfirst($module);
if (class_exists($class)) {
return array(
'controller' => $class,
'action' => isset($segments[0]) ? $segments[0] : null,
'method_params' => array_slice($segments, 1),
);
}
}
return false;
}
}
Les deux lignes importantes (les seules ajoutées à la fonction d'origine) sont celle où l'on déclare la variable
$case_sensitive
(pour récupérer la valeur du paramètre de configuration éponyme), et celle où on l'utilise pour vérifier le cas échéant la valeur de chaque segment de l'URL courante. En retournant false
si l'un d'entre eux comporte des majuscules, on déclenchera automatiquement une erreur 404 bienvenue.Il ne nous reste qu'à informer FuelPHP de l'existence de cette extension de classe, en modifiant le fichier
fuel/app/bootstrap.php
:Autoloader::add_classes(array(
// Add classes you want to override here
// Example: 'View' => APPPATH.'classes/view.php',
'Router' => APPPATH.'classes/router.php'
));
Notez bien qu'en toute logique, ceci s'appliquera également aux segments de l'URL correspondant aux éventuelles variables
GET
; si ce comportement est gênant dans votre cas, il suffira d'affiner un peu la vérification effectuée.