我正在努力找出在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和路由的urlencode
和urldecode
在配置中添加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 ;
}
}