【问题标题】:Kohana 3: How to route subdirectories in application/classes/controllerKohana 3:如何在应用程序/类/控制器中路由子目录
【发布时间】:2011-03-31 01:00:42
【问题描述】:

我是 Kohana 的新手,想知道在 application/classes/controller 目录中组织大量文件的最佳方法是什么。

我目前的结构是:

-application
--classes
---controller
----page
-----test.php

我想从 url 调用页面而不需要页面或任何其他子目录的名称:

www.website.com/test/

我的控制器类开始了:

<?php defined('SYSPATH') OR die('No direct access allowed.');

/**
* Test
* 
* @package Test
* @category Page
* @author 
* 
*/
class Controller_Page_Test extends Controller_Template {

        // Default
        public function action_index() {
            // Template vars
    }

}

我需要做些什么来避免它抛出的 404 错误?我假设我需要在 bootstrap.php 中设置一个路由,但我真的不知道该怎么做才能让页面从子目录中激活。

提前致谢。

【问题讨论】:

    标签: php kohana


    【解决方案1】:

    在路由中使用directory 参数:

    Route::set('with_dir', 
               'test(/<action>(/<id>))', 
               )
        ->defaults(array(
              'directory'  => 'page',
              'controller' => 'test',
        ));
    

    您可以将正则表达式用于控制器列表。例如,您在页面目录中有 Controller_Test 和 Controller_Foo。这是它的路线:

    Route::set('with_dir', 
               '<controller>(/<action>(/<id>))', 
               array(
                   'controller'  => '(test|foo)',
               ))
        ->defaults(array(
              'directory'  => 'page',
              'controller' => 'test',
        ));
    

    【讨论】:

    • 这让我更接近了,谢谢。 :) 我唯一的问题是如何使目录名称可选?在您的示例中,目录必须是“页面”。
    • 您可以在 URI 中设置 &lt;directory&gt; 值(如 &lt;controller&gt;&lt;action&gt;),但这样您的 URI 会更大,即简单的 /test/。此外,在 3.1(以及 PHPv5.3)中,您可以使用 lambda routes 来设置路由参数。
    猜你喜欢
    • 1970-01-01
    • 2011-04-22
    • 2015-12-11
    • 1970-01-01
    • 2011-06-14
    • 2023-03-23
    • 2012-01-21
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多