【发布时间】:2017-01-14 18:31:18
【问题描述】:
我想实现类似www.example.com/alicia的url路由
假设 alicia 不是类名或方法名,就像在 url 中传递数据和某些类我想访问它并想将其用于进一步处理。我如何使用它?提前致谢。
【问题讨论】:
标签: php codeigniter url-routing
我想实现类似www.example.com/alicia的url路由
假设 alicia 不是类名或方法名,就像在 url 中传递数据和某些类我想访问它并想将其用于进一步处理。我如何使用它?提前致谢。
【问题讨论】:
标签: php codeigniter url-routing
您可以使用Codeigniter的内置路由,文件route.php位于您的config文件夹中。
您可以在此处添加:
$route['alicia'] = 'welcome/index/something';
$route['alicia/:any'] = 'welcome/index/someotherthing/$1';
然后在您的控制器中,例如welcome,您只需创建如下函数:
public function index($page = null){
if($page=='something'){
// do what you need to do, for example load a view:
$this->load->view('allaboutalicia');
}
elseif ($page=='someotherthing'){
// here you can read in data from url (www.example.com/alicia/2017
$year=$this->uri->segment(2); // you need to load the helper url previously
}else{
// do some other stuff
}
}
上的文档
评论后编辑:
如果您的 uri 段代表一个变量,例如用户名,那么您应该使用类似 www.example.com/user/alice 的 uri 方案并创建您的路由,例如:
$route['user/:any'] = 'welcome/index/user';
然后在你的控制器中welcome
public function index($page=null){
if($page=='user'){
// do what you need to do with that user
$user=$this->uri->segment(2); // you need to load the helper url
}
else{
// exception
}
}
【讨论】:
这可能会很棘手,因为您不想破坏任何已经工作的现有网址。
如果您使用的是 Apache,则可以设置一个 mod_rewrite 规则,该规则会注意排除每个不是某个名称的控制器。
或者,您可以在基本控制器中创建remap method。
class Welcome extends CI_Controller
{
public function _remap($method)
{
echo "request for $method being handled by " . __METHOD__;
}
}
您可以在该方法中编写逻辑来检查请求的 $method,或者查看 $_SERVER["REQUEST_URI"] 来决定您想要做什么。这可能有点难以解决,但可能是一个很好的开始方式。
另一种可能性,如果你能想出一些方法来区分这些 url 和其他 url,那就是使用 routing functionality of codeigniter 并在 routes.php 文件中定义一个模式匹配规则,将这些名称指向某个控制器处理它们。
我相信 default_controller 将是其中的一个因素。任何实际对应于 controller::method 类的控制器/方法情况都应由该 controller::method 处理。我相信任何不匹配的都将分配给您的 default_controller:
$route['default_controller'] = 'welcome';
【讨论】: