Existe-t-il un moyen générique d'acheminer les URL dans Kohana lorsqu'il contient le trait d'union?
Question
Kohana configure automatiquement les URL de la même manière
http://www.example.com/controller/method/argument1 / argument2 / etc
Maintenant, j'aime bien utiliser le tiret pour séparer mes mots dans l'URL et j'ai une adresse comme celle-ci
http://www.example.com/business-hub
Mon contrôleur s'appelle BusinessHub_Controller. Ce qui me gêne, c’est que / business-hub / corresponde au contrôleur BusinesHub, j’ai besoin d’ajouter une entrée personnalisée dans le fichier routes.php du dossier application / config. Il semble également que je dois en ajouter une pour chaque méthode , ce qui est vraiment ennuyeux. Par exemple, voici un extrait,
$config['business-hub'] = 'businesshub/index/';
$config['business-hub/logout'] = 'businesshub/logout';
$config['business-hub/media-releases'] = 'businesshub/mediareleases';
Évidemment, c'est vraiment ennuyant. Est-ce que je peux dire à Kohana de convertir l'URL dans le nom camelCase, quelque chose comme
$urlController = 'business-hub';
$correctController = str_replace('-', ' ', $urlController);
$correctController = ucwords($correctController);
$correctController = str_replace(' ', null, $correctController);
$correctController = $correctController . '_Controller';
La solution
Plutôt que d'éliminer les tirets, je les convertissais en caractères de soulignement. et je le ferais avec un crochet. Assurez-vous que les hooks sont activés dans config / config.php, puis créez un fichier appelé, par exemple, dashes_to_underscores.php:
function convert_dashes_to_underscores_in_url()
{
Router::$current_uri = str_replace('-', '_', Router::$current_uri);
}
Event::add_before(
'system.routing',
array('Router', 'setup'),
'convert_dashes_to_underscores_in_url');
Autres conseils
Pour la variante camelCase, je ne sais pas, mais quelque chose comme cela devrait fonctionner
$config['(a-z)+-?(a-z)*/(a-z)+-?(a-z)*'] = '$1$2/$3$4';
Comme la partie route de kohana est une expression régulière.
Bien sûr, cela est strictement limité aux cas que vous avez fournis.