本文实例讲述了zend framework中resource autoloading用法。分享给大家供大家参考,具体如下:
通常,在开发应用程序中,可能类文件名不能按照标准zend framework的建议定义的,这意味着你的类文件不能被自动加载器发现。zend_loader_autoloader_resource提供了解决方案。
资源仅仅是一个名称对应一个组件的命名空间(追加到自动加载器的命名空间)和路径(相对的自动加载器的基本路径),例如可以这样:
$loader = new zend_application_module_autoloader(array(
'namespace' => 'blog',
'basepath' => application_path . '/modules/blog',
));
具体实例如下:
path/to/some/resources/
|-- forms/
| `-- guestbook.php // foo_form_guestbook
|-- models/
| |-- dbtable/
| | `-- guestbook.php // foo_model_dbtable_guestbook
| |-- guestbook.php // foo_model_guestbook
| `-- guestbookmapper.php // foo_model_guestbookmapper
创建资源装载器:
$loader = new zend_loader_autoloader_resource(array(
'basepath' => 'path/to/some/resources/',
'namespace' => 'foo',
));
定义资源类型
zend_loader_autoloader_resourse::addresourcetype()有三个参数:资源名称,指定的资源路径的相对资源路径名, 资源类型组件前缀。
在上面的树,我们有三种资源类型:form(在子目录forms中,资源前缀是form),model(在子目录models中,资源前缀是model),并dbtable(在子目录“models/dbtable”中,资源前缀是“model_dbtable”)。
具体定义如下:
$loader->addresourcetype('form', 'forms', 'form')
->addresourcetype('model', 'models', 'model')
->addresourcetype('dbtable', 'models/dbtable', 'model_dbtable');
也可以在构造函数中指定
$resourceloader = new zend_loader_autoloader_resource(array(
'basepath' => 'path/to/some/directory',
'namespace' => 'my',
'resourcetypes' => array(
'acl' => array(
'path' => 'acls/',
'namespace' => 'acl',
),
'form' => array(
'path' => 'forms/',
'namespace' => 'form',
),
'model' => array(
'path' => 'models/',
'namespace' => 'model',
),
),
));
使用以定义资源
$form = new foo_form_guestbook();
$guestbook = new foo_model_guestbook();
模块中的资源自动加载
zend framework的mvc鼓励使用“modules”,模块默认情况下,通常有一些资源类型,zend framework提供了一个模块的标准目录布局。在这种范式中,资源自动加载器非常有用,他们是默认启用的。
模块的基本目录结构:
d2397dd86d29a9a1cff681f5f46c559c
configs/
application.ini
controllers/
helpers/
forms/
layouts/
filters/
helpers/
scripts/
models/
services/
views/
filters/
helpers/
scripts/
bootstrap.php
你可以扩展zend_application_module_bootstrap创建一个模块引导类 bootstrap.php,具体的资源加载和默认的资源加载使用类似。
希望本文所述对大家php程序设计有所帮助。
更多zend framework教程之resource autoloading用法实例。