|
下列库在Kohana中总是自动加载
其他库也可以自动加载,比如要加载Profiler库,你只需要在你控制器的构造函数中加入
PHP复制代码 $this->profiler = new Profiler; 复制代码
另外,你需要手动加载类,只需要这样
PHP复制代码 $this->load->library('some_library'); 复制代码
注意,自Kohana 2.1.2起,像上面这样手动加载库的的方法不建议使用
更多关于loading
创建自己的库(libraries)
创建自己的库,需遵守下列约定:
- 库文件应该放在application/libraries目录下(或者你创建一个模块(module),放到modules/libraries下)
- 库文件名必须和类库名相同(但是不能有_Core后缀)
- 库的类名首字母必须大写
- 创建一个新的类库,你可以在类库名后加上”_Core”后缀,使你能用扩展Kohana内置类库的方式来扩展你的类库
例如你想创建一个“book”的类库,你可以像下面这样File: application/libraries/Book.php
PHP复制代码 <?php defined('SYSPATH') or die('No direct script access.');
class Book_Core {
// add constructor/methods/properties here
}
?> 复制代码
扩展类库
Kohana允许你扩展它的内置类库,加上你自己的功能或者改变它们的工作方式,但是你绝不对移除system/libraries下的文件,你可以创建一个新的类库来继承内置类库
只要你的类库名加上了”_Core”后缀,你也可以扩展(extend)你的类库.
扩展类库除需要遵循创建类库的约定外,还要遵循以下:
- 文件名必须以”MY_”开头,前缀的设置
- 类名必须和你扩展的类名相同,并且没有_Core后缀
比如你要扩展Kohana的controller 类库,你应该这样:File: application/libraries/MY_Controller.php
PHP复制代码 <?php defined('SYSPATH') or die('No direct script access.');
class Controller extends Controller_Core {
public function __construct (){
// don't for get to call the parent constructor!
parent ::__construct ();
}
}
?> 复制代码
不仅可以而且我们期望你扩展Kohana的核心类库
这里是一些在实践中你有可能要扩展Kohana控制器的情况:
- 你希望全站采用缓存
- 你需要执行一个验证方法
- 你希望对控制器提供布局或者模板方法,这些都可以在你要继承的控制器中扩展,然后可以在每个控制器中都是可用的
不建议在configuration选项中预装载libraries和models,通过扩展基控制器和在构造函数中加载libraries和models 更完美.
替换Kohana的内置类库
可以完全替换掉Kohana的内置类库(虽然这种情况很少见),除开一个例外,其他应该遵循的约定和你添加一个类库一样
- 在类名后加上”_Core”不只是可选的,你必须这样做
例如你要替换掉 Profiler类库,你应该这样创建:
File: application/libraries/Profiler.php
PHP复制代码 <?php
defined('SYSPATH') or die('No direct script access.');
class Profiler_Core {
// define your own profiler here
}
?> 复制代码
第三方类库
如果你需要利用第三方类库(比如Simplepie, Zend Framework, Pear ),你可以把它们放到application/vendors目录
加载它们只需要
PHP复制代码 Kohana::find_file('vendors','some_class'); 复制代码
注意有些第三方类库能完全适应Kohana,有时候需要重命名文件和类名,不过可以采用一个变通的方法
PHP复制代码 $this->load->library('some_lib'); 复制代码
Zend Framework
不经过配置的话,Zend Framework的文件会尽可能的加载它所依存的文件,这样会出错,如果zend文件夹在applications/vendor/zend,下面的代码会有用:
PHP复制代码 // make sure you put this somewhere before loading a Zend Framework component
ini_set('include_path',ini_get('include_path').PATH_SEPARATOR .APPPATH .'vendor/zend/library/'); 复制代码
包含一个Zend Framework的组件,你可以这样做
PHP复制代码 // example
require_once 'Zend/Service/Flickr.php';
// or another example
require_once 'Zend/Acl.php';
$acl = new Zend_Acl(); 复制代码
[ 本帖最后由 星期八 于 2008-7-16 15:02 编辑 ] |
|