是否可以在FuelPHP中使用破折号路由所有URL?

时间:2012-07-25 14:48:54

标签: php fuelphp fuelphp-routing

在以下配置中,当URL为thisisatest时,除了指定每个路由以使用控制器this-is-a-test/action之外,还可以使用正则表达式或任何其他方法吗?我是否必须构建/扩展自己的Router类?

<?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 */

4 个答案:

答案 0 :(得分:4)

我实现此方法的方法是使用以下内容扩展\Fuel\Core\Router。路由器类使用从security.uri_filter config.php中的方法传递的URI,而不是修改我的路由器扩展的路由器类方法,为该数组添加回调。

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);
    }
}

您可以通过闭包或调用类方法或函数,轻松地将其直接添加到app/config/config.php中的配置数组中。

这样做的缺点是/ path_to_controller / action和/ path-to-controller / action都会起作用,并且可能会导致一些重复的内容SEO问题,除非你向搜索蜘蛛指出这一点。这假设两个路径都在某处引用,即站点地图或<a href="">等。

答案 1 :(得分:1)

我认为路由器类默认没有这个功能。您确实需要扩展或创建自己的路由器类。

答案 2 :(得分:0)

您可以使用security.uri_filter配置设置。

创建一个将连字符转换为下划线的函数,然后就完成了。您不需要为它扩展路由器类。只需在配置中提供函数名称(类或者在引导程序中定义的函数),然后就可以了。

答案 3 :(得分:0)

我知道这是在活动结束后,但这是为了将来想要这个的人......

为了避免下划线和子文件夹之间的混淆,我倾向于将连字符转换为驼峰式,因此将网址this-is-a-test路由到类Controller_ThisIsATest

我通过在fuel/app/config/config.php的“安全”设置中向'uri_filter'添加匿名函数来完成此操作(在FuelPHP 1.4中):

'security' => array(
    'uri_filter' => array('htmlentities',
        function($uri) { 
            return str_replace(' ', '', ucwords(str_replace('-', ' ', $uri))); 
        }),
),