【问题标题】:Building Codeigniter URLs with variable segments使用可变段构建 Codeigniter URL
【发布时间】:2012-06-07 19:42:28
【问题描述】:

我已经在 CI 用户指南和 Stackoverflow 上搜索了我的问题的解决方案,但找不到。所以,这是我的问题。

我需要建立对 SEO 友好的 URL。我有一个名为“Outlets”的控制器,我需要生成的视图将具有类似 http://www.mysite.com/[city]/[area]/[outlet-name] 的 URL 结构。

细分城市和地区是它们各自表中的字段,而 outlet_name 是表“Outlets”中的字段。

我可以生成像http://www.mysite.com/outlets/123 这样的 URL,但是如何将城市和地区名称添加到 URL。

【问题讨论】:

    标签: php codeigniter url-routing codeigniter-2 codeigniter-routing


    【解决方案1】:

    如果你所有的页面都使用同一个控制器,在 config/routes.php 添加这个...

    $route['(:any)/(:any)/(:any)'] = "outlets/$1/$2/$3";
    $route['(:any)/(:any)/(:any)/(:any)'] = "outlets/$1/$2/$3/$4"; // fixed typo
    

    在控制器中,您将需要重新映射函数调用,因为 Codeigniter 将寻找具有城市名称的函数并且它们不存在。

    http://codeigniter.com/user_guide/general/controllers.html#remapping

    public function _remap($city, $area, $outlet, $options = '')
    {
      $this->some_function_below($city, $area, $outlet, $options);
    }
    

    【讨论】:

    • 感谢您的回答。我有不止一个控制器。另外,如果我需要向 URL 传递额外的段,例如mysite.com/[city]/[area]/[outlet-name]/[outlet-pictures]/123,该怎么办。我是否应该简单地向路由规则添加两个参数。
    • 您可以使用路由来传递变量,也可以在控制器中测试它们。我在上面编辑了答案以显示传递更多选项。 URL 将保留 (mysite.com/[city]/[area]/[outlet-name]/[outlet-pictures]/123) 因此在控制器中您仍然可以测试段 4 和 5。在您的重映射功能中可以根据你的变量调用不同的函数。
    【解决方案2】:

    另一种替代解决方案。

    您可以使用 URI 段。对于像 http://www.mysite.com/[city]/[area]/[outlet-name] 之类的网址

    <?php
    
    $this->uri->segment(3);  // city
    $this->uri->segment(4);  // area
    $this->uri->segment(5);  // outlet-name
    
    ?>
    

    等等...更多详情请参阅http://codeigniter.com/user_guide/libraries/uri.html

    【讨论】:

    • 我的理解是 $this->uri->segment() 用于检索 URL 的段。我面临的问题与检索 URL 段无关,而是设置用于加载视图的段。再次澄清,我想建立一个像mysite.com/[city]/[area]/[outlet-name] 这样的URL,它应该在mysite.com/outlets/123 加载出口详细信息视图。问题是如何将城市和地区名称传递给 URL。看来我需要反向路由方面的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    相关资源
    最近更新 更多