Php 从Codeigniter中的DB重命名url

Php 从Codeigniter中的DB重命名url,php,codeigniter,url-rewriting,Php,Codeigniter,Url Rewriting,我创建了一个包含url为的产品的网站:。我想把那些ID改成更适合搜索的名字。所有这些ID在数据库中都有一个名称。是否可以从数据库中获取这些名称并将其放入URL中?这是因为我不能使用路由工具。产品和品牌是动态的,可以随时删除或更改(名称)。所以不能硬编码到路由中 感谢您的努力您应该能够通过为品牌标识和产品标识设置一些通配符路由来实现这一点。在对产品执行查询时,只需检查URI段是整数(ID)还是字符串(名称),然后相应地查询数据库。我会存储一个URL友好版本的产品名称(替换空格和特殊字符),然后查询

我创建了一个包含url为的产品的网站:。我想把那些ID改成更适合搜索的名字。所有这些ID在数据库中都有一个名称。是否可以从数据库中获取这些名称并将其放入URL中?这是因为我不能使用路由工具。产品和品牌是动态的,可以随时删除或更改(名称)。所以不能硬编码到路由中


感谢您的努力

您应该能够通过为
品牌标识
产品标识
设置一些通配符路由来实现这一点。在对产品执行查询时,只需检查URI段是整数(ID)还是字符串(名称),然后相应地查询数据库。我会存储一个URL友好版本的产品名称(替换空格和特殊字符),然后查询它,并使用它在整个应用程序中生成链接

更新:以下是一个代码示例,用于您在路由所有内容的方法中所需的逻辑:

public function search($brand, $product)
{
    if (is_int($brand))
    {
        // Look up the brand using an ID
        $this->db->where('id', $brand);
    }
    else
    {
        // Look up the brand based on the URI segment
        $this->db->where('uri_friendly_name', $brand);
    }

    // Do the same with adding conditionals for $product and then run the query
}
以下是您需要的路线示例:

$route['controller/function/(:any)/(:any)'] = "controller/search";

您可以使用
\u remap
Codeigniter内置函数在url中使用多个函数: 在控制器内使用以下功能:

public function _remap($method){
if ($method == 'project-name')
{
   //display project1
}
elseif($method == 'project-name2')
{
   //display project2
}
使用参数的另一个示例:

public function _remap($method, $params = array())
{
    $method = 'process_'.$method;
    if (method_exists($this, $method))
    {
        return call_user_func_array(array($this, $method), $params);
    }
    show_404();
}
$method
是Url中的
函数

通过从数据库中提取不同的方法,可以对它们执行相同的操作


请看这里:

我想,这是mod_rewrite的功能,但我从未使用过它。请检查一下,如果该品牌的品牌名和产品名称是唯一的,您可以更改方法以接受名称而不是ID。只需按名称而不是id进行搜索。如果名称包含空格或重音符号,则可以为每个产品和品牌存储一个额外的url友好且唯一的名称,然后按该名称进行搜索。id在自己的表中是唯一的。我有一张名为“品牌、类型和产品”的桌子。这些在产品中的ID号上连接在一起。是否可以从表类型和品牌中获取这些ID的值,并将这些值作为名称从路由配置文件放置在url中?因此,为了创建一个完整的动态生成的路由系统,我现在所做的是将站点url设置为somesite.com/products(路由到controller/function),但我似乎无法在路由配置文件中找到从DB(表类型和品牌)获取所有值的正确函数。并将id替换为值。但正如您所说的,要创建一个额外的字段,如何才能将这些值显示为链接?我不确定是否理解您的设置,但您不希望在实际的routes配置文件中执行此操作,而是希望在控制器或模型中执行所有操作。我将用一个代码示例更新我的答案。有道理,这是开始的方式。需要大量的重新编码,但这一切都很好!非常感谢你!这是为了控制整个控制器/方法分配。我想要的是将de brand和type_ID号更改为其定义的名称,该名称保存在DB中。但我不知道这个功能存在,似乎对其他项目非常有用!非常感谢你!