搜尋
首頁php教程PHP开发Zend Framework教學之模型Model基本規則與使用方法

本文實例講述了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

  del :

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 &#39;ZendTest<br/>&#39;;
 }
}

   


不需要做任何操作,就可以在程式中使用。例如:Zend_Test::echoZendTest();

這裡簡單說明自訂命名空間的兩種方法:


1).使用application.ini設定檔

預設命名空間

appnamespace = "Application"

自訂

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

具體實作類別為:ZendApplication.php

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

   

2).Bootstrap.php檔案


/model_demo1/library /AppTest/Test.php

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

/model_demo1/application/controllers/IndexController.php

<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
 protected function _initAutoload() {
  $app = $this->getApplication ();
  $namespaces = array (
    &#39;AppTest&#39;
  );
  $app->setAutoloaderNamespaces ( $namespaces );
  return $app;
 }
}

3).使用具體的類完成自動加載

<?php
class AppTest_Test{
 static public function echoAppTestTest(){
  echo &#39;AppTestTest<br/>&#39;;
 }
}

   


/model_demo1/application/models/ModelTest.php

AppTest_Test::echoAppTestTest();

/model_demo1/library/AppTest2/Test.php

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

希望本文所述對大家PHP程式設計有所幫助。

更多Zend Framework教程之模型Model基本規則和使用方法相關文章請關注PHP中文網!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。