【问题标题】:How to create codeigniter routes dynamically?如何动态创建codeigniter路由?
【发布时间】:2014-07-08 04:54:33
【问题描述】:

我有一个 CI routes.php 如下。

$route['default_controller'] = "site";
$route['404_override'] = 'site';
$route['admin'] = 'admin';
$route[':any'] = 'site/user';

所需的事情是当任何用户名(我将使用数据库检查)输入 URL 时 - localhost/CIproj/username 然后它应该转到 site/user 控制器。

如果“管理员”在 URL 中,例如 - localhost/CIproj/admin,它将转到 admin 控制器(索引功能)。 URL 将更改为localhost/CIproj/admin/dashboard

所以我得到的错误是当我转到localhost/CIproj/admin 时,我得到了登录屏幕。但登录后会转到admin/dashboard。这是我被重定向到site/user 的地方。

然后我尝试了以下一个。

$route['user/(:any)'] = 'site/user';

现在一切正常。但是 URL 会像 - localhost/CIproj/user/username

所以问题是,有没有什么方法可以让我不必在 URL 中写 user。访问者可以在 URL 中键入任何内容。

 localhost/CIproj/anything

如果anything== username from database,它将转到site/user

如果anything== admin or any of its page 它将转到相应的控制器。

否则404pagenotfound.php

注意:Admin 是一个包含许多控制器的巨大模块。所以我认为我不应该在这里为每个管理员控制器编写路由。

【问题讨论】:

    标签: php codeigniter routes url-routing


    【解决方案1】:

    对于网站用户,您可以使用以下内容:

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

    在这里,您将获得 $1 作为用户名的参数,您的 URL 将如下所示:

    localhost/CIproj/anything
    

    【讨论】:

    • 我想你没有得到这个问题。正如你所建议的那样,我肯定会在这里获得用户,但我无法获得管理部分。因为如果管理员登录并且 URL 更改为 admin/dashboard,它将始终重定向到 site/user/
    • 在您检查用户名参数的控制器中,您可以进行额外检查,如果用户名 == admin 而不是将其重定向到 admin/dashboard
    【解决方案2】:

    这是我加载路线的方式https://github.com/EllisLab/CodeIgniter/wiki/Dreamhost-.htaccess

    $route['step_1'] = "install/step_1/index";
    $route['step_2'] = "install/step_2/index";
    $route['step_3'] = "install/step_3/index";
    $route['step_4'] = "install/step_4/index";
    

    【讨论】:

      【解决方案3】:

      只是一动不动。再次检查问题并找到解决方案。 所以问题是,有没有什么方法可以让我不必在 URL 中写用户。访问者可以在 URL 中输入任何内容。

      本地主机/CIproj/任何东西

      如果anything== username from database,它将转到site/user

      如果anything== admin or any of its page 它将转到相应的管理控制器。

      否则404pagenotfound.php

      route.php 会是这样 ->

      $route['default_controller'] = "site";  // controller - site / method - index (404 page).  
      $route['404_override'] = 'site';  // same as above
      $route['(iam:any)'] = 'site/user/$1'; // appending 'iam' to anything user enters. then in 'site' controller and 'user' method I will remove 'iam' from the segment and then check with database username. if found it will proceed to respective user page or else 404 page. 
      

      【讨论】:

        猜你喜欢
        • 2019-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-12
        • 1970-01-01
        • 2023-04-11
        • 2019-09-09
        相关资源
        最近更新 更多