CodeIgniter:有效路由

时间:2011-11-14 02:48:36

标签: codeigniter routing

假设我有一个接受的社交网络:

短网址使用昵称:例如 - > www.mynetwork.com/john.doe 256位AES哈希:例如 - > www.mynetwork.com/23fdgfdjhdbfuyviofhedfbncxgersbzc34 ...

我想将它们路由到像'Profile'这样的单个控制器,其中:

短网址版本的功能如下:fetch($ nick)其中, 我将缺口哈希到aes,然后进行重定向以调用函数:view($ hash)

视图函数实际上具有显示该用户的配置文件的逻辑。

这确保无论我选择访问个人资料的网址是什么情况,无论是短网址还是哈希,我总是会被重定向到哈希网址调用......

我该怎么做?我认为这与路线有关,但我对如何处理它有点迷失......

缩短,访问: www.mynetwork.com/john.doe重定向到:www.mynetwork.com/23fdgfdjhdbfuyviofhedfbncxgersbzc34并显示该用户的个人资料

当然,直接访问www.mynetwork.com/23fdgfdjhdbfuyviofhedfbncxgersbzc34只会显示用户的个人资料

1 个答案:

答案 0 :(得分:1)

如果您不愿意为不同的功能使用不同的URL,请执行以下操作:

www.mynetwork.com/nick/john.doe
www.mynetwork.com/hash/23fdgfdjhdbfuyviofhedfbncxgersbzc34

然后,你必须编写一个可以在缺口和散列之间进行区分的函数。在您的示例中,CodeIgniter会同时看到这一点,缺口和哈希:

www.mynetwork.com/{someArg}

你可以这样做:

www.mynetwork.com/view/nickOrHash

控制器:

class View extends CI_Controller
{
    public function index($arg)
    {
        if (strlen($arg) < length_of_hash)
        {
            viewByNick($arg);
        }
        else
        {
            viewByHash($arg);
        }
    }

    public function viewByNick($arg)
    {
    }

    public function viewByHash($arg)
    {
    }
}

您还必须编辑CodeIgniter的URI路由,以便将nickOrHash作为参数发送到index,并且不会在nickOrHash下搜索名为view controller的函数(http://codeigniter.com/user_guide/general/routing.html)

在上面的代码中,将length_of_hash替换为256位AES散列始终具有的长度

编辑:

确定参数是否为缺口或散列的另一种更可靠的方法可能是:

  1. 你收到了争论。如果存在参数哈希的用户,请检入数据库。如果存在,请致电viewByHash($arg)
  2. 如果不存在,则散列$arg,如果存在具有新散列的用户,则再次检查数据库。如果存在,则使用计算的哈希值调用viewByHash(newHash)
  3. 如果不存在,error 404
  4. 路由:

    $route['view/(:any)'] = "view/index/$1";
    

    如果用户请求网址mynetwork.com/view/arg,则codeIgniter会在index()中调用view controller方法,将用户请求网址的最后一部分作为参数传递。

    如果您想直接通过哈希检查,可以将其更改为:

    $route['view/(:any)'] = "view/viewByHash/$1";
    

    如果上述功能失败,则按用户名等检查