【问题标题】:How to achieve this kind of url routing in codeigniter如何在codeigniter中实现这种url路由
【发布时间】:2017-01-14 18:31:18
【问题描述】:

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

【问题讨论】:

    标签: php codeigniter url-routing


    【解决方案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
      }
    }
    

    routingurlhelper

    上的文档

    评论后编辑:

    如果您的 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
      }
    }
    

    【讨论】:

    • 此路由方法需要为您可能要路由的每个名称设置不同的规则。不确定,但我感觉 OP 正在寻找适用于您可能指定的任意名称的东西。有点像 twitter.com/username
    【解决方案2】:

    这可能会很棘手,因为您不想破坏任何已经工作的现有网址。

    如果您使用的是 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';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      相关资源
      最近更新 更多