【问题标题】:Routing in CodeIgniter for (:any)CodeIgniter 中的路由 (:any)
【发布时间】:2017-05-11 07:04:12
【问题描述】:

我正在尝试让我的 CodeIgniter 应用程序的工作方式与 WordPress 类似。

我希望能够制作这些类型的网址:

http://www.example.com/my-post-example

http://www.example.com/new-headline-here

http://www.example.com/i-love-stackoverflow

我的路线:

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

它将调用我的核心控制器并将页面名称传递给索引函数。

然后我在我的数据库中查找页面名称并将页面显示给用户。到目前为止一切顺利。

但是,有时我想调用另一个控制器。例如:

http://www.example.com/admin/edit_page/3

http://www.example.com/admin/settings

现在我假设我的路由只会抓取所有这些规则并将它们发送到我的核心控制器。有没有办法对某些页面进行例外处理?或者在我的核心控制器中进行这项检查是个好主意。

例如,

if ($page not in DB) {
   // Call controller/method
}

这似乎有点多余,因为我只想让 CodeIgniter 处理这个。

【问题讨论】:

    标签: php wordpress codeigniter


    【解决方案1】:

    您使用的路由规则可以满足您的目的。

    如果你使用http://www.example.com/admin/edit_page/3这个链接,它会向你发送admin控制器和edit_page方法。它不会使用路由any规则。

    但是,如果您的链接看起来像这样,您会遇到一个问题

    http://www.example.com/my-post-example/test
    

    它会尝试去my-post-example控制器和测试方法。

    再次http://www.example.com/admin 将使用路由any 规则,这意味着它将您重定向到核心控制器而不是admin/index。在这种情况下,您的网址应该是 http://www.example.com/admin/index

    最后如果您使用控制器/方法名称调用其他链接,则可以使用您的 any 规则

    【讨论】:

    • 谢谢!有没有办法匹配任何 URL 模式?包括 /?所以 admin/edit/lol/ 也会去 core/index 吗?还是我必须一直添加 (:any)/(:any)/(:any)?
    • 在 $route['(:any)'] = "core/index/$1";rule $route['admin/edit/lol'] = "core/index"; 之前添加另一条规则
    • 如果我想将任何数据路由到函数怎么办,例如:admin/edit/lol => core/index 以及 admin/new/test => core/index。有没有比添加每个单独的规则更好的方法?像 route['admin/(:any)/(:any)'] - 但有可能添加第 3、第 4 和第 5 个直到无限。
    • 是的,您可以编写任意数量的规则。但是你必须保持秩序。您可以通过为类似类型的规则编写一个规则来优化代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 2016-06-11
    • 1970-01-01
    相关资源
    最近更新 更多