codeigniter中的布线:\
我真的被困在为我的应用程序做路线上,我发现在CI中扎根非常令人困惑 所以我有一些关于每个国家的人的页面,你可以通过在主页的下拉列表中选择一个国家来访问该页面 我设法使用POST方法传递数据,但问题是我不能通过url直接访问这些页面,因为它们的主控制器访问数据库并生成它们 所以现在我所有的页面都有这个urlcodeigniter中的布线:\,codeigniter,url,routes,Codeigniter,Url,Routes,我真的被困在为我的应用程序做路线上,我发现在CI中扎根非常令人困惑 所以我有一些关于每个国家的人的页面,你可以通过在主页的下拉列表中选择一个国家来访问该页面 我设法使用POST方法传递数据,但问题是我不能通过url直接访问这些页面,因为它们的主控制器访问数据库并生成它们 所以现在我所有的页面都有这个url www.site.com/country 国家是控制者 但我想要的是这样的: www.site.com/name-of-country/name-of-person function C
www.site.com/country
国家是控制者
但我想要的是这样的:
www.site.com/name-of-country/name-of-person
function Country($name_of_country, $name_of_person) { ... }
知道怎么做吗?CI中的控制器可以接受参数,就像常规函数一样。这些参数作为URL段传递。因此,如果要键入:
www.site.com/name-of-country/name-of-person
只需这样编写函数:
www.site.com/name-of-country/name-of-person
function Country($name_of_country, $name_of_person) { ... }
要从postdata重定向,请尝试以下操作:
function Country($name_of_country, $name_of_person) {
if ($this->input->post('country') {
redirect('/country/' . $this->input->post('country'));
}
}
有关详细信息,请查看CI中的。控制器可以采用参数,就像常规函数一样。这些参数作为URL段传递。因此,如果要键入:
www.site.com/name-of-country/name-of-person
只需这样编写函数:
www.site.com/name-of-country/name-of-person
function Country($name_of_country, $name_of_person) { ... }
要从postdata重定向,请尝试以下操作:
function Country($name_of_country, $name_of_person) {
if ($this->input->post('country') {
redirect('/country/' . $this->input->post('country'));
}
}
有关更多信息,请查看。您也可以使用一些正则表达式在routes.php文件中设置此选项。这取决于应用程序的设置方式以及路由的控制方式。例如,如果您这样做:
$route['(:any)/(:any)'] = 'country';
你可能会比你想要的更匹配。您可以使用更具体的正则表达式,而不是像那样的通用表达式,或者。。。您可以稍微更改URL结构:
$route['country/(:any)/(:any)'] = 'country/index/$1/$2';
然后,您可以在路由文件中设置该逻辑。如果您有一个routes文件,您应该使用,而不是尝试通过控制器进行路由。您也可以使用一些正则表达式在routes.php文件中进行设置。这取决于应用程序的设置方式以及路由的控制方式。例如,如果您这样做:
$route['(:any)/(:any)'] = 'country';
你可能会比你想要的更匹配。您可以使用更具体的正则表达式,而不是像那样的通用表达式,或者。。。您可以稍微更改URL结构:
$route['country/(:any)/(:any)'] = 'country/index/$1/$2';
然后,您可以在路由文件中设置该逻辑。如果你有一个路由文件,你应该使用,而不是试图通过控制器进行路由。这些答案没有提供足够的信息,而且被接受的答案非常糟糕 处理此问题的最佳方法是设置路由以执行以下操作(如果您希望控制用户能够使用的国家/地区): 将其放入路由文件中:
foreach(array('country1', 'country2') as $country) { // array with allowed countries
$routes[$country.'/(:any)'] = "country/view/{$country}/$1";
$routes[$country] = "country/view/{$country}";
}
这样做的目的是获取允许的国家的数组,然后为每个国家创建路由规则,因此如果用户转到http://example.com/japan/naruto
,它将路由到urlhttp://example.com/country/view/japan/naruto
。这是假设“日本”在您的“允许的国家”数组中
第二个简单地路由urlhttp://example.com/japan
至http://example.com/country/view/japan
进入控制器country.php
:
class Country extends CI_Controller {
function view($country, $username = false) { // $username=false allows you to show just a 'country' page if you want to
if ($username) {
$this->load->view('users_view', array('country' => $country, 'username' => $username));
} else {
$this->load->view('countries_view', array('country' => $country))
}
}
}
我在这里所做的是,您可以只为显示的国家创建一个页面,从您的视图文件夹中加载
国家视图.php
,或者您可以为用户查看页面,加载用户视图.php
页面。这些答案没有提供足够的信息,并且接受的答案非常糟糕…
处理此问题的最佳方法是设置路由以执行以下操作(如果您希望控制用户能够使用的国家/地区):
将其放入路由文件中:
foreach(array('country1', 'country2') as $country) { // array with allowed countries
$routes[$country.'/(:any)'] = "country/view/{$country}/$1";
$routes[$country] = "country/view/{$country}";
}
这样做的目的是获取允许的国家的数组,然后为每个国家创建路由规则,因此如果用户转到http://example.com/japan/naruto
,它将路由到urlhttp://example.com/country/view/japan/naruto
。这是假设“日本”在您的“允许的国家”数组中
第二个简单地路由urlhttp://example.com/japan
至http://example.com/country/view/japan
进入控制器country.php
:
class Country extends CI_Controller {
function view($country, $username = false) { // $username=false allows you to show just a 'country' page if you want to
if ($username) {
$this->load->view('users_view', array('country' => $country, 'username' => $username));
} else {
$this->load->view('countries_view', array('country' => $country))
}
}
}
我在这里所做的是,您可以为显示的国家创建一个页面,从您的视图文件夹中加载
countries\u view.php
,或者您可以为用户查看页面,加载users\u view.php
页面。谢谢,这很好,但是如果用户想扔垃圾,我该如何生成这个url呢e页面然后进入persons页面,如何在url中显示?如果您想使用表单来执行此操作,您可以向您的国家/地区控制器添加一个条件,该条件将查找postdata并根据需要重定向。是的,您是对的,可以通过重定向来完成,我只是想出来,谢谢您的帮助:)谢谢,这很好,但是如果用户选择进入主页,然后进入个人页面,我将如何生成此url,如何在url中显示此url?如果您想使用表单来执行此操作,您可以向您的国家/地区控制器添加一个条件,根据需要查找postdata和重定向。是的,您是对的,可以通过重定向来完成,我只是想如果我有世界上所有的国家,这是工作吗?我在数据库中存储了县名称,每当我激活一个国家时,它应该对用户可见。您需要将它们放入一个数组中,并在该数组上运行foreach()。因此,您宁愿在routes文件中手动维护一个国家数组,也不愿拥有数据库(该数据库已包含相同的信息)你有权限吗?现在,您不仅违反了构建CodeIgniter的MVC体系结构背后的DRY(不要重复自己)原则和驱动原则,还为自己做了很多工作。答案的目的是演示如何做到这一点。该数组可以很容易地从数据库中提取。我还发现你的否决票完全没有道理,因为我的回答没有错。在回答问题时,你的工作不是为某个人做所有的工作,而是“展示自己”