如何使codeigniter用户配置文件url看起来很漂亮



我正在努力找出在codeigniter中制作好看的配置文件URL的最佳方法。

通常情况下,我只想用第三个url参数(配置文件id)作为控制器,如下所示:

http://thesite.com/profile/4

======

这对我现在正在构建的网站不起作用,因为我想要一个漂亮的url,上面有公司名称,比如:

http://thesite.com/profile/some-company-name

=======

他们有两个问题,也许我今天没有想清楚,答案很明显,但如果url是公司名称的连字符版本,如果同一家公司的2个因为某种奇怪的原因在数据库中,那么配置文件可能不是正确的,真正唯一的好方法是提供配置文件id并按id提取,但我的url看起来不太好。。。

你将如何处理这种情况?我想我可以一直链接到/profile/id,然后在控制器中查找配置文件并重定向到/profile/公司名称,但随后转到网站并输入/profile/公司名称的用户会得到一个404页面。

有什么好主意吗?

只需查看指南,它就会显示URL Helper:

设置一个模型来处理getter/setter(用于配置文件名称)。Getter获取要显示的正确内容,setter设置配置文件名称并处理重复项(通过添加1等来处理相同的名称)。如果你不想要难看的东西,可以考虑一种创造性的方法来消除冲突,添加状态名或zip。

使用url_title()处理干净的url并消除奇数字符:

$title = "What's wrong with CSS?";
$url_title = strtolower(url_title($title));
// Produces: whats-wrong-with-css

使用php和路由的urlencodeurldecode在配置中添加route.php

$route['profile/(:any)'] = "controller_link/$1";

然后你可以在你的控制器文件上使用urldecode,比如

public function controller_link($name=FALSE)
{
if ($name != FALSE) {//check if name is passed 
$queryname = urldecode($name);
//then query on that name in the database
}
}

如果不清楚,请添加注释。

在数据库中使用公司的唯一名称,按名称搜索您的公司,我使用此函数(helper)在slug中翻译名称。

if(!function_exists('slug')){
function slug($text)
{        
// replace non letter or digits by -
$text = preg_replace('~[^\pLd]+~u', '-', $text);
// trim
$text = trim($text, '-');
// transliterate
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
// lowercase
$text = strtolower($text);
// remove unwanted characters
$text = preg_replace('~[^-w]+~', '', $text);
return (!empty($text)) ? $text : FALSE ; 
}
}