Pregunta

En la siguiente configuración es posible usar una expresión regular o cualquier otro método además de especificar cada ruta para usar el controlador. thisisatest cuando la URL es this-is-a-test/action?¿Tendría que crear/ampliar mi propia clase de enrutador?

<?php
return array(
    '_root_'  => 'home/index',  // The default route
    '_404_'   => 'error/404',    // The main 404 route

    //'hello(/:name)?' => array('welcome/hello', 'name' => 'hello')
);

/* end of config/routes.php */
¿Fue útil?

Solución

La forma en que implementé esto fue extender \Fuel\Core\Router usando lo siguiente.La clase de enrutador funciona con un URI que se ha pasado a través de los métodos en security.uri_filter de config.php entonces, en lugar de modificar los métodos de la clase del enrutador, hice que la extensión de mi enrutador agregara una devolución de llamada a esa matriz.

class Router extends \Fuel\Core\Router
{
    public static function _init()
    {   
        \Config::set('security.uri_filter', array_merge(
            \Config::get('security.uri_filter'),
            array('\Router::hyphens_to_underscores')
        ));
    }

    public static function hyphens_to_underscores($uri)
    {
        return str_replace('-', '_', $uri);
    }
}

Podrías agregarlo fácilmente directamente a la matriz de configuración en app/config/config.php mediante un cierre o una llamada a un método de clase o una función.

La desventaja de esto es que tanto /path_to_controller/action como /path-to-controller/action funcionarán y posiblemente causen algunos problemas de SEO de contenido duplicado a menos que se lo indique a la araña de búsqueda.Esto supone que se hace referencia a ambas rutas en algún lugar, es decir.un mapa del sitio o un <a href=""> etc.

Otros consejos

Creo que la clase de enrutador no tiene la funcionalidad de forma predeterminada.De hecho, necesitaría extender o crear su propia clase de enrutador.

Puede usar la configuración de configuración de seguridad.uri_filter para eso.

Cree una función que convierta guiones para guiones bajos, y está terminado.No necesitas extender la clase de enrutador para ello.Simplemente suministre el nombre de la función (en una clase o una función definida en el bootstrap) a la configuración, y está apagado.

Sé que es después del evento, pero esto es para cualquiera que quiera esto en el futuro...

Para evitar confusión entre guiones bajos y subcarpetas, preferí convertir los guiones a mayúsculas y minúsculas, por lo que la URL de enrutamiento this-is-a-test a clase Controller_ThisIsATest.

Hice esto (en FuelPHP 1.4) agregando una función anónima al 'uri_filter' en la configuración de 'seguridad' en fuel/app/config/config.php:

'security' => array(
    'uri_filter' => array('htmlentities',
        function($uri) { 
            return str_replace(' ', '', ucwords(str_replace('-', ' ', $uri))); 
        }),
),
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top