在 Kohana 3 中,如何覆盖/扩展模块类?
例如,我想向特定于我的应用程序的 Auth 模块添加功能。在这种情况下,我想扩展位于 Auth 模块的 classes 文件夹中的抽象 Auth 类。
我应该为我的 Auth 类使用什么命名约定,我应该在文件系统中的什么位置放置我的类文件?
在 Kohana 3 中,如何覆盖/扩展模块类?
例如,我想向特定于我的应用程序的 Auth 模块添加功能。在这种情况下,我想扩展位于 Auth 模块的 classes 文件夹中的抽象 Auth 类。
我应该为我的 Auth 类使用什么命名约定,我应该在文件系统中的什么位置放置我的类文件?
要解决这个问题,了解 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
提供了您无法扩展和/或覆盖的所有身份验证原始功能。
有关行为检查的更多信息,请查看文档的这一部分。