如何在 CodeIgniter 中设计用户友好的 URI?

Posted

技术标签:

【中文标题】如何在 CodeIgniter 中设计用户友好的 URI?【英文标题】:How to design a User Friendly URI in CodeIgniter? 【发布时间】:2011-08-05 14:59:17 【问题描述】:

我是 CodeIgniter 的新手。

我需要设计一个简单的网站,从数据库中提取信息。数据库中的信息是关于广告的。我有关于国家、国家区域、区域位置和广告类型的信息。

我的目标是有一个类似的 URI:

http://www.someurl.com/index.php/country/country_zone/zone_location/ad_type/title_of_ad

有一些关于如何使用 CodeIgniter 执行此操作的信息?

最好的问候,

【问题讨论】:

CI Reactor 支持查询字符串——你最好看看这个,因为这样的 URI 可能很快就会让人困惑,而 ?country=uk&zone=sw&ad_type=full&title=foo 至少有一些语义意义(也许也来自SEO 视角和用户) 我认为显示当前 URL 的实际外观对您来说是有意义的。大约有一百万种方法可以完成您的要求,这将取决于您正在使用的内容。我也会发布你的控制器。 【参考方案1】:

链接中的前 2 个参数是您的控制器名称和您要调用的该控制器的方法。

所以

http://www.someurl.com/index.php/country/country_zone/zone_location/ad_type/title_of_ad

意味着您调用country 控制器的country_zone 方法并将zone_location、add_type 和title_of_ad 传递给该方法。

你想要什么

http://www.someurl.com/index.php/TheControler/themethod/country/country_zone/zone_location/ad_type/title_of_ad

这样实现:

class TheControler extends Controler
    function themethod($country,$country_zone,$zone_location,$ad_type,$title_of_ad)
        //your code
    

【讨论】:

【参考方案2】:

我认为最简单的方法是在您的 application/config/routes.php 中使用自定义路由。像这样的:

$route['^(:any)/(:any)/(:any)/(:any)/(:any)'] = "your_controller/get_ads/$1/$2/$3/$4/$5";

那么您的控制器功能将类似于:

function get_ads($country, $country_code, $zone_location, $ad_type, $title_of_ad) 
    // your code

.. 如果参数有某种模式,您可以用更具体的正则表达式替换 (:any)

【讨论】:

以上是关于如何在 CodeIgniter 中设计用户友好的 URI?的主要内容,如果未能解决你的问题,请参考以下文章

如何在efcore中设计一对多关系?

如何在codeigniter中设置持久登录?

如何在 reduxjs 中设计独立模块?

如何在salesforce中设计dashboard

您将如何在 Ruby 中设计这样的 DSL?

在 Codeigniter 中设置表单的“名称”属性