Luk*_*uke 2 overriding module kohana-3
在Kohana 3中,如何覆盖/扩展模块类?
例如,我想向Auth模块添加特定于我的应用程序的功能.在这种情况下,我想扩展位于Auth模块的classes文件夹中的抽象Auth类.
我应该为Auth类使用什么命名约定,以及在文件系统中我放置类文件的位置?
Luk*_*uke 10
要解决这个问题,了解Kohana 3框架的层次性非常重要.在覆盖或扩展模块时,您需要执行以下操作.
让我们扩展Auth模块.当您查看Auth模块文件系统结构时,您会注意到classes目录中有一个名为的文件auth.php.打开此文件时,您会看到以下内容:
<?php defined('SYSPATH') OR die('No direct access allowed.');
abstract class Auth extends Kohana_Auth { }
Run Code Online (Sandbox Code Playgroud)
这里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()
{
}
}
Run Code Online (Sandbox Code Playgroud)
由于框架的层次结构特性,Auth定义为模块一部分的抽象类将永远不会被加载,因为框架Auth首先加载您的类,因为它优先.您扩展的类Kohana_Auth提供了无法扩展和/或覆盖的所有auth原始功能.