【问题标题】:how to create Codeigniter route that doesn't override the other controller routes?如何创建不覆盖其他控制器路由的 Codeigniter 路由?
【发布时间】:2011-02-01 17:17:22
【问题描述】:

我的 Codeigniter 应用中有很多控制器,例如:Signup、Profile、Main 等。

现在我想构建“User”控制器。

我想要什么:

  • 如果人们访问 url:example.com/signup,我想使用默认路由到“Signup”控制器
  • 如果人们访问 url:example.com/bobby.ariffin,我想将其重新路由到“User”控制器,因为该 url 没有被任何控制器处理我的应用。

我在我的 config/routes.php 中创建了这个:

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

但它覆盖了我的应用程序中到“User”控制器的所有路由。

Codeigniter 有没有不覆盖其他控制器路由的简单路由?

更新---

我有一个简单的正则表达式来解决这个问题,来自:Daniel Errante's Blog

$route['^(?!ezstore|ezsell|login).*'] = “home/$0″;

其中 ezstore、ezsell 和 login 是您的应用程序中控制器的名称。

【问题讨论】:

    标签: codeigniter routes


    【解决方案1】:

    您也可以为此使用 foreach 语句。这样你就可以把你的控制器放在一个漂亮整洁的列表中。

    $controller_list = array('auth','dashboard','login','50_other_controllers');
    
    foreach($controller_list as $controller_name)
    {
        $route[$controller_item] = $controller_name;
    }
    
    $route['(:any)'] = "user/display/$1";
    

    【讨论】:

      【解决方案2】:

      您将不得不明确定义所有这些路线。否则,您将始终以“user_controller”结束。

      $route['signup'] = "signup";
      $route['(:any)'] = "user/display/$1";
      

      或类似的东西。它们按顺序运行,因此首先定义的将首先发生。因此,如果您捕获 (:any),您将向该控制器发送 ANYTHING。

      还请记住,您可以使用正则表达式,所以如果您知道总会有一个 '.'在那里,你可以测试一下。

      【讨论】:

      • “你将不得不明确定义所有这些路线” 哎哟!真的很严格。是的,我想我应该这样做。感谢分享...
      猜你喜欢
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      • 1970-01-01
      • 2015-08-01
      • 2016-07-16
      • 1970-01-01
      • 2015-02-27
      相关资源
      最近更新 更多