CodeIgniter - 使用 GET 变量路由 url
CodeIgniter - Routing urls with GET Variables
我检查了那里的类似问题,但这些似乎没有帮助。
我有一个类似的电子邮件验证,它将在 CodeIgniter 中路由到正确的函数,并将数据传递给该函数以供进一步处理。
样本URL:
http://mysite.dev/verify/?id=emailaddress@gmail.com&hash=562828a975740ac6820e40f7f61b4407
当前路线:
$route['verify/(:any)'] = 'formcontroller/verification/';
函数:
public function verification($slug)
{
parse_str(parse_url($slug, PHP_URL_QUERY), $fileds);
var_dump($fields);
}
问题是,当我尝试上面列出的 url 时得到 404。当我尝试 http://amazon.dev/verify/asdasdasd
之类的东西时,我得到 Message: Undefined variable: fields
有人能指出我正确的方向吗?
ADD :如果 url 中没有 ?
,它会起作用。但是对于一个get查询的标准应该是url,我想知道如何解决这个
只有URL的路径段是可路由的,不需要解析查询参数...
通过 $_GET
超全局(如在原始 PHP 中)或通过 Input class' get() method.
访问它们
?
不是
中 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
据我所知,路由没有收到查询字符串。所以,你应该从 GET 数组中获取变量。为此,第一个测试 config.php set
$config['allow_get_array'] = TRUE;
然后在控制器中:
public function verification($slug)
{
$fields['id'] = $this->input->get('id');
$fields['hash'] = $this->input->get('hash');
var_dump($fields);
}
问题实际上是,查询在 /
之后开始。
实际上 url 应该在这个模型中,?
紧跟在目录名称之后。
http://mysite.dev/verify/?id=emailaddress@gmail.com&hash=562828a975740ac6820e40f7f61b4407
路线应该是
$route['verify'] = 'formcontroller/verification';
并且应该使用 CodeIgniter
的 get
方法处理变量。
$this->input->get('variablename');
此外,url 应该是 urlencoded
以防万一有任何字符不是配置文件独占允许的。
Config.php
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-=';
我检查了那里的类似问题,但这些似乎没有帮助。
我有一个类似的电子邮件验证,它将在 CodeIgniter 中路由到正确的函数,并将数据传递给该函数以供进一步处理。
样本URL:
http://mysite.dev/verify/?id=emailaddress@gmail.com&hash=562828a975740ac6820e40f7f61b4407
当前路线:
$route['verify/(:any)'] = 'formcontroller/verification/';
函数:
public function verification($slug)
{
parse_str(parse_url($slug, PHP_URL_QUERY), $fileds);
var_dump($fields);
}
问题是,当我尝试上面列出的 url 时得到 404。当我尝试 http://amazon.dev/verify/asdasdasd
Message: Undefined variable: fields
有人能指出我正确的方向吗?
ADD :如果 url 中没有 ?
,它会起作用。但是对于一个get查询的标准应该是url,我想知道如何解决这个
只有URL的路径段是可路由的,不需要解析查询参数...
通过 $_GET
超全局(如在原始 PHP 中)或通过 Input class' get() method.
?
不是
/*
|--------------------------------------------------------------------------
| 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
据我所知,路由没有收到查询字符串。所以,你应该从 GET 数组中获取变量。为此,第一个测试 config.php set
$config['allow_get_array'] = TRUE;
然后在控制器中:
public function verification($slug)
{
$fields['id'] = $this->input->get('id');
$fields['hash'] = $this->input->get('hash');
var_dump($fields);
}
问题实际上是,查询在 /
之后开始。
实际上 url 应该在这个模型中,?
紧跟在目录名称之后。
http://mysite.dev/verify/?id=emailaddress@gmail.com&hash=562828a975740ac6820e40f7f61b4407
路线应该是
$route['verify'] = 'formcontroller/verification';
并且应该使用 CodeIgniter
的 get
方法处理变量。
$this->input->get('variablename');
此外,url 应该是 urlencoded
以防万一有任何字符不是配置文件独占允许的。
Config.php
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-=';