2011-01-22 116 views
0

我想在Kohana 3.0.9中设置某种分层路由。路由应该支持页面和子页面,这可能是这个样子:Kohana分层路由与子页面

URL称为:http://example.com/company/contact/

可能途径:<page>(/<subpage>(/<action>))

与上述路线的问题是,它仅支持一个层次有两个层次。如果该网站需要能够处理像“http://example.com/company/contact/sub”这样的“子子页面”,我将不得不改变路线。

此外,我想单个页面控制器来处理请求。例如,它可以接受company/contact/sub作为字符串参数。我知道<directory>的关键,我不打算使用它。

有什么办法让路线与无限的嵌套页面“兼容”吗?

在此先感谢您的答案。

回答

1

如果你看看ROUTING部分,你可以创建自定义的REGEX模式。 (阅读此处)http://kohanaframework.org/guide/kohana/routing

默认情况下,路由“参数”将删除标点符号。

你可以设置一个正则表达式来接受“/”。

然后你可以抓住最后一个参数并用 爆炸它$ pieces = explode(“/”,$ pizza);

例子: http://example.com/company/contact/subpage/subsubpage/action

​​

双检正则表达式,但基本上它抓住所有的 “/” 除了最后一个(这应该是你的行动参数分隔符

在你ACTION_ [。动作]函数(在Controller_Contact在这个例子中), 然后你会打电话

$page_levels = Request::instance()->param('page_levels'); 
$page_array = explode("/",$page_levels); 

这应该让你

$page_array = array ([1] => 'contact', 
         [2] => 'subpage', 
         [3] => 'subsubpage') 
+0

看起来不错,但是正则表达式没有工作。我将它改为`(。*)`,但不幸的是这个动作被切断了。对于http:// localhost/kohana/page/bonjour/sub/doublesub/index,`page_levels`将包含`bonjour/sub/doublesub/index`。 – Daniel 2011-01-22 18:58:31