2

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

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

我应该为我的 Auth 类使用什么命名约定,我应该在文件系统中的什么位置放置我的类文件?

4

1 回答 1

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提供了您无法扩展和/或覆盖的所有身份验证原始功能。

有关行为检查的更多信息,请查看文档的这一部分。

于 2010-04-16T01:23:51.833 回答