【问题标题】:Kohana Hierarchical Routes with SubpagesKohana 带有子页面的分层路由
【发布时间】:2011-01-22 17:42:16
【问题描述】:

我想在 Kohana 3.0.9 中设置某种分层路由。路由应该支持页面和子页面,看起来像这样:

网址调用:http://example.com/company/contact/

可能的路线:<page>(/<subpage>(/<action>))

上述路由的问题在于它只支持具有两个级别的层次结构。如果网站需要能够处理像http://example.com/company/contact/sub 这样的“子子页面”,我将不得不更改路由。

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

有没有办法让路由与无限的嵌套页面“兼容”?

提前感谢您的回答。

【问题讨论】:

    标签: php frameworks routing kohana


    【解决方案1】:

    如果您查看 ROUTING 部分,您可以创建自定义 REGEX 模式。 (在这里阅读)http://kohanaframework.org/guide/kohana/routing

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

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

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

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

    Route::set('multilevel', '(<controller>(/<page_levels>/<action>))'
    , array('page_levels' => '.*'))
        ->defaults(array(
            'controller' => 'page_controller',
            'action'     => 'index',
        ));
    

    仔细检查正则表达式,但基本上它会抓取除最后一个之外的所有“/”(它应该是您的 ACTION 参数分隔符。

    在您的 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')
    

    【讨论】:

    • 看起来不错,但是正则表达式不起作用。我将其更改为(.*),但不幸的是,该操作被中断了。 page_levels 将包含 bonjour/sub/doublesub/index 用于 localhost/kohana/page/bonjour/sub/doublesub/index
    • @daniel,您可以尝试 (.*)/ 或将 ACTION 硬编码到路由到 ((//my_action)) 中,然后设置 'action' => 'my_action ' 在 action 参数中进行硬编码。我不确定您有多少不同的操作。
    • @daniel 将您的 ROUTE 更改为以下。 Route::set('multilevel', '((//))' , array('page_levels' => '.*')) ->defaults(array( 'controller' = > '欢迎', '行动' => '索引', ));
    • 不幸的是,仍然无法正常工作。我将尝试通过正则表达式排除该操作 - 可能会使用 (.*)/(index|edit)? 之类的内容。
    • 重要:我们都忘记了正则表达式仅用于检查它是否与 url 字符串匹配——它永远不会修改或切断部分 url。我想我必须破解 Kohana 的源代码。
    猜你喜欢
    • 2016-04-24
    • 2013-04-06
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    相关资源
    最近更新 更多