5

开始了我的第一个 CI 项目,我只是想知道我如何处理 URL 参数?我有一个名为“city”的控制器,并且我修改了我的 mod_rewrite,因此 localhost/codeigniter 使用重写为 localhost/codeigniter/city。我想要做的是在 URL 的末尾添加一个城市名称并使用 get 段来查询一个表。

所以我的例子是 localhost/codeigniter/edinburgh。我会抓住最后一段,然后创建 sql 查询。但是,我认为当我将爱丁堡放入 URL CI 时,我认为我正在寻找一个名为“爱丁堡”的控制器。

我是否必须添加路由或类似的东西?

4

4 回答 4

9

您确实可以使用路由来执行此操作。

$route[':any'] = "控制器/方法";

这会将您的基本 url 之后的所有内容重定向到该控制器内的指定控制器和方法。要获取 url 段,您可以使用URI helper

$this->load->helper('url'); // 首先加载助手

$city = $this->uri->segment(1);

访问http://localhost/codeigniter/edinburgh时,上例中的 $city 变量将是 edinburgh。

希望有帮助!

PS。您不需要 mod_rewrite 来指定默认控制器。您可以在 Routes 下的 config.php 中设置它。将 city 指定为默认控制器,您就可以摆脱 mod_rewrite。

于 2011-01-10T13:17:15.273 回答
3

是的,您可以使用路线

$route[':any/'] = "myclass/by_city_method";

但是你为什么不使用一个名为(例如)city 的模块来获得经典的 uri 方案呢?

class city extends Controller { 
   public void index($city=false) {
       if ($city) { } else { }
   }
}

编辑:您甚至可以在全局配置文件中选择城市作为默认控制器。

于 2011-01-10T13:09:22.070 回答
2

另一种方法:

路由.php:

$route['city/(:any)'] = "city/city_lookup/$1";

城市.php

<?php 
class City extends Controller {

    function City()
    {
        parent::Controller();
    }

    function city_lookup($id)
    {
        echo "$id";
    }
}
于 2011-01-10T13:31:16.263 回答
0
$path = "/codeignter/city/viewcity/Edinburg";

这将导致City控制器被调用,方法viewcity被执行,参数值为'Edinburg'被传递!

这是您的控制器的代码...

class city extends Controller { 
   public viewcity($city='') {
       echo ($city === '') ? "The city you want to view is {$city}!" : "not defined!";
   }
}

阿门 :)

于 2011-01-10T13:18:26.647 回答