2011-03-31 75 views
0

我是Kohana的新手,想知道在application/classes/controller目录中组织很多文件的最佳方法。Kohana 3:如何在应用程序/类/控制器中路由子目录

我现在的结构是:

-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中设置一个路径,但我真的不知道该怎么做才能让页面在子目录内激活。

在此先感谢。

回答

4

使用directory PARAM在路线:

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', 
    )); 
+0

这使我更加接近,谢谢。 :) 我唯一的问题是如何使目录名称可选? 在你的例子中,目录必须是'page'。 – Das123 2011-03-31 18:43:38

+0

您可以在URI中设置''的值(如''或''),但这样您的URI将更大,简单的'/ test /'。此外,在3.1(和PHPv5.3)中,您可以使用[lambda路由](http://kohanahanaworkwork.org/3.1/guide/kohana/routing#lambdacallback-route-logic)以及许多功能来设置路由参数。 – biakaveron 2011-04-01 05:17:39