好吧,我想我可能(希望)会被告知我会以错误的方式解决这个问题。
目前,如果我转到CI网站的根目录,我会调用一个用map_directory()
读取预定义位置的函数。然后我在视图中将其作为简单的目录列表进行迭代。
然后,我想点击其中一个目录,看看里面是什么。当我这样做时,我调用一个名为browse
的不同控制器函数。
所以,如果我点击一个链接,我会去
www.mysite.com/dir1
(路由到www.mysite.com/controller/browse/$1
- 此实例中$ 1 = dir1)。
现在我看到dir1
的目录列表。我已经配置了所显示列表的链接,现在转到:
www.mysite.com/dir1/subdir1等。
我想做什么,这可能是我作弊/出错的地方,是在
后抓住一切www.mysite.com/
并将其传递给
www.mysite.com/controller/browser/$1
所以例子:
www.mysite.com/dir1/subdir1/ => www.mysite.com/controller/browse/"dir1/subdir1"
我知道我不能在那里''',但那是我试图传递给map_directory()函数...所以它去了/.$var(其中$var would = $1 = "dir1/subdir1"
。< / p>
到目前为止,我已尝试过CI Routes.php:
$route['(.+)$'] = 'controller/browse/$1';
$route['([a-zA-Z0-9\/]*)'] = 'controller/browse/$1';
$route['(:any)'] = 'controller/browse/$1';
......但他们似乎只是捕捉到了“dir1”,除此之外什么都没有。
我希望这对某人有意义......
答案 0 :(得分:1)
您可以在控制器中使用特殊的_remap()方法来覆盖默认的路由行为:
class Controller extends CI_Controller
{
protected function browse($path)
{
// ... do something with $path here
}
public function _remap($method, $params = array())
{
if ($method === 'browse')
{
$params = implode('/', $params);
return $this->browse($params);
}
elseif (method_exists($this, $method))
{
return call_user_func_array(array($this, $method), $params);
}
show_404();
}
}