0

ユーザーの役割に応じてルートを動的に変更しようとしています。したがって、ユーザーがログインしたときに書き込むキャッシュroutes.phpがあります。とにかく、再ルーティングされないURLが必要です。

今のところ $route['(:any)']='CA/$1';、どの URL でも問題なく動作します。

最初の URIはログイン コントローラーであり、2 番目の URI は JQgrids によって使用されるコントローラーを含むサブフォルダーであるため、で始まるauthか、または脇に置いておく必要があるすべての URI が必要です。rest私はこれを試しましたが、結果はありません:

$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'

4

1 に答える 1