如何在codeigniter中实现这种url路由

时间:2017-01-14 18:31:19

标签: php codeigniter url-routing

我希望实现类似www.example.com/alicia的网址路由 假设alicia不是类名或方法名,就像在url中传递数据一样,我希望使用某些类来访问它,并希望将其用于进一步的过程。如何使用它?提前谢谢。

2 个答案:

答案 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
  }
}

routing 以及 urlhelper

上的文档

评论后修改:

如果你的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';