国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

Zend Framework教程之模型Model基本規(guī)則和使用方法

2024-05-04 23:43:33
字體:
供稿:網(wǎng)友
這篇文章主要介紹了Zend Framework教程之模型Model基本規(guī)則和使用方法,結(jié)合實(shí)例形式詳細(xì)分析了Zend Framework中模型的原理與具體使用技巧,需要的朋友可以參考下
 

本文實(shí)例講述了Zend Framework教程之模型Model基本規(guī)則和使用方法。分享給大家供大家參考,具體如下:

這里講講Zend中的model。其實(shí)Zend中的Model處理是相當(dāng)簡單的。

這主要得益于autoload功能。不像其它框架,為model定義復(fù)雜的基類。

如果要定義model,不得不要繼承一個(gè)model的基類,才可以使用具體的功能。

Zend中并沒有對模型進(jìn)行封裝。

原因大概是Model主要是和具體業(yè)務(wù)邏輯相關(guān)的,進(jìn)行過多的封裝,只會(huì)畫蛇添足。

Zend使用了autoload和namespace功能,很委婉的解決了這個(gè)問題。

創(chuàng)建一個(gè)zendframework項(xiàng)目model_demo1

為了方便查看錯(cuò)誤我們可以在配置文件中/model_demo1/application/configs/application.ini打開錯(cuò)誤信息開關(guān)如下:

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

接下來簡單的講講zend中的model:

1.默認(rèn)的Model

一個(gè)標(biāo)準(zhǔn)的webapp中會(huì)有application/models這樣的目錄。不難看出,models用來存放你的app的model

這個(gè)目錄的強(qiáng)大之處在于,如果你在models目錄中定義了具體的class。zend會(huì)自動(dòng)的幫我們加載,當(dāng)然要遵循一定的約定,前提是:

例如,用zf命令行創(chuàng)建一個(gè)名為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'

刷新一下項(xiàng)目目錄可以看到,新增了如下文件/model_demo1/application/models/Test.php

文件內(nèi)容如下:

<?phpclass Application_Model_Test{}

不難看出我們要使用Model要遵循如下規(guī)則:

1).以Application_Model_開頭,然后后面是自定義的model的類名稱。

即:我們web應(yīng)用的model的目錄結(jié)構(gòu)為/model_demo1/application/models/Test.php

對應(yīng)的命名空間為Application_Model_Test。

application對應(yīng)Application

models對應(yīng)models

Test是model的類文件的名稱。

類的名稱按照約束就是:class Application_Model_Test {

也不難理解Application_Model_,這樣的規(guī)則遵循zend framework的autoload和namespace的約定。

2).Application命名空間

其實(shí)Application也是我們在配置文件中配置的應(yīng)用的命名空間。

如果把配置文件的appnamespace = "Application"修改為appnamespace = "App"。

我們原先的程序,就會(huì)報(bào)錯(cuò)了。原因不言而喻。所以zend也沒有那么智能。

如果要詳細(xì)追究其原理,大概是如下的類完成這個(gè)功能的:

Zend_Application_Bootstrap_BootstrapZend_Application_Module_Autoloader

2.自定義命名空間

Zend是默認(rèn)的命名空間。例如在/model_demo1/library/Zend/Test.php創(chuàng)建類Zend_Test

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

不需要做任何操作,就可以在程序中使用。例如:Zend_Test::echoZendTest();
這里簡單說明自定義命名空間的兩種方法:

1).使用application.ini配置文件

默認(rèn)命名空間

appnamespace = "Application"

自定義命名空間

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

或者

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

具體實(shí)現(xiàn)類為: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).使用具體的類完成自動(dòng)加載

$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

<?phpclass 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/>'; }}
 


注:相關(guān)教程知識(shí)閱讀請移步到PHP教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 娱乐| 古浪县| 开原市| 扶绥县| 鄂托克前旗| 广州市| 金川县| 玛曲县| 友谊县| 那坡县| 左云县| 互助| 保亭| 东平县| 武山县| 涪陵区| 额尔古纳市| 舒城县| 桦川县| 庆城县| 中江县| 阳新县| 博野县| 永州市| 施秉县| 乌兰察布市| 祁连县| 化隆| 河间市| 达拉特旗| 博兴县| 三台县| 阳信县| 浦东新区| 巴东县| 平乐县| 阿荣旗| 梧州市| 富川| 吴川市| 邢台市|