状态 草稿
Todo Using Controller namespace, replacing/extending system libraries, which libs can be extended?
官方最后更新时间 2009/02/04 08:21

库(Libraries)

Kohana 总是自动加载下列库:

  • URI
  • Input

当使用其他库时也是可以自动加载的。比如,加载并使用 Profiler 库,你只需要添加下面的代码到你的控制器的构造函数当中:

  $this->profiler = new Profiler;

详情请参见 加载资源(Loading) 页面。

自定义库

如果你想创建自己的库,需遵守下列约定:

  • 库文件必须存放在 application/libraries (或如果创建了模型则放在 modules/libraries目录下面)
  • 库文件名和库的名字应该一致。(不需要添加 ”_Core” 后缀)
  • 库的类名首字母必须大写。(例如,”Contact”)
  • 创建一个新的类库,你可以在类库名后加上 ”_Core” 后缀,使你能用扩展 Kohana 内置类库的方式来扩展你的类库。

例如,你想创建一个 “book” 的类库:

文件: application/libraries/Book.php

<?php defined('SYSPATH') or die('No direct script access.');
 
class Book_Core {
 
	// 这里添加 constructor/methods/properties
 
}
 
?>

扩展库

Kohana 允许扩展其内置库,即可以加上你自己的方法功能或者改变它们的功能。你可以创建一个新的库来集成内置库,但决不能删除掉 system/libraries 目录下的文件,你可以创建一个新的类库来继承内置类库。

通过在你的库名结尾加上 ”_Core” 后缀,你也能扩展你的类。

扩展库除需要遵循创建类库的约定外,还要遵循以下规定:

  • 文件名必须加 ”MY_” 前缀。这个前缀是可更修改的,详情请参见 配置(Configuration)
  • 类名和你扩展的类名相同,且没有 ”_Core” 后缀。

下面,举一个例子,让你知道是如何扩展 Kohana 的控制器类的:

文件: application/libraries/MY_Controller.php

<?php defined('SYSPATH') or die('No direct script access.');
 
class Controller extends Controller_Core {
 
	public function __construct()
	{
		// 不要忘记调用父类构造器!
		parent::__construct();
	}
 
}
 
?>

希望扩展核心类不仅仅使用在 Kohana 当中。如果你想执行行为(implement behaviour)那么就应该应用到一个 Kohana 类,如 全站(site-wide behaviour),下面有很好的方法来实现。

下面有一些例子说明为什么你要继承 Kohana 控制器类的特别性:

  • 你想要执行全站页面缓存。
  • 你想要执行验证机制。
  • 您可能想要为控制器提供布局或模板方法。这都需要继承控制器,将利用每一个控制器中的应用。

你或许还想自动加载模型和库,这可以通过继承核心控制来实现并从构造器中加载任何的库和模型。

替换 Kohana 系统自建库

替换替换 Kohana 系统自建库也是可以实现的(虽然不太可能经常用到)。约定在添加自己的库之外还有几个约定:

  • 必须为类名附加 ”_Core” - 这个是必须的!

举个例子,你想替换 分析库(Profiler Library),则需要按照下面的代码:

文件application/libraries/Profiler.php

<?php defined('SYSPATH') or die('No direct script access.');
 
class Profiler_Core {
 
	// 在这里定义自己的 profiler
 
}
 
?>

第三方库

如果你需要第三方库的支持(比如 Simplepie,Zend Framework 或 Pear 库),你可以把它们放在 application/vendor 文件夹下面。从 Kohana 加载也比较简单:

  include Kohana::find_file('vendor','some_class');

更多信息可以参阅 Kohana 类 页面。 以及 Kohana 中文爱好者论坛发布的样例

注意有些第三方库可以需要修改以适应 Kohana 库。所以有时重命名或类名是有必要的。

Zend Framework

Zend Framework中的文件是相互依赖,可能会因为没有正确的配置而导致不正确的加载。如果 ZendFramework 目录放置在 applications/vendor/zend 下面,请按照下面的代码操作:

 
// 在加载 Zend Framework 组件前确认放置的位置
ini_set('include_path',ini_get('include_path').PATH_SEPARATOR.APPPATH.'vendor/zend/library/');

想要加载一个 Zend Framework 组件的相关代码:

// 例子
require_once 'Zend/Service/Flickr.php';
 
// 或者
require_once 'Zend/Acl.php';
$acl = new Zend_Acl();

注意,它也可以放在 SYSPATH 目录下面但是它会被新版本覆盖。扩展目录是一个很好的选择:

ini_set('include_path',ini_get('include_path').PATH_SEPARATOR.SYSPATH.'vendor/zend/library/');
general/libraries.txt · 最后更改: 2009/02/04 18:12 由 icyleaf