如何将带参数的URI路由到codeigniter中的方法?

时间:2015-07-29 05:09:00

标签: php codeigniter

我对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并将参数传递给该方法。我该怎么办?

4 个答案:

答案 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的文档

http://www.codeigniter.com/docs

答案 2 :(得分:1)

维护您的路由规则

w.toString()

请查看此链接Codeigniter URI Routing

答案 3 :(得分:0)

在CodeIgniter 4中

考虑以id为参数的Show Method的产品控制器

http://www.example.com

/ product / 1

路线定义应为

$ routes-> get(“ product /(:any)”,“ Com \ Atoconn \ Product :: show / $ 1”);