我的应用程序旨在为每个用户提供一个个人资料页面,第三个细分是用户的ID。
example.com/profile/page/1
假设用户1是“Jon Jovi”,使用CI的路由我想生成这个URI
example.com/jon_jovi
是否可以将此用户的ID发送到config/routes.php
,运行一个函数从数据库中提取用户1的信息并插入
$route['profile/page/$row->id'] = $row->first_name . '_' . $row->last_name;
对于如何做到这一点的任何想法或建议都非常感谢 - 谢谢。
答案 0 :(得分:5)
不确定这需要在你的config/routes.php
中:你为什么不创建一个获取名称并进行查找的控制器?
最简单的方法是使用CodeIgniter 2.0 +覆盖404处理程序和_remap
函数的能力。首先,在 config / routes.php 文件中执行此操作:
$route['404_override'] = 'notfound';
然后创建控制器:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class NotFound extends CI_Controller
{
function __construct()
{
parent::__construct();
}
public function _remap($method)
{
if($this->uri->total_segments() == 1){
// try it out
$this->profile();
}else{
show_404($this->uri->uri_string());
}
}
function profile()
{
echo "Showing profile for [" . $this->uri->segment(1) . "]";
}
}
您必须实现404页面的视图,因为这会覆盖它,但是任何未映射到现有控制器的请求都会在此处进行,您可以根据需要调度它们,包括将名称转换为数据库ID
请告诉我这是否适合您。
答案 1 :(得分:4)
如果您希望“客户端”网址采用base_url/[username]
格式,您可能需要获取一些正则表达式路由的用户名,例如$route['([a-zA-z_]+)'] = "profile/page/$1";
,并在您的数据库中查找该用户。
另一种解决方案是将id附加到网址,例如base_url/[username]/[id]
。为此,正则表达式$route['([a-zA-z_]+)/([0-9+])'] = "profile/page/$2";
会将id作为Profile控制器页面功能的第一个参数传递。
查看文档以获取有关动态路由的更多详细信息:http://codeigniter.com/user_guide/general/routing.html
答案 2 :(得分:0)
你想要扩展CI的路由器和 在传入的请求上查询数据库 用于公司名称列表。如果 URI段与公司名称匹配, 你会想用你的服务来提供它 公司/简介方法。如果是的话 不,你会忽略它,让CI 正常处理它。看看这个 关于这个主题的帖子了解更多 信息:forum link。
在这种情况下,只需将“公司”和“公司/个人资料”替换为“用户名”和“个人资料/页面”,以使其与您的问题相关。