Heim  >  Artikel  >  php教程  >  Zend Framework-Tutorial: Grundregeln und Verwendung des Modells

Zend Framework-Tutorial: Grundregeln und Verwendung des Modells

高洛峰
高洛峰Original
2017-01-03 13:47:001206Durchsuche

Die Beispiele in diesem Artikel beschreiben die Grundregeln und die Verwendung des Modells im Zend Framework-Tutorial. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Hier sprechen wir über das Modell in Zend. Tatsächlich ist die Modellverarbeitung in Zend recht einfach.

Das liegt vor allem an der Autoload-Funktion. Im Gegensatz zu anderen Frameworks werden für Modelle komplexe Basisklassen definiert.

Wenn Sie ein Modell definieren möchten, müssen Sie eine Modellbasisklasse erben, bevor Sie bestimmte Funktionen verwenden können.

Das Modell ist nicht in Zend gekapselt.

Der Grund liegt wahrscheinlich darin, dass sich das Modell hauptsächlich auf eine bestimmte Geschäftslogik bezieht und eine übermäßige Kapselung nur zur Verwirrung führt.

Zend nutzt die Autoload- und Namespace-Funktionen, um dieses Problem taktvoll zu lösen.

Erstellen Sie ein Zendframework-Projekt model_demo1

Um Fehler einfach anzuzeigen, können wir den Fehlermeldungsschalter in der Konfigurationsdatei /model_demo1/application/configs/application.ini wie folgt aktivieren:

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

Als nächstes sprechen wir kurz über das Modell in Zend:

1. Standardmodell

Eine Standard-Webanwendung hat ein Verzeichnis wie Anwendung/Modelle. Es ist nicht schwer zu erkennen, dass Modelle zum Speichern des Modells

Ihrer App verwendet werden. Die Stärke dieses Verzeichnisses liegt darin, dass Sie eine bestimmte Klasse im Modellverzeichnis definieren. Zend lädt es automatisch für uns. Natürlich müssen wir bestimmte Konventionen befolgen. Die Prämisse lautet:

Verwenden Sie beispielsweise die ZF-Befehlszeile, um ein Modell mit dem Namen Test zu erstellen

zf create model Test

Erstellen ein Modell unter /www/model_demo1/application/models/Test.php

Projektprofil „/www/model_demo1/.zfproject.xml“ aktualisieren

Aktualisieren Sie das Projektverzeichnis und Sie können das sehen Die folgenden neuen Ergänzungen sind File/model_demo1/application/models/Test.php

Der Inhalt der Datei lautet wie folgt:

<?php
class Application_Model_Test
{}

Es ist nicht schwer zu erkennen, dass wir folgen müssen Befolgen Sie die folgenden Regeln für die Verwendung von Model:

1) .Beginnen Sie mit Application_Model_, gefolgt vom Klassennamen des benutzerdefinierten Modells.

Das heißt: Die Verzeichnisstruktur des Modells unserer Webanwendung ist /model_demo1/application/models/Test.php

Der entsprechende Namespace ist Application_Model_Test.

Anwendung entspricht Anwendung

Modelle entspricht Modellen

Test ist der Name der Klassendatei des Modells.

Der Name der Klasse richtet sich nach den Einschränkungen: class Application_Model_Test {

Es ist nicht schwer, Application_Model_ zu verstehen. Solche Regeln folgen den Autoload- und Namespace-Konventionen des Zend-Frameworks.

2).Application-Namespace

Tatsächlich ist Application auch der Namespace der Anwendung, die wir in der Konfigurationsdatei konfiguriert haben.

Wenn Sie den appnamespace = „Application“ der Konfigurationsdatei in appnamespace = „App“ ändern.

Unser Originalprogramm meldet einen Fehler. Der Grund liegt auf der Hand. Zend ist also nicht so schlau.

Wenn Sie das Prinzip im Detail untersuchen möchten, ist es wahrscheinlich die folgende Klasse, die diese Funktion vervollständigt:

Zend_Application_Bootstrap_Bootstrap
Zend_Application_Module_Autoloader


2. Definieren Sie den Namespace selbst

Zend ist der Standard-Namespace. Erstellen Sie beispielsweise die Klasse Zend_Test in /model_demo1/library/Zend/Test.php

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

use. Zum Beispiel: Zend_Test::echoZendTest();

Hier sind zwei einfache Möglichkeiten, den Namespace anzupassen:


1). Verwenden Sie die Konfigurationsdatei application.ini

Standard-Namespace

Benutzerdefinierter Namespace

oder
appnamespace = "Application"

Die spezifische Implementierungsklasse ist: ZendApplication.php
autoloadernamespaces.app = "App_"
autoloadernamespaces.my = "MyApp_"

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

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;]);
 }

2). In der Datei Bootstrap.php

zum Beispiel/model_demo1/application/Bootstrap.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;
 }
}

/model_demo1/library/AppTest/Test.php


/model_demo1/application/controllers/IndexController.php

3) . Verwenden Sie bestimmte Klassen, um das automatische Laden abzuschließen
<?php
class AppTest_Test{
 static public function echoAppTestTest(){
  echo &#39;AppTestTest<br/>&#39;;
 }
}

AppTest_Test::echoAppTestTest();

$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();

/model_demo1/application/models/ModelTest.php


/model_demo1/library/AppTest2/Test.php

Ich hoffe, dieser Artikel wird für alle hilfreich sein, die sich mit PHP-Programmierung befassen.
<?php
class Model_ModelTest{
 static function echoModelModelTest(){
  echo &#39;Model_ModelTest<br/>&#39;;
 }
}

Weitere Artikel zu den Grundregeln und der Verwendung des Modells im Zend Framework-Tutorial finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn