我有一个包含类别和帖子的数据库,目前,我通过以下方式通过其控制器访问他: “ / 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';
但这会与我的其他控制器产生问题,因此不建议从另一个控制器调用一个控制器。
是否可以生成我的需求路径?
答案 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"