kohana文档翻译(Libraries)
下列库在Kohana中总是自动加载[*]Loader[*]URI[*]Input其他库也可以自动加载,比如要加载Profiler库,你只需要在你控制器的构造函数中加入
$this->profiler = new Profiler;
另外,你需要手动加载类,只需要这样
$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 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 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
defined('SYSPATH') or die('No direct script access.');
class Profiler_Core {
// define your own profiler here
}
?>
第三方类库
如果你需要利用第三方类库(比如Simplepie, Zend Framework, Pear ),你可以把它们放到application/vendors目录
加载它们只需要
Kohana::find_file('vendors','some_class');
注意有些第三方类库能完全适应Kohana,有时候需要重命名文件和类名,不过可以采用一个变通的方法
$this->load->library('some_lib');
Zend Framework
不经过配置的话,Zend Framework的文件会尽可能的加载它所依存的文件,这样会出错,如果zend文件夹在applications/vendor/zend,下面的代码会有用:
// 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的组件,你可以这样做
// example
require_once 'Zend/Service/Flickr.php';
// or another example
require_once 'Zend/Acl.php';
$acl = new Zend_Acl();
[ 本帖最后由 星期八 于 2008-7-16 15:02 编辑 ]
页:
[1]