首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将CodeIgniter urls转换为用户友好的urls?

如何将CodeIgniter urls转换为用户友好的urls?
EN

Stack Overflow用户
提问于 2018-07-10 09:46:24
回答 3查看 96关注 0票数 0

我已经探讨了很多关于这方面的问题和文章,但我找不到如何做到这一点。

我正在做一个网站,提供手机、平板电脑、电视等多种产品的规格说明。

控制器.规格(创建和显示所有产品的规格)

方法-显示(获取所选模型的详细规格和显示)

方法索引(列出存储在表中的所有模型的名称。这里是我构建锚链接的地方)

Display方法采用三个参数(1、2、3)。

1-产品类型(电话、平板电脑、电视等)

2-型号鼻涕虫(iphone-6,galaxy-tab-s3,bravia-kdl-50w800d等)

3-型号ID (1、4、13等)

我的URL现在是这样的:

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

我想要实现的是如下所示的URL:

localhost/sitename/iphone-6

localhost/sitename/galaxy-tab-s3

localhost/sitename/bravia-kdl-50w800d

我不介意重构我的表/控制器/方法或其他任何东西,如果这可以用任何方式实现。

谢谢你的阅读.

编辑:

Route.php

代码语言:javascript
复制
$route['default_controller'] = 'Specs/index';
$route['404_override'] = 'Errors/show_404';
$route['translate_uri_dashes'] = FALSE;

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

代码语言:javascript
复制
<?php 
    foreach model(in the table)
        echo anchor(specs_controller.display_function.product_type.model_slug.model_id, model_name);
    end foreach
?>
EN

回答 3

Stack Overflow用户

发布于 2018-07-10 13:05:55

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

代码语言:javascript
复制
$route['(:any)'] = function ($1)
{
        $result = 'urlController/urlMethod/'.$1;
        return $result;
};

我不知道该怎么做。有人能建议我如何称呼'urlController/urlMethod‘吗?

票数 0
EN

Stack Overflow用户

发布于 2018-07-10 13:28:47

您可以通过CodeIgniter URI路由来实现它。考虑

localhost/sitename/galaxy-tab-s3

映射到

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

而且,在这种情况下,模型id i.4相对于银河选项卡s3是静态的,因为在简化的s3中没有提到任何这样的Id。

我的理解是,对于每个URL localhost/sitename/__iphone-6,,您需要三个关于字符串'iphone-6'的详细信息。即产品类型、型号-段塞、型号标识。一种方法是写一些类似的东西

代码语言:javascript
复制
$route['sitename/(:any)'] = 'routingController/commonRoutingMethod/$1';

在这里,创建一个新的routingController,并将一些逻辑写入commonRoutingMethod()方法,该方法接受iphone-6这样的字符串,并获取它的所有三个细节(产品类型、模型id等),然后通过使用

代码语言:javascript
复制
header('Location:  http://localhost/sitename/specs/display/$productType/$modelSlug/$modelId/');

注意:在routes.php中使用regex匹配可能有更多的前向方式,因为您根据产品类型和模型id (如p_iphone-6_1或t_galaxy-tab-s3_4 )创建字符串的不同结构。

票数 0
EN

Stack Overflow用户

发布于 2018-07-16 06:41:24

请使用下面的路由代码,以实现它。

代码语言:javascript
复制
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';

如果你需要帮助,请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51262040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档