CodeIgniter - 使用GET变量路由URL

时间:2015-05-21 19:05:21

标签: php codeigniter codeigniter-routing codeigniter-3

我检查了类似的问题,但那些似乎没有帮助。

我有一个类似的电子邮件验证,即在CodeIgniter中路由到正确的函数,并将数据传递给函数进行进一步处理。

示例网址:

http://mysite.dev/verify/?id=emailaddress@gmail.com&hash=562828a975740ac6820e40f7f61b4407

当前路线:

$route['verify/(:any)'] = 'formcontroller/verification/$1';

功能:

public function verification($slug)
    {
        parse_str(parse_url($slug, PHP_URL_QUERY), $fileds);
        var_dump($fields);
    }

问题是,当我尝试上面列出的网址时,我得到了404。当我尝试Message: Undefined variable: fields

之类的内容时,我得到http://amazon.dev/verify/asdasdasd

有人能指出我正确的方向吗?

ADD:如果网址中没有?,则可以。但是对于获取查询url的标准应该是,我想知道如何解决这个问题

5 个答案:

答案 0 :(得分:1)

我理解路由不接收查询字符串。所以,你应该从GET数组获得变量。为此,在config.php中设置的第一个测试

$config['allow_get_array'] = TRUE;

然后在控制器中:

public function verification($slug)
    {
    $fields['id'] = $this->input->get('id');
    $fields['hash'] = $this->input->get('hash');
    var_dump($fields);
    }

答案 1 :(得分:0)

只有URL的路径段是可路由的,您不需要解析查询参数......

通过$_GET超全局(如原始PHP)或Input class' get() method访问它们。

答案 2 :(得分:0)

?不是

中URI段中的允许字符
/*
|--------------------------------------------------------------------------
| Allowed URL Characters
|--------------------------------------------------------------------------
|
| This lets you specify with a regular expression which characters are permitted
| within your URLs.  When someone tries to submit a URL with disallowed
| characters they will get a warning message.
|
| As a security measure you are STRONGLY encouraged to restrict URLs to
| as few characters as possible.  By default only these are allowed: a-z 0-9~%.:_-
|
| Leave blank to allow all characters -- but only if you are insane.
|
| DO NOT CHANGE THIS UNLESS YOU FULLY UNDERSTAND THE REPERCUSSIONS!!
|
*/

位于application / config / config.php

$config['permitted_uri_chars'] = 'a-z 0-9~%.:&_\-'; 
你可以追加?到列表

这是一个url编码字符列表 http://www.degraeve.com/reference/urlencoding.php

答案 3 :(得分:0)

问题实际上是,查询是在/之后开始的。

实际上,网址应该位于此模型中,?紧跟在目录名称之后。

http://mysite.dev/verify/?id=emailaddress@gmail.com&hash=562828a975740ac6820e40f7f61b4407

路线应该是

$route['verify'] = 'formcontroller/verification';

变量应使用get的{​​{1}}方法处理。

CodeIgniter

此外,如果配置文件不是唯一允许的任何字符,则网址应为$this->input->get('variablename');

答案 4 :(得分:0)

的config.php

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-=';