本文实例讲述了Zend Framework教程之模型Model基本规则和使用方法。分享给大家供大家参考,具体如下:
这里讲讲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.自定义命名空间
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
<?php class 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
<?php class 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
<?php class AppTest2_Test{ static public function echoAppTest2Test(){ echo 'AppTest2Test<br/>'; } }
希望本文所述对大家PHP程序设计有所帮助。
更多Zend Framework教程之模型Model基本规则和使用方法相关文章请关注PHP中文网!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver Mac版
视觉化网页开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器