在我的CI应用程序中,我有一些控制器来处理不同的用户类型函数:
因此,当有人登录时,他的角色会被重定向到(示例):localhost/CA
或localhost/CD
等。
我需要重写路由以根据他的角色重定向所有内容:
$route['(:any)'] = 'CA/$1';
(CA不应该是硬编码的)
任何人都可以告诉我如何在登录后挂钩规则吗?以及如何使用正则表达式过滤一些应用规则的网址?
$route['^((?!auth/).)*$'] = '$1';
实现这一目标的其他方法是什么? .htaccess是不可能的,因为我需要一些数据逻辑来创建路由。
答案 0 :(得分:1)
感谢关于从数据库路由的this精彩教程,我设法在用户登录后添加新路由(在我的Auth控制器中):
class Auth extends CI_Controller {
function Auth() {
parent::__construct();
}
function index()
{
if ($this->ion_auth->logged_in())
{
$this->__checkRoles();
}
function __checkRoles()
{
$role=$this->ion_auth->get_group();
$this->save_routes($role);
redirect(base_url().'index');
}
public function save_routes($controller=null)
{
$output="<?php ";
//some uri's don't need routing
$output.="\$route['auth']='auth';";
$output.="\$route['auth/(:any)']='auth/$1';";
$output.="\$route['rest']='rest';";
$output.="\$route['rest/(:any)']='rest/$1';";
//for the rest route trough the "user-type" controller
$output.="\$route['(:any)']='".$controller."/$1';";
$this->load->helper('file');
//write to the cache file
write_file(APPPATH . "cache/routes.php", $output);
}
我的routes.php看起来像这样:
$route['404_override'] = '';
$route['default_controller'] = "auth";
include_once(APPPATH."cache/routes.php");
答案 1 :(得分:0)
听起来你想要的是实现remapping:标准路由系统的设计不允许你根据用户是否登录来改变路由。
然而,你可能(我从未见过这个工作)能够将条件语句放在标准routes.php文件中,该文件检查用户是否已登录以及他们的角色是什么(查看会话cookie)或类似的东西)然后加载不同的路线选项。从未尝试过,但可能对你有用。