smartweb 发表于 2012-1-11 20:58:03

求复杂URI 路由写法

本帖最后由 smartweb 于 2012-1-12 11:24 编辑

例如:$route['{2}/home'] = "main";
是任意2个字符/home就会直接执行control main
如果我想是任意个数的字符/home就直接执行control main
我又该怎样写那条router呢?





解决:
$route['{0,100}/home'] = "main";
第一个参数为数字和字母组合的,1到100位的。
只能是数字和字母组合,不能有空格或其它符号

smartweb 发表于 2012-1-11 21:00:38

$route['{5}/home'] = "main";
是指任意5位的数或字符。
我的想法是做无限语种的路由,第一个参数是语言标识,长度可能是两位或N位。

smartweb 发表于 2012-1-11 21:30:14

<?phpif ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| URI ROUTING
| -------------------------------------------------------------------------
| This file lets you re-map URI requests to specific controller functions.
|
| Typically there is a one-to-one relationship between a URL string
| and its corresponding controller class/method. The segments in a
| URL normally follow this pattern:
|
|        example.com/class/method/id/
|
| In some instances, however, you may want to remap this relationship
| so that a different class/function is called than the one
| corresponding to the URL.
|
| Please see the user guide for complete details:
|
|        http://codeigniter.com/user_guide/general/routing.html
|
| -------------------------------------------------------------------------
| RESERVED ROUTES
| -------------------------------------------------------------------------
|
| There area two reserved routes:
|
|        $route['default_controller'] = 'welcome';
|
| This route indicates which controller class should be loaded if the
| URI contains no data. In the above example, the "welcome" class
| would be loaded.
|
|        $route['404_override'] = 'errors/page_missing';
|
| This route will tell the Router what URI segments to use if those provided
| in the URL cannot be matched to a valid route.
|
*/

$route['default_controller']        = "cart";

//this for the admininstration console
$route['admin']                                        = 'admin/dashboard';

//get routes from database
include('database.php');

if($db[$active_group]['pconnect'])
{
        mysql_pconnect($db[$active_group]['hostname'],$db[$active_group]['username'],$db[$active_group]['password']);       
}
else
{
        mysql_connect($db[$active_group]['hostname'],$db[$active_group]['username'],$db[$active_group]['password']);       
}
mysql_select_db($db[$active_group]['database']) or die("Unable to select database");

$routes        = mysql_query('SELECT * FROM '.$db[$active_group]['dbprefix'].'routes');

while($row = mysql_fetch_array($routes))
{
        //if "category" is in the route, then add some stuff for pagination
        if(strpos($row['route'], 'category'))
        {
                $route[$row['slug']] = $row['route'];

                $row['slug']         .= '/(:num)';
                $row['route']         .= '/$1';
        }
        $route[$row['slug']] = $row['route'];
}

mysql_free_result($routes);


//in case we're using pconnect
mysql_close();

smartweb 发表于 2012-1-12 10:37:25

解决。
原来可以用PHP正则表达式,写成
$route['{1,100}/home'] = "main";

就是说第一个参数,可以是数字和字母组合的一到100位的。
页: [1]
查看完整版本: 求复杂URI 路由写法