接下来讲讲Zend中的model。其实Zend中的Model处理是相当简单的。
这主要得益于autoload功能。不像其它框架,为model定义复杂的基类。
如果要定义model,不得不要继承一个model的基类,才可以使用具体的功能。
Zend中并没有对模型进行封装。
原因大概是Model主要是和具体业务逻辑相关的,进行过多的封装,只会画蛇添足。
Zend使用了autoload和namespace功能,很委婉的解决了这个问题。

创建一个zendframework项目model_demo1
为了方便查看错误我们可以在配置文件中/model_demo1/application/configs/application.ini打开错误信息开关如下:

phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

接下来简单的讲讲zend中的model:
1.默认的Model
一个标准的webapp中会有application/models这样的目录。不难看出,models用来存放你的app的model
这个目录的强大之处在于,如果你在models目录中定义了具体的class。zend会自动的帮我们加载,当然要遵循一定的约定,前提是:
例如,用zf命令行创建一个名为Test的Model

zf create model Test
Creating a model at /www/model_demo1/application/models/Test.php
Updating project profile '/www/model_demo1/.zfproject.xml'

刷新一下项目目录可以看到,新增了如下文件/model_demo1/application/models/Test.php
文件内容如下:

<?php
class Application_Model_Test
{}

不难看出我们要使用Model要遵循如下规则:
1).以Application_Model_开头,然后后面是自定义的model的类名称。
即:我们web应用的model的目录结构为/model_demo1/application/models/Test.php
对应的命名空间为Application_Model_Test。
application对应Application
models对应models
Test是model的类文件的名称。
类的名称按照约束就是:class Application_Model_Test {
也不难理解Application_Model_,这样的规则遵循zend framework的autoload和namespace的约定。
2).Application命名空间
其实Application也是我们在配置文件中配置的应用的命名空间。
如果把配置文件的appnamespace = "Application"修改为appnamespace = "App"。
我们原先的程序,就会报错了。原因不言而喻。所以zend也没有那么智能。

如果要详细追究其原理,大概是如下的类完成这个功能的:
Zend_Application_Bootstrap_Bootstrap
Zend_Application_Module_Autoloader

2.自定义命名空间

如何定义自己的命名空间呢?之前,在如下文档中,已经有所讲解。
http://blog.csdn.net/mengxiangbaidu/article/details/7109828
http://blog.csdn.net/mengxiangbaidu/article/details/7180539
http://blog.csdn.net/mengxiangbaidu/article/details/7180608
http://blog.csdn.net/mengxiangbaidu/article/details/7182080
http://blog.csdn.net/mengxiangbaidu/article/details/7186441
http://blog.csdn.net/mengxiangbaidu/article/details/7187631
http://blog.csdn.net/mengxiangbaidu/article/details/7189866
http://blog.csdn.net/mengxiangbaidu/article/details/7190702
http://blog.csdn.net/mengxiangbaidu/article/details/7192855
http://blog.csdn.net/mengxiangbaidu/article/details/7191723

Zend是默认的命名空间。例如在/model_demo1/library/Zend/Test.php创建类Zend_Test

<?php
class Zend_Test{static public function echoZendTest(){echo 'ZendTest<br/>';}
}

不需要做任何操作,就可以在程序中使用。例如:Zend_Test::echoZendTest();
这里简单说明自定义命名空间的两种方法:
1).使用application.ini配置文件
默认命名空间

appnamespace = "Application"

自定义命名空间

autoloadernamespaces.app = "App_"
autoloadernamespaces.my = "MyApp_" 

或者

autoloadernamespaces[] = "App_"
autoloadernamespaces[] = "MyApp_" 

具体实现类为:Zend\Application.php

    public function setOptions(array $options){if (!empty($options['config'])) {if (is_array($options['config'])) {$_options = array();foreach ($options['config'] as $tmp) {$_options = $this->mergeOptions($_options, $this->_loadConfig($tmp));}$options = $this->mergeOptions($_options, $options);} else {$options = $this->mergeOptions($this->_loadConfig($options['config']), $options);}}$this->_options = $options;$options = array_change_key_case($options, CASE_LOWER);$this->_optionKeys = array_keys($options);if (!empty($options['phpsettings'])) {$this->setPhpSettings($options['phpsettings']);}if (!empty($options['includepaths'])) {$this->setIncludePaths($options['includepaths']);}if (!empty($options['autoloadernamespaces'])) {$this->setAutoloaderNamespaces($options['autoloadernamespaces']);}

2).在Bootstrap.php文件中
例如/model_demo1/application/Bootstrap.php

<?phpclass Bootstrap extends Zend_Application_Bootstrap_Bootstrap {protected function _initAutoload() {$app = $this->getApplication ();$namespaces = array ('AppTest' );$app->setAutoloaderNamespaces ( $namespaces );return $app;}
}
/model_demo1/library/AppTest/Test.php
<?phpclass AppTest_Test{static public function echoAppTestTest(){echo 'AppTestTest<br/>';}
}

/model_demo1/application/controllers/IndexController.php

AppTest_Test::echoAppTestTest();

3).使用具体的类完成自动加载

