如何在codeigniter中传递索引函数中的参数

use*_*983 17 php codeigniter

这是url的一个示例:http: //www.example.com/search/search-keyword

我试图使这项工作,我使用.htaccess删除index.php,搜索是控制器,我想在索引方法中传递一个参数.

这是目前的样子:

class Search extends CI_Controller{

    function index($param){
        echo $param;
    }

}
Run Code Online (Sandbox Code Playgroud)

有什么建议?我似乎无法使其发挥作用

Wes*_*rch 32

  • 你需要这个index细分http://www.example.com/search/index/search-keyword.
  • 或者您需要使用路线 $route['search/(:any)'] = 'search/index/$1';
  • 或者你可以看看重新映射

切记不要相信用户输入,特别是当您将其投入网址时.最新版本的CI $_GET现在支持变量,因此您可能需要考虑使用该变量或flashdata.一个简单的searh术语O' Brien会给你一个致命的错误("你提交的URI不允许使用字符.").


小智 23

class Search extends CI_Controller{

    function _remap($param) {
        $this->index($param);
    }

    function index($param){
        echo $param;
    }

}
Run Code Online (Sandbox Code Playgroud)

然后,您应该能够访问:/ search/123123:并且页面将回显"123123"或您放置的任何内容.


小智 13

function _remap($parameter){

        $this->_index($parameter);

}
Run Code Online (Sandbox Code Playgroud)

试一试,告诉我们它是怎么回事.

  • 这没有索引的_前面 (6认同)

Bil*_*ill 6

大多数这些解决方案只有index()在控制器中只调用一个函数时才有效.如果你的路线有这个:

$route['search/(:any)'] = 'search/index/$1';
Run Code Online (Sandbox Code Playgroud)

在您的路线中使用上述内容,会发生什么是您的搜索功能将起作用,但如果您将任何其他功能添加到同一个控制器,它们都将被重定向到/search/index/$1.

我能想到的唯一解决方案是允许您使用所需的URL,同时仍然可以向搜索控制器添加任何其他功能,这是为路由文件添加一种混乱的条件.这是它的样子和它的作用:

$request = $_SERVER['REQUEST_URI']; // Only add this for readability if(!strpos($request, 'search/another_function') || !strpos($request, 'search/more_functions')) { $route['search/(:any)'] = 'search/index/$1'; }

这样做基本上是说"如果请求的URL不包含我的任何搜索控制器函数的名称,那么它必须用于索引,因此我们将激活索引的路由规则".

这将允许您在search/any_other_functions_you_have没有问题的情况下接受请求,并且仅在请求URI与其中任何一个不匹配时激活隐藏索引函数的规则.

这样做的一个副作用是你永远不会得到404.例如,如果有人输入了像"yourdomain.com/search/something"这样的网址,并且他们希望它显示非搜索结果页面,那么他们将无法获得404警告他们没有这样的页面,而应用程序将假设他们键入的是搜索词.然而,听起来这对你来说并不是什么大问题,我也不认为让一个控制器无法回复404这是一件非常糟糕的事情.