我对codeigniter中的路由概念了解不多,我想将许多参数传递给单个方法,如本http://www.codeigniter.com/userguide2/general/controllers.html教程页面所述。
在网址中我有这个
http://localhost/code_igniter/products/display/2/3/4
在我的routes.php中,我写过
$route['products/display/(:any)'] = 'Products_controller/display';
我认为它会将所有参数(此处为2/3/4)传递给方法'显示'自动但我得到404页面未找到错误。
一般来说,我想实现类似的东西,如果URI是controller/method
我想路由到someother_controller/its_method
并将参数传递给该方法。我该怎么办?
答案 0 :(得分:7)
在CI 3.x中,(:any)参数仅匹配单个URI段。例如:
$route['method/(:any)/(:any)'] = 'controller/method/$1/$2';
将恰好匹配两个段并适当地传递它们。如果你想匹配1或2你可以这样做(按顺序):
$route['method/(:any)/(:any)'] = 'controller/method/$1/$2';
$route['method/(:any)'] = 'controller/method/$1';
您可以使用(。+)参数传递多个段,如下所示:
$route['method/(.+)'] = 'controller/method/$1';
在这种情况下,$ 1将包含过去方法/的所有内容。一般来说,我认为它不鼓励使用它,因为你应该知道传递的是什么,并适当地处理它,但有时(。+)派上用场。例如,如果您不知道传递了多少参数,则可以捕获所有这些参数。还要记住,您可以在方法中设置默认参数,如下所示:
public function method($param=''){}
因此,如果没有传递任何内容,您仍然拥有有效值。
你也可以传递给你的索引方法:
$route['method/(:any)/(:any)'] = 'controller/method/index/$1/$2';
$route['method/(:any)'] = 'controller/method/index/$1';
显然这些只是一些例子。您还可以包含文件夹和更复杂的路由,但这应该可以帮助您入门。
答案 1 :(得分:3)
在codeigniter 3上
确保您的控制器在文件名和类名
上有首字母大写字母应用程序>控制器> products_controller.php文件强>
<?php
class Products_controller extends CI_Controller {
public function index() {
}
public function display() {
}
}
在路线上
$route['products/display'] = 'products_controller/display';
$route['products/display/(:any)'] = 'products_controller/display/$1';
$route['products/display/(:any)/(:any)'] = 'products_controller/display/$1/$2';
$route['products/display/(:any)/(:any)/(:any)'] = 'products_controller/display/$1/$2/3';
Codeigniter 3和2的文档
答案 2 :(得分:1)
答案 3 :(得分:0)
在CodeIgniter 4中
考虑以id为参数的Show Method的产品控制器
http://www.example.com
/ product / 1
路线定义应为
$ routes-> get(“ product /(:any)”,“ Com \ Atoconn \ Product :: show / $ 1”);