$auto_loader = Zend_Loader_Autoloader::getInstance();
$resourceLoader = new Zend_Loader_Autoloader_Resource(array('basePath' => '/www/model_demo1/application','namespace' => '','resourceTypes' => array('model' => array('path' => 'models','namespace' => 'Model'))
)
);
$auto_loader->pushAutoloader($resourceLoader);
$auto_loader->registerNamespace(array('AppTest2_'));
AppTest2_Test::echoAppTest2Test();
Model_ModelTest::echoModelModelTest();

/model_demo1/application/models/ModelTest.php

<?php
class Model_ModelTest{static function echoModelModelTest(){echo 'Model_ModelTest<br/>';}
}
/model_demo1/library/AppTest2/Test.php
<?phpclass AppTest2_Test{static public function echoAppTest2Test(){echo 'AppTest2Test<br/>';}
}

Zend Framework教程-Zend的Model-基本规则和使用相关推荐

  1. php.ini开启命名空间,Zend Framework教程之模型Model基本规则和使用方法

    本文实例讲述了Zend Framework教程之模型Model基本规则和使用方法.分享给大家供大家参考,具体如下: 这里讲讲Zend中的model.其实Zend中的Model处理是相当简单的. 这主要 ...

  2. php zend framework 教程,Zend Framework入门教程之Zend_Session会话操作详解

    本文实例讲述了Zend Framework入门教程之Zend_Session会话操作.分享给大家供大家参考,具体如下: 会话命名空间 实现会话 代码: require_once "Zend/ ...

  3. Zend Framework教程-用Zend命令行快速创建Zend应用

    Zend Framework提供了命令行的方式快速创建应用,如果是用ZendStudio9,可能步采用命令行的方式,当时你稀饭的话,可以用. 下载完整的库文件包,在bin目录的几个脚本就是用来创建应用 ...

  4. Zend Framework教程-Zend_View

    Zend_View是Zend Framework的视图组件,MVC中的视图层. Zend_View也是应用的直接对用户展示的页面.这里介绍一下Zend_View的实现类,以及如何和Controller ...

  5. Zend Framework教程-Zend_Db-数据库操作4-Zend_Db_Select

    Zend_Db_Selec提供了构造SELECT查询语句的方法.通过Zend_Db_Select构造生成的查询语句是跨数据库的.下面介绍Zend_Db_Select提供的常见方法. class Zen ...

  6. Zend Framework教程-Zend_Db-数据库操作1-Zend_Db_Adapter

    上一节,大概了解了Zend Framework完成数据库操作的常用类,下面一一简单介绍其用法. Zend_Db_Adapter是我们操作数据库的常用方式,以下是几个比较重要的功能使用说明: 1.建立数 ...

  7. Zend Framework教程-Zend_Db-数据库概述

    在Zend Framework中,对数据库的封装,主要采用了工厂模式和适配器模式.具体模式的说明,可以参考设计模式相关的文章. 主要有如下几个功能: 一.Zend_Db_Adapter Zend_Db ...

  8. Zend Framework 快速开始

    翻译自learning Zend Framework的Zend Framework Quick Start .主要是为了经常熟悉熟悉常用组件的用法. Zend Framework自1.6以来,发生了很 ...

  9. WAMP + Zend Framework + Zend Studio For Eclipse 开发环境搭建

    组件 WAMP Server (Windows + Apache + MySql + PHP) 版本: WampServer 2.0e 网站: http://www.wampserver.com/en ...

最新文章

  1. IOS 常见面试汇总
  2. HTTP GET URL的最大长度
  3. java-Random类
  4. 使用四种框架分别实现百万websocket常连接的服务器--转
  5. lazada菲律宾本地店结束免佣金,商家如何申请免佣金优惠?
  6. CodeSandbox v3 发布,Web 项目的在线开发
  7. python 依据某几列累加求和_如何用Python找出OBV金叉的股票?
  8. [css] 使用css实现一个loading的效果
  9. ifram嵌入网址 有跨域问题
  10. Eclipse中Errors occurred during the build最简单的解决方法
  11. C++11 之for 新解
  12. latex 设置表格的字体大小和行高
  13. H5小游戏框架总结推荐
  14. 【KEIL-MDK】系列——如何使用PC-Lint代码检查工具
  15. Boost电路的参数设计
  16. oracle经纬度精确查询位置,基于经纬度定位车辆所在交通小区位置的方法与流程...
  17. Java绘制椭圆和矩形(实现自由变化大小的功能)
  18. gitlab 配https_gitlab容器--带https配置
  19. 分享一个转换pdf,PDF分割、指定页提取无需安装软件的方法
  20. Hiho303周 H国的身份证号码I

热门文章

  1. CAN总线接口芯片SIT1050Q和TJA1050有什么关系?能相互替代吗?
  2. openwrt-安装-驱动-应用-lcd2004a实验
  3. LNMP一键部署基于PHP和MYSQL的网站
  4. Nutanix喊你来共同启动“企业云”未来
  5. 太平洋保险集团A+H上市方案生变 年内先登A股
  6. 全功能智能车之暂时放弃PC端程序的研究(第十篇)
  7. 滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(3月20日)...
  8. 英文版sketch怎么转为中文,Sketch中英文切换教程
  9. html 设置不可用,NVIDIA 显示设置不可用。原因与解决方法
  10. Some question code