开始我的第一个CI项目,我只是想知道如何处理URL参数?我有一个名为'city'的控制器,我修改了我的mod_rewrite,因此localhost / codeigniter使用重写到localhost / codeigniter / city。我想要做的是在URL的末尾添加一个城市名称,并使用get segment来查询表。
所以我的例子是localhost / codeigniter / edinburgh。我会抓住最后一段,然后创建SQL查询。但是我认为当我将爱丁堡放入URL时,CI认为我正在寻找一个名为“爱丁堡”的控制器。
我是否必须添加路由或类似内容?
答案 0 :(得分:9)
您确实可以使用routing来执行此操作。
$ route [':any'] =“controller / method”;
这会将您的基本网址之后的所有内容重定向到该控制器内的指定控制器和方法。要获取网址细分,您可以使用URI helper。
$这 - >负载>辅助( 'URL'); //首先加载帮助程序
$ city = $ this-> uri-> segment(1);
访问http://localhost/codeigniter/edinburgh时,上面示例中的$ city变量将是爱丁堡。
希望有所帮助!
PS。您不需要mod_rewrite来指定默认控制器。您可以在Routes下的config.php中进行设置。指定city作为默认控制器,你可以摆脱mod_rewrite。
答案 1 :(得分:3)
是的,您可以使用route:
$route[':any/'] = "myclass/by_city_method";
但是你为什么不使用一个名为(例如)城市的模块来获得经典的uri方案呢?
class city extends Controller {
public void index($city=false) {
if ($city) { } else { }
}
}
编辑:您甚至可以在全局配置文件中选择city作为默认控制器。
答案 2 :(得分:2)
另一种方法:
route.php:
$route['city/(:any)'] = "city/city_lookup/$1";
city.php
<?php
class City extends Controller {
function City()
{
parent::Controller();
}
function city_lookup($id)
{
echo "$id";
}
}
答案 3 :(得分:0)
$path = "/codeignter/city/viewcity/Edinburg";
这将导致调用 City 控制器,使用值'Edinburg'的参数执行方法 viewcity !
这是控制器的代码......
class city extends Controller {
public viewcity($city='') {
echo ($city === '') ? "The city you want to view is {$city}!" : "not defined!";
}
}
阿门:)