Zend Framework教程之Resource Autoloading用法实例


Posted in PHP onMarch 08, 2016

本文实例讲述了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提供了一个模块的标准目录布局。在这种范式中,资源自动加载器非常有用,他们是默认启用的。

模块的基本目录结构:

<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程序设计有所帮助。

PHP 相关文章推荐
ecshop 批量上传(加入自定义属性)
Mar 20 PHP
php求正负数数组中连续元素最大值示例
Apr 11 PHP
php使用百度ping服务代码实例
Jun 19 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
Jul 28 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
Nov 17 PHP
PHP Opcache安装和配置方法介绍
May 28 PHP
一张表搞清楚php is_null、empty、isset的区别
Jul 07 PHP
php实现CSV文件导入和导出
Oct 24 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
PHP连续签到功能实现方法详解
Dec 04 PHP
PHP 对象接口简单实现方法示例
Apr 13 PHP
关于PHP中interface的用处详解
Jul 26 PHP
php bootstrap实现简单登录
Mar 08 #PHP
PHP Echo字符串的连接格式
Mar 07 #PHP
Zend Framework教程之MVC框架的Controller用法分析
Mar 07 #PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
Mar 07 #PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
Mar 07 #PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
Mar 07 #PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
Mar 07 #PHP
You might like
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
PHP数组array类常见操作示例
2020/05/15 PHP
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
AngularJS ng-change 指令的详解及简单实例
2016/07/30 Javascript
Javascript 判断两个IP是否在同一网段实例代码
2016/11/28 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
用JavaScript实现让浏览器停止载入页面的方法
2017/01/19 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
2017/01/20 Javascript
Vue响应式原理详解
2017/04/18 Javascript
使用JavaScript根据图片获取条形码的方法
2017/07/04 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
2018/02/21 Javascript
Angular5中调用第三方库及jQuery的添加的方法
2018/06/07 jQuery
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
webpack打包nodejs项目的方法
2018/09/26 NodeJs
vue 利用路由守卫判断是否登录的方法
2018/09/29 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
详解ES6 CLASS在微信小程序中的应用实例
2020/04/24 Javascript
vue项目中微信登录的实现操作
2020/09/08 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
jQuery是用来干什么的 jquery其实就是一个js框架
2021/02/04 jQuery
[01:22:42]2014 DOTA2华西杯精英邀请赛 5 24 DK VS LGD
2014/05/26 DOTA
python中使用pyhook实现键盘监控的例子
2014/07/18 Python
python类的继承实例详解
2017/03/30 Python
在PyCharm中批量查找及替换的方法
2019/01/20 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
python3 mmh3安装及使用方法
2019/10/09 Python
详解python中*号的用法
2019/10/21 Python
将python包发布到PyPI和制作whl文件方式
2019/12/25 Python
使用HTML5进行SVG矢量图形绘制的入门教程
2016/02/19 HTML / CSS
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
个人委托书怎么写
2014/09/17 职场文书
2014年乡镇个人工作总结
2014/12/03 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
2022/08/05 Vue.js
python 使用pandas读取csv文件的方法
2022/12/24 Python