2010-04-15 27 views
2

在Kohana 3中,我该如何重写/扩展模块类?如何覆盖Kohana 3中的模块类?

E.g.我想添加特定于我的应用程序的Auth模块的功能。在这种情况下,我想扩展位于Auth模块的classes文件夹中的抽象Auth类。

什么命名约定应该用于我的Auth类以及文件系统中的哪个地方放置我的类文件?

回答

10

为了解决这个问题,理解Kohana 3框架的层次性是很重要的。当涉及到覆盖或扩展模块时,您需要执行以下操作。

让我们扩展Auth模块。当您查看Auth模块文件系统结构时,您会注意到在classes目录中有一个名为auth.php的文件。当您打开这个文件,你看到以下内容:

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

abstract class Auth extends Kohana_Auth { } 

在此定义了一个名为Auth一个抽象类,它扩展Kohana_Auth类。当您在应用程序中使用对Auth类的任何引用时,您指的是这个抽象类。 Auth的实际实现实际上保存在Kohana_Auth类中,该类位于Kohana文件夹中的模块目录结构的哪个部分。

要扩展Auth模块,即添加自己的功能,只需将auth.php文件放在应用程序目录的classes文件夹中即可。在您的auth.php文件中,通过扩展Kohana_Auth类来扩展Auth模块的版本。像这样:

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

class Auth extends Kohana_Auth { 

    public function get_user() 
    { 
     $result = parent::get_user() 

     // implement your functionality here. 

     return $result; 
    } 

    public function my_added_functionality() 
    { 
    } 

} 

由于该框架的层次性,定义为模块的一部分抽象类Auth永远不会因为框架第一次加载您Auth类,因为它优先加载。您扩展的课程Kohana_Auth提供您无法扩展和/或覆盖的所有授权原始功能。

有关行为检查this部分文档的更多信息。