本文实例讲述了Zend Framework中Resource Autoloading用法。分享给大家供大家参考,具体如下:
通常,在开发应用程序中,可能类文件名不能按照标准Zend Framework的建议定义的,这意味着你的类文件不能被自动加载器发现。Zend_Loader_Autoloader_Resource提供了解决方案。
资源仅仅是一个名称对应一个组件的命名空间(追加到自动加载器的命名空间)和路径(相对的自动加载器的基本路径),例如可以这样:
1
2
3
4
|
$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
创建资源装载器:
1
2
3
4
|
$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”)。
具体定义如下:
1
2
3
|
$loader ->addResourceType( 'form' , 'forms' , 'Form' ) ->addResourceType( 'model' , 'models' , 'Model' ) ->addResourceType( 'dbtable' , 'models/DbTable' , 'Model_DbTable' ); |
也可以在构造函数中指定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
$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' , ), ), )); |
使用以定义资源
1
2
|
$form = new Foo_Form_Guestbook(); $guestbook = new Foo_Model_Guestbook(); |
模块中的资源自动加载
Zend Framework的MVC鼓励使用“modules”,模块默认情况下,通常有一些资源类型,Zend Framework提供了一个模块的标准目录布局。在这种范式中,资源自动加载器非常有用,他们是默认启用的。
模块的基本目录结构:
<modulename>
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程序设计有所帮助。