我试图让url参数字符串与它的整数等价 我希望用户/管理员在index.php上路由?r = user / admin& lvl = 2,index.php上的用户/员工?r = user / admin& lvl = 3等等但似乎在yii中不可能?
我制定了以下规则,但它无效
'rules' => array(
'user/admins' => 'user/admin/<lvl:2>',
'user/employees' => 'user/admin/<lvl:3>'
);
我想我是如何在CodeIgniter上创建的:
$route['user/admins'] = "user/admin/lvl/2";
$route['user/employees'] = "user/admin/lvl/3";
但我在yii中不确定
答案 0 :(得分:1)
变量简单地在动作定义之后映射,并用斜杠分隔:
'rules' => array(
'user/admins' => 'user/admin/lvl/2',
'user/employees' => 'user/admin/lvl/3'
);
您现在可以访问将使用$ _GET变量“lvl”和值2路由到用户控制器和操作管理员的URL用户/管理员。请注意,该值将是字符串而不是整数,但您可以容易施展它。
答案 1 :(得分:1)
我不认为你可以使用CUrlManager提供的默认规则来做到这一点。但是通过使用自定义规则可以实现。有关其实施的更多信息,请参阅here。
在这种情况下,您应该在配置文件的rules数组中插入以下行:
array('class' => 'application.components.CustomRule'),
您的CustomRule文件应如下所示:
class CustomRule extends CBaseUrlRule {
public function createUrl($manager, $route, $params, $ampersand) {
if ($route === 'user/admin') {
if ($params['lvl'] == 2) {
return 'user/admin';
} else if ($params['lvl'] == 3) {
return 'user/employees';
}
}
return FALSE;
}
public function parseUrl($manager, $request, $pathInfo, $rawPathInfo) {
if ('user/admins' == $pathInfo) {
$_GET['lvl'] = 2;
return 'user/admin';
} else if ('user/employees' == $pathInfo) {
$_GET['lvl'] = 3;
return 'user/admin';
}
return FALSE;
}
}