Codeigniter路线表达

时间:2012-09-06 13:38:00

标签: codeigniter routes

我正在尝试根据用户角色动态更改路由。所以我有一个缓存routes.php,我在用户登录时写入。不管怎样,我需要一些网址不要重新路由:

现在我有:$route['(:any)']='CA/$1';可以在任何网址上正常使用。

我需要将所有以authrest开头的URI放在一边,因为第一个是登录控制器,第二个是JQgrids使用控制器的子文件夹。我试过这个但没有结果:

$route['^(?!auth|rest).*'] = "CA/$1";

编辑: @Vlakarados

您的路线目前正在运行,但我遇到以下问题:

我的routes.php看起来像这样:

$route['404_override'] = '';
$route['default_controller'] = "auth";

include_once(APPPATH."cache/routes.php");

在Auth控制器中,我执行以下操作:

class Auth extends CI_Controller {
    function Auth() {
        parent::__construct();
    }
    function index()
    {
        if ($this->ion_auth->logged_in())
        {
            $this->__checkRoles();
        }
        else
        {
                        //render the form
            }
    }

    function logout()
    {
        session_start();
        session_unset();
        session_destroy();
        $logout = $this->ion_auth->logout();
        redirect('auth');
    }
    function __checkRoles()
    {

        $role=$this->ion_auth->get_group();
        $this->save_routes($role);
        switch ($role) {

            case 'CA':
                redirect(base_url()); //this is how I'm redirecting now, because it will route to base_url()/CA (but it won't because first it will route to default_controller which is 'Auth'
                break;
            case 'CD':
                redirect(base_url().'CD'); //this is how I used to redirect,
                break;
            case 'DV':
                redirect(base_url().'DV');
                break;
            case 'AC':
                redirect(base_url().'AC');
                break;

            case 'Admin':
                redirect(base_url().'Admin');
                break;
            default:
                show_404();
                break;
        }
    }
    public function save_routes($controller=null)
    {
            $output="<?php ";
            $output.="\$route['auth']='auth';";     
            $output.="\$route['rest']='rest';";
            $output.="\$route['(:any)']='".$controller."/$1';";

            $this->load->helper('file');
            write_file(APPPATH . "cache/routes.php", $output);
            $string = read_file('./path/to/file.php');
    }
}

解决:

我已经解决了这个问题,没有重定向到base_url()并期待base_url().'/CA'当然导致base_url().'/CA/index'但直接重定向到base_url().'/index'

1 个答案:

答案 0 :(得分:0)

试试这个:

$route['auth']='auth';
$route['auth/(:any)']='auth/$1';
$route['rest']='rest';
$route['rest/(:any)']='rest/$1';

$route['(:any)']='CA/$1';

首先出现的路线具有最高优先级