Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在CodeIgniter中实现此URI方案?_Php_Codeigniter - Fatal编程技术网

Php 如何在CodeIgniter中实现此URI方案?

Php 如何在CodeIgniter中实现此URI方案?,php,codeigniter,Php,Codeigniter,我正在用CodeIgniter创建一个博客站点,我想使用第一个URI段作为一个动态类别 所有这些URI: http://example.com/category2/some-post 将全部转到“categories”控制器,在那里它将从数据库中找到类别 我可以用$routes['(:any)]='categories'轻松实现这一点,但当然,我的所有其他静态控制器都无法工作,例如管理员、用户等 那么,如何在允许其他静态页面不被路由的情况下实现此URI方案呢?除非手动为每个类别创建特定路由,否

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

所有这些URI: http://example.com/category2/some-post

将全部转到“categories”控制器,在那里它将从数据库中找到类别

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


那么,如何在允许其他静态页面不被路由的情况下实现此URI方案呢?

除非手动为每个类别创建特定路由,否则无法实现

例如:

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

如果你看wordpress,它们以
/category/
开始分类,并且所有页面都是其他任何页面,因此你可能应该这样做。

正如Francois所说,你必须为每个分类创建一条路线。这可以通过以下简单数组稍微简化:

$categories = array('cat1','cat2','etc...');

foreach($categories as $cat)
{
    $routes["$cat/(:any)"] = "category/$cat/\$1"
}
一种可能的替代方法是使用预控制器钩子,在该钩子中可以查询数据库以查看该段是否为类别,然后适当地引导请求


如果你会有很多类别,或者它们会被频繁地添加和更新,我推荐第二个选项,否则,维护一个简单的数组并不太糟糕。

另一个选项是声明路由中的所有静态控制器