在CodeIgniter中可以进行这种类型的路由吗?

时间:2019-01-09 11:14:01

标签: php codeigniter routing

我有一个包含类别和帖子的数据库,目前,我通过以下方式通过其控制器访问他: “ / category / id”和“ / post / id”

但是现在我要访问下一条路径: “ / category_name / post_name”

合理的做法是使用“ /application/config/routes.php” 并创建:$route['(:any)/(:any)'] = 'post';

问题在于,在我想要的路径中可能有诸如“ / category1_name / category2_name / post_name”之类的子类别

我正在尝试创建下一条路线: $route['(\w|/)*'] = 'route'; 但这会与我的其他控制器产生问题,因此不建议从另一个控制器调用一个控制器。

是否可以生成我的需求路径?

3 个答案:

答案 0 :(得分:0)

way: "/category/id" and "/post/id"

您一开始就无法破坏任何网址以获得

$route['category/(:any)'] = 'post/load/category/$1'; 
$route['post/(:any)'] = 'post/load/post/$1'; 

并在您的控制器后创建带有2个参数的方法加载。如

<?php

class Post extends CI_Controller {
 function load($parameter1 , $parameter2 )
 {
  echo $parameter1."<br>";
  echo $parameter2;
 }
}

?>

答案 1 :(得分:0)

目前我尝试这样做:

子类别如何存在,路径中类别的数量是可变的,URL是否无限,我在路径中定义了最大的类别,因此我将此代码包括在"application/config/routes.php"中:

$route['(:any)'] = function ($param0="",$param1="",$param2="",$param3="",$param4="",$param5=""){
    if($param0 == "user" || $param0 == "home" || $param0 == "post" || $param0 == "user") return $param0;
    else return 'route';
};
$route['(:any)/(:any)'] = function ($param0="",$param1="",$param2="",$param3="",$param4="",$param5=""){
    if($param0 == "user" || $param0 == "home" || $param0 == "post" || $param0 == "user") return $param0.'/'.$param1;
    else return 'route';
};

$route['(:any)/(:any)/(:any)'] = function ($param0="",$param1="",$param2="",$param3="",$param4="",$param5=""){
    if($param0 == "user" || $param0 == "home" || $param0 == "post" || $param0 == "user") return $param0.'/'.$param1.'/'.$param2;
    else return 'route';
};

$route['(:any)/(:any)/(:any)/:(any)'] = function ($param0="",$param1="",$param2="",$param3="",$param4="",$param5=""){
    if($param0 == "user" || $param0 == "home" || $param0 == "post" || $param0 == "user") return $param0.'/'.$param1.'/'.$param2.'/'.$param3;
    else return 'route';
};

$route['(:any)/(:any)/(:any)/(:any)/(:any)'] = function ($param0="",$param1="",$param2="",$param3="",$param4="",$param5=""){
    if($param0 == "user" || $param0 == "home" || $param0 == "post" || $param0 == "user") return $param0.'/'.$param1.'/'.$param2.'/'.$param3.'/'.$param4;
    else return 'route';
};

$route['(:any)/(:any)/(:any)/(:any)/(:any)/(:any)'] = function ($param0="",$param1="",$param2="",$param3="",$param4="",$param5=""){
    if($param0 == "user" || $param0 == "home" || $param0 == "post" || $param0 == "user") return $param0.'/'.$param1.'/'.$param2.'/'.$param3.'/'.$param4.'/'.$param5;
    else return 'route';
};

这是非常丑陋的代码,但功能强大。我正在尝试通过循环来改进它,该循环将使用变量设置类别的最大值,但是我在回调函数内部存在变量问题。

示例:

$i = 4;
$route['(:any)'] = function ($param0="",$param1="",$param2="",$param3="",$param4="",$param5=""){
    global $i;
    if($param0 == "user" || $param0 == "home" || $param0 == "post" || $param0 == "user") return $param0;
    else return 'route';
};
在回调函数$ i内部为空,

答案 2 :(得分:0)

最后,我改进了代码,使用use()从匿名函数访问外部变量,在url中设置类别的最大数量,并生成带有控制器名称的数组,如果路径是控制器路径,则会路由给他,如果没有的话,路由到路由控制器。

def reverse_int(num): if num >= 0: sign = '' # No sign to add else: sign = '-' # Keep negative sign print(sign) tmp = abs(num) print(tmp) return sign + str(tmp)[::-1] 中的代码:

"application/config/routes.php"