如何覆盖Kohana 3中的模块类?

时间:2010-04-15 07:40:02

标签: module override kohana-3

在Kohana 3中,如何覆盖/扩展模块类?

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

我应该为Auth类使用什么命名约定,以及在文件系统中我将类文件放在哪里?

1 个答案:

答案 0 :(得分: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文件中,您可以通过扩展Auth类来扩展Kohana_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部分文档的详细信息。