codeigniter 如何将2个参数发送到控制器?

bnlyeluc  于 2022-12-06  发布在  其他
关注(0)|答案(3)|浏览(172)

这看起来真的很基本,但我不能得到它的窍门。
我尝试向控制器中的一个方法发送多个参数,如下所示:

http://localhost/ci/index.php/subjects/3/state

这是我试过的路线:

$route['subjects/(:num)'] = 'subjects/view/$1';
$route['subjects/(:num)/{:any}'] = 'subjects/view/$1/$2';

该方法接受2个参数:

public function view($slug, $id = null){

}

但是我似乎得到了一个404。我如何让这个工作?我需要视图方法总是接受1个参数和可选的其他参数。

注意:我将包括url帮助程序。

t1rydlwq

t1rydlwq1#

您路由括号有问题,只需将其从{}更改为()括号即可

$route['subjects/(:num)/{:any}'] = 'subjects/view/$1/$2';

$route['subjects/(:num)/(:any)'] = 'subjects/view/$1/$2';
ni65a41a

ni65a41a2#

始终维护路由规则
喜欢

$route['subjects/(:num)/(:any)/(:any)/(:any)'] = 'subjects/view/$1/$2/$3/$4';
$route['subjects/(:num)/(:any)/(:any)'] = 'subjects/view/$1/$2/$3';
$route['subjects/(:num)/(:any)'] = 'subjects/view/$1/$2';

始终遵循此路由模式
如果你这样加

$route['subjects/(:num)/(:any)'] = 'subjects/view/$1/$2';
$route['subjects/(:num)/(:any)/(:any)/(:any)'] = 'subjects/view/$1/$2/$3/$4';
$route['subjects/(:num)/(:any)/(:any)'] = 'subjects/view/$1/$2/$3';

则第一条件每次总是为真。
另请参考此链接--〉codeigniter routing rules

xqk2d5yq

xqk2d5yq3#

我曾经尝试过这种URI模式

$route['(:any)'] = 'welcome/list1/$1';
$route['(:any)/(:num)'] = 'welcome/list1/$1/$2';

$route['(:any)/(:any)'] = 'welcome/list2/$1/$2';
$route['(:any)/(:any)/(:num)'] = 'welcome/list2/$1/$2/$3';

$route['(:any)/(:any)/(:any)'] = 'welcome/list3/$1/$2/$3';

但是它不起作用...所以我用正则表达式替换了它
([a-z 0-9 -]+)替换了(:any)([0-9]+)替换了(:num)
所以它变成了

$route['([a-z 0-9 -]+)'] = 'welcome/list1/$1';
$route['([a-z 0-9 -]+)/([0-9]+)'] = 'welcome/list1/$1/$2';

$route['([a-z 0-9 -]+)/([a-z 0-9 -]+)'] = 'welcome/list2/$1/$2';
$route['([a-z 0-9 -]+)/([a-z 0-9 -]+)/([0-9]+)'] = 'welcome/list2/$1/$2/$3';

$route['([a-z 0-9 -]+)/([a-z 0-9 -]+)/([a-z 0-9 -]+)'] = 'welcome/list3/$1/$2/$3';

而且对我很有效:)
为了访问控制器中的变量,您可以在函数中指定任何参数。

class Welcome extends CI_Controller {

    public function list($first, $second)
    {
        var_dump($first);
        var_dump($second);
    }
}

相关问题