代码之家  ›  专栏  ›  技术社区  ›  Luke

如何覆盖Kohana3中的模块类?

  •  2
  • Luke  · 技术社区  · 15 年前

    在Kohana3中,如何重写/扩展模块类?

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

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

    1 回复  |  直到 11 年前
        1
  •  10
  •   Luke    11 年前

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

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

    <?php defined('SYSPATH') OR die('No direct access allowed.');
    
    abstract class Auth extends Kohana_Auth { }
    

    这里是一个名为 Auth 定义了扩展 Kohana_Auth 班级。当您使用 奥思 在应用程序中,您引用的是这个抽象类。实际实施 奥思 实际上被保存在 科哈纳亚特 位于 Kohana 文件夹模块目录结构的哪个部分。

    扩展 奥思 模块,即添加您自己的功能,您只需将 PHP 文件中 应用程序目录的文件夹。在你 PHP 文件扩展您的版本 奥思 通过扩展 科哈纳亚特 班级。像这样:

    <?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()
       {
       }
    
    }
    

    由于框架的层次性,抽象类 奥思 定义为模块的一部分将永远不会加载,因为框架将加载 奥思 类优先,因为它优先。你所扩展的类, 科哈纳亚特 ,提供所有无法扩展和/或重写的身份验证原始功能。

    有关行为检查的详细信息 this 文件的一部分。