Codeigniter URL路由 - 捕获树结构的所有内容

时间:2015-06-23 17:41:52

标签: php .htaccess codeigniter

好吧,我想我可能(希望)会被告知我会以错误的方式解决这个问题。

目前,如果我转到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”,除此之外什么都没有。

我希望这对某人有意义......

1 个答案:

答案 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();
    }
}