Yii Url Manager将整数参数更改为等效字符串

时间:2014-05-11 09:27:14

标签: php codeigniter yii

我试图让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中不确定

2 个答案:

答案 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;
}

}