Esiste un modo generico per instradare gli URL in Kohana quando è presente il trattino?
Domanda
Kohana imposta automaticamente gli URL in questo modo
http://www.example.com/controller/method/argument1 / argument2 / etc
Ora mi piace usare il trattino per separare le mie parole nell'URL e ho un indirizzo come questo
http://www.example.com/business-hub
Il mio controller si chiama BusinessHub_Controller. Quello che mi infastidisce, è / business-hub / per abbinare il controller BusinesHub, devo aggiungere una voce personalizzata nel route.php sotto la cartella application / config. Sembra anche che debba aggiungerne uno per il metodo ogni , il che è davvero fastidioso. Ad esempio, ecco un estratto,
$config['business-hub'] = 'businesshub/index/';
$config['business-hub/logout'] = 'businesshub/logout';
$config['business-hub/media-releases'] = 'businesshub/mediareleases';
Ovviamente, questo è davvero fastidioso. C'è comunque un modo per dire a Kohana di convertire l'URL nel nome camelCase, qualcosa come
$urlController = 'business-hub';
$correctController = str_replace('-', ' ', $urlController);
$correctController = ucwords($correctController);
$correctController = str_replace(' ', null, $correctController);
$correctController = $correctController . '_Controller';
Soluzione
Piuttosto che limitarmi a rimuovere i trattini, li convertivo in caratteri di sottolineatura; e lo farei usando un gancio. Assicurati che gli hook siano abilitati in config / config.php e quindi crea un file in hook chiamato, diciamo, 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');
Altri suggerimenti
Per la variante camelCase non lo so, ma qualcosa del genere dovrebbe funzionare
$config['(a-z)+-?(a-z)*/(a-z)+-?(a-z)*'] = '$1$2/$3$4';
Poiché la parte del percorso in kohana è un'espressione regolare.
Naturalmente questo è fortemente limitato ai casi da te forniti.