我希望实现类似www.example.com/alicia
的网址路由
假设alicia不是类名或方法名,就像在url中传递数据一样,我希望使用某些类来访问它,并希望将其用于进一步的过程。如何使用它?提前谢谢。
答案 0 :(得分:1)
您可以使用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
}
}
答案 1 :(得分:0)
这可能很棘手,因为您不想破坏已经有效的任何现有网址。
如果您使用的是Apache,则可以设置一个mod_rewrite规则,该规则注意要排除每个不属于某个名称的控制器。
或者,您可以在基本控制器中创建remap method。
class Welcome extends CI_Controller
{
public function _remap($method)
{
echo "request for $method being handled by " . __METHOD__;
}
}
您可以在该方法中编写逻辑来检查请求的$方法,或者查看$ _SERVER [“REQUEST_URI”]来决定您想要做什么。这可能有点难以理清,但可能是一个很好的入门方式。
另一种可能性,如果你能想出一些方法来区分这些网址和其他网址,那就是使用routing functionality of codeigniter并在routes.php文件中定义一个模式匹配规则,将这些名称指向某些处理它们的控制器。
我相信default_controller将是其中的一个因素。任何实际对应于controller ::方法类的控制器/方法情况都应由该控制器::方法处理。我相信任何不匹配的东西都会被分配给你的default_controller:
$route['default_controller'] = 'welcome';