【问题标题】:How can I achieve this URI scheme in CodeIgniter?如何在 CodeIgniter 中实现这个 URI 方案?
【发布时间】:2011-06-24 17:16:45
【问题描述】:

我正在使用 CodeIgniter 创建一个博客站点,我想将第一个 URI 段用作动态类别。

所以所有这些 URI 的: http://example.com/category1/some-post http://example.com/category2/some-post http://example.com/category3/some-post

都会转到“类别”控制器,在那里它会从数据库中找到类别。

我可以使用 $routes['(:any)'] = 'categories'; 轻松实现这一点,但当然我的所有其他静态控制器都无法正常工作,例如管理员、用户等。

那么如何在不路由其他静态页面的同时实现这个 URI 方案呢?

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    除非您手动为每个类别创建特定路线,否则您不能这样做。

    例如:

    $route['php'] = 'categories';
    $route['java'] = 'categories';
    

    【讨论】:

      【解决方案2】:

      如果您查看 wordpress,它们以 /category/ 开头类别,所有页面都是其他内容,因此您可能应该这样做。

      【讨论】:

        【解决方案3】:

        正如弗朗索瓦所说,您必须为每个类别创建一条路线。这可以通过一个简单的数组稍微简化如下:

        $categories = array('cat1','cat2','etc...');
        
        foreach($categories as $cat)
        {
            $routes["$cat/(:any)"] = "category/$cat/\$1"
        }
        

        一种可能的替代方法是使用预控制器挂钩,您可以在其中查询数据库以查看该段是否是一个类别,然后适当地引导请求。

        如果您有很多类别,或者它们会被频繁添加和更新,我推荐第二种选择,否则,维护一个简单的数组也不错。

        【讨论】:

          【解决方案4】:

          另一种选择是在路由中声明所有静态控制器...

          【讨论】:

            猜你喜欢
            • 2011-01-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-04-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多