此路线
$route['api2/(:any)'] = "api2/api2/$1/";
匹配以下网址:
/api2/pictures/alpha_string
/api2/pictures/picture_id:alpha_string
但不是这一个:
/api2/pictures/picture_id:55
不同之处在于我在“:”之后使用数字。
如何使其与最后一个网址匹配?
由于
答案 0 :(得分:0)
如果要在代码点火器URL中使用冒号(:)字符,则可以从以下说明中扩展 CI_Router 和 CI_URI 类:
首先,在“ 应用程序/核心”文件夹中创建新文件“ MY_Router.php ”:
<?php defined('BASEPATH') or exit('No direct script access allowed');
class MY_Router extends CI_Router
{
protected function _set_request($segments = [])
{
parent::_set_request($segments);
$this->_set_params($segments);
}
protected function _set_params($params = [])
{
foreach($params as $key => $value) {
if( FALSE !== strpos($value, ':') && preg_match('/^([a-z0-9\-_]+)\:(.*)$/iu',$value,$m) ) {
$this->uri->params[$m[1]] = $m[2];
unset($params[$key]);
continue;
}
}
}
}
第二,在“ 应用程序/核心”文件夹中创建另一个文件“ MY_URI.php ”:
<?php defined('BASEPATH') or exit('No direct script access allowed');
class MY_URI extends CI_URI
{
public $params = [];
public function param($n, $no_result = NULL)
{
return isset($this->params[$n]) ? $this->params[$n] : $no_result;
}
}
function param($n, $no_result = NULL)
{
return get_instance()->uri->param($n, $no_result);
}
仅此而已,现在您可以考虑以下示例来获取单独的url参数:
$param1 = $this->uri->param('param1') // output = value1
$param2 = $this->uri->param('param2') // output = value2
$param3 = $this->uri->param('param3') // output = null
$param4 = $this->uri->param('param4', 1) // output = 1
$param1 = param('param1') // output = value1
$param2 = param('param2') // output = value2
$param3 = param('param3') // output = null
$param4 = param('param4', 1) // output = 1
此外,我已经编写了一个小库来处理在URL中使用冒号,您可以在以下github存储库中找到它:Codeigniter Colon URI