CI路由的一点改造
本帖最后由 大道达人 于 2011-9-15 13:12 编辑CI2.0 controller层目前只支持2级目录引用即http://xx.com/admin/notice/detail/1实际应用中如果需要
http://xx.com/admin/site/notice/detail/1
http://xx.com/admin/site/sys/notice/detail/1
小弟尝试改造了下CI路由,代码如下
function _validate_request(&$segments ,$flag = FALSE)
{
if (count($segments) == 0)
{
return $segments;
}
// Does the requested controller exist in the root folder?
if (file_exists(APPPATH.'controllers/'.$segments.EXT) && $flag === FALSE)
{
return $segments;
}
// Is the controller in a sub-folder?
if (is_dir(APPPATH.'controllers/'.$this->directory.$segments))
{
// Set the directory and remove it from the segment array
$this->set_directory($this->directory.$segments,$flag);
$segments = array_slice($segments, 1);
if (count($segments) > 0)
{
if(is_dir(APPPATH.'controllers/'.$this->directory.$segments))
{
$this->set_directory($this->directory.$segments,TRUE);
$segments = array_slice($segments, 1);
$this->_validate_request(&$segments,TRUE);
}
// Does the requested controller exist in the sub-folder?
if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$segments.EXT))
{
//echo APPPATH.'controllers/'.$this->fetch_directory().$segments.EXT;
show_404($this->fetch_directory().$segments);
}
}
else
{
// Is the method being specified in the route?
if (strpos($this->default_controller, '/') !== FALSE)
{
$x = explode('/', $this->default_controller);
$this->set_class($x);
$this->set_method($x);
}
else
{
$this->set_class($this->default_controller);
$this->set_method('index');
}
// Does the default controller exist in the sub-folder?
if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.EXT))
{
$this->directory = '';
return array();
}
}
return $segments;
}
else
{
if ( file_exists(APPPATH.'controllers/'.$this->fetch_directory().$segments.EXT))
{
return $segments;
}
}
// If we've gotten this far it means that the URI does not correlate to a valid
// controller class.We will now see if there is an override
if ( ! empty($this->routes['404_override']))
{
$x = explode('/', $this->routes['404_override']);
$this->set_class($x);
$this->set_method(isset($x) ? $x : 'index');
return $x;
}
// Nothing else to do at this point but show a 404
show_404($segments);
}
经过改造可以实现
http://xx.com/admin/site/notice/detail/1
http://xx.com/admin/site/sys/notice/detail/1
http://xx.com/admin/site/sys/info/notice/detail/1
以及无限级目录的引用请求
本帖最后由 大道达人 于 2011-9-15 12:42 编辑
测试signature 本帖最后由 大道达人 于 2011-9-15 12:42 编辑
signature 实测可以使用,不过为啥那么多&符号啊,报错,先生乃骨灰级phper吧 暂时没有用到,先mark一下
页:
[1]