如何将CodeIgniter网址转换为用户友好的网址?

时间:2018-07-10 09:46:24

标签: codeigniter

我已经探讨了很多与此有关的问题和文章,但是我找不到如何完成此工作的方法。

我正在做一个网站,提供一些产品的规格,例如手机,平板电脑,电视等。这是我的工作:
控制器-规格(创建并显示所有产品的规格)
方法-显示(获取所选模型的详细规格并显示)
方法-索引(列出存储在表中的所有模型的名称。这是我建立锚链接的地方)

Display方法采用三个参数(1、2、3)。
1-产品类型(电话,平板电脑,电视等)
2-子弹型(iphone-6,galaxy-tab-s3,bravia-kdl-50w800d等)
3-型号ID(1、4、13等)

我现在的网址是这样的:
本地主机/站点名称/规格/显示/电话/ iphone-6 / 1
本地主机/站点名称/规格/显示/平板电脑/ galaxy-tab-s3 / 4
本地主机/站点名称/规格/显示/电视/ bravia-kdl-50w800d / 13

我想要实现的是这样的URL:
本地主机/站点名称/ iphone-6
本地主机/站点名称/ galaxy-tab-s3
本地主机/站点名称/ bravia-kdl-50w800d

如果可以使用任何方法实现,我都不介意重组我的表/控制器/方法或其他任何方法。

感谢您的阅读。

编辑:
Route.php

$route['default_controller'] = 'Specs/index';
$route['404_override'] = 'Errors/show_404';
$route['translate_uri_dashes'] = FALSE;

这就是我构建锚链接的方式(view_file-> index.php,从Index方法调用):

<?php 
    foreach model(in the table)
        echo anchor(specs_controller.display_function.product_type.model_slug.model_id, model_name);
    end foreach
?>

3 个答案:

答案 0 :(得分:0)

我可以使用route.php中的以下代码获得所需的URL。唯一的问题是我无法使'urlController / urlMethod'返回可以分配给$ result变量的函数值。

$route['(:any)'] = function ($1)
{
        $result = 'urlController/urlMethod/'.$1;
        return $result;
};

我不确定该怎么做。有人可以建议我怎么称呼'urlController / urlMethod'吗?

答案 1 :(得分:0)

您可以使用CodeIgniter URI路由来实现。考虑

  

localhost / sitename / galaxy-tab-s3

映射到

  

localhost / sitename / specs / display / tablets / galaxy-tab-s3 / 4

而且, 型号id ,即4,在这种情况下,相对于银河标签s3 是静态的,因为您没有提到任何简化网址中的此类ID。

我的理解是每个URL localhost / sitename / iphone-6 都需要有关字符串'iphone-6'的三个详细信息。即产品类型,型号标头,型号ID。一种方式可能是写类似

$route['sitename/(:any)'] = 'routingController/commonRoutingMethod/$1';

在这里,创建一个新的 routingController 并将一些逻辑写入 commonRoutingMethod()方法,该方法将使用 iphone-6 之类的字符串并提取其所有三个详细信息,即产品类型,型号ID等。然后使用

通过构建确切的网址进行重定向
header('Location:  http://localhost/sitename/specs/display/$productType/$modelSlug/$modelId/');
  

注意:考虑到您要根据产品类型和型号ID创建字符串的差异结构,例如p_iphone-6_1或t_galaxy-tab-s3_4,可以在route.php中使用正则表达式匹配有更多前进的方式。

答案 2 :(得分:0)

请使用下面的路由代码来实现。

localhost/sitename/specs/display/phones/iphone-6/1
localhost/sitename/specs/display/tablets/galaxy-tab-s3/4
localhost/sitename/specs/display/tv/bravia-kdl-50w800d/13

localhost/sitename/iphone-6
localhost/sitename/galaxy-tab-s3
localhost/sitename/bravia-kdl-50w800d

$route['(:any)'] = 'specs/display/$1/$1/$1';

让我知道您是否需要任何帮助。