【问题标题】:Kohana routing - subfoldersKohana 路由 - 子文件夹
【发布时间】:2012-01-06 11:05:19
【问题描述】:

喂。 我有 2 个控制器,第一个 application/classes/controller/welcome.php 和第二个 application/classes/controller/admin/welcome.php

我有以下路由,在 bootstrap.php 中设置

Route::set('admin', '(<directory>(/<controller>(/<action>(/<id>))))', array('directory' => '(admin)'))
    ->defaults(array(
        'directory'  => 'admin',
        'controller' => 'welcome',
        'action'     => 'index',
    ));

Route::set('default', '(<controller>(/<action>(/<id>)))')
    ->defaults(array(
        'controller' => 'welcome',
        'action'     => 'index',
    ));

如果我访问 example.com/welcome,它会从 application/classes/controller/welcome.php 控制器调用 index 操作(此很好), 如果我访问 example.com/admin/welcome 它会从 application/classes/controller/admin/welcome.php 控制器调用 index 操作(这很好),

但如果我只是访问 example.com,它会调用管理员的欢迎而不是其他的,我不明白为什么。

我想要这个:如果我访问 example.com,然后从 application/classes/controller/admin/welcome.php调用 index 操作> 控制器。 我该如何解决这个问题?

【问题讨论】:

  • 非常好,很高兴为您提供帮助 :) 如果您可以将问题标记为已回答,那么将来搜索该问题的人们会更容易找到解决方案。谢谢!

标签: php routing kohana


【解决方案1】:

看起来你已经将第一个路由中的目录标签设置为可选的,所以当没有指定目录时它是匹配的。试试:

Route::set('admin', '<directory>(/<controller>(/<action>(/<id>)))', array('directory' => '(admin)'))
->defaults(array(
    'directory'  => 'admin',
    'controller' => 'welcome',
    'action'     => 'index',
));

这应该使标签成为强制性标签,因此它不会在 / 上匹配。

【讨论】:

    【解决方案2】:

    您指定的路由从上到下匹配:将使用第一个匹配的路由。所以,交换你的路线,它应该可以工作(让“管理员”路线成为最后一条)。

    【讨论】:

      猜你喜欢
      • 2015-05-14
      • 2021-01-22
      • 2014-10-05
      • 2021-11-19
      • 2016-03-02
      • 2011-02-01
      • 2017-06-20
      • 2015-10-19
      • 2017-08-07
      相关资源
      最近更新 更多