【问题标题】:Set routes in Kohana在 Kohana 设置路线
【发布时间】:2012-02-05 22:00:48
【问题描述】:

如果我定义了 2 个控制器,A.php 和 B.php,并且在每个控制器中我定义了一个索引操作, 我应该如何在 bootstrap.php 文件中定义Route::set

【问题讨论】:

标签: php model-view-controller kohana


【解决方案1】:

默认路由应该没问题:

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

请阅读文档:http://kohanaframework.org/3.2/guide/kohana/routing

该默认路由将匹配控制器“/a”和控制器“/b”,如果在 URI 中未指定其他操作,则执行索引操作。

【讨论】:

    【解决方案2】:

    我已阅读文档,但尚不清楚您何时以及为什么要创建 Route 条目。

    基本上,如果您的 URL 不符合正常的 /controller/action 结构,则需要一个 Route 条目。如果您创建了控制器 A 和控制器 B 都带有索引操作,那么如果您总是要使用标准 URL 语法访问这些操作,则不需要向 bootstrap.php 添加路由:

    http://www.example.com/A/index
    http://www.example.com/B/index
    

    如果没有指定,您可以不使用“索引”,因为它是默认操作。

    假设您希望控制器 A 成为默认站点控制器,这意味着您不想在 URL 中使用 A,您希望在域之后使用操作:

    http://www.example.com/index
    

    那么您确实需要一个路由来告诉 Kohana,任何与您创建的任何路由(或者如果您没有)不匹配的 URL 都应该由您的默认路由处理。您将在 bootstrap.php 中创建此路由:

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

    这表示如果用户转到http://www.example.com,Kohana 将使用控制器 A 的 index 动作。如果用户转到 http://www.example.com/foo,那么 Kohana 将使用控制器 A 的 foo 动作。匹配任何其他控制器将转到 A 控制器。如果用户请求 A 未处理的操作,他将收到 404 异常。

    您仍然拥有 B 控制器,因此无需任何路由即可正常工作。如果用户转到http://www.example.com/B/index,Kohana 知道应用程序中的 B 控制器,因此它将转到那里的 index 操作。

    【讨论】:

      【解决方案3】:

      您的问题可能出在 kohana 文件夹中的 .htaccess 文件中。 我需要将“RewriteBase”更改为 Kohana 文件夹(bootstrap.php 文件中 Kohana::init 中的“base_url”),否则我会进入“404 - 未找到对象”。 那么默认路由应该就可以了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-31
        • 1970-01-01
        • 1970-01-01
        • 2012-08-14
        • 1970-01-01
        相关资源
        最近更新 更多