Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
codeigniter中的布线:\_Codeigniter_Url_Routes - Fatal编程技术网

codeigniter中的布线:\

codeigniter中的布线:\,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

我真的被困在为我的应用程序做路线上,我发现在CI中扎根非常令人困惑 所以我有一些关于每个国家的人的页面,你可以通过在主页的下拉列表中选择一个国家来访问该页面 我设法使用POST方法传递数据,但问题是我不能通过url直接访问这些页面,因为它们的主控制器访问数据库并生成它们 所以现在我所有的页面都有这个url

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
,它将路由到url
http://example.com/country/view/japan/naruto
。这是假设“日本”在您的“允许的国家”数组中

第二个简单地路由url
http://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
,它将路由到url
http://example.com/country/view/japan/naruto
。这是假设“日本”在您的“允许的国家”数组中

第二个简单地路由url
http://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(不要重复自己)原则和驱动原则,还为自己做了很多工作。答案的目的是演示如何做到这一点。该数组可以很容易地从数据库中提取。我还发现你的否决票完全没有道理,因为我的回答没有错。在回答问题时,你的工作不是为某个人做所有的工作,而是“展示自己”