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 'ZendTest<br/>'; } }
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
oderappnamespace = "Application"
autoloadernamespaces.app = "App_" autoloadernamespaces.my = "MyApp_"
autoloadernamespaces[] = "App_" autoloadernamespaces[] = "MyApp_"
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). 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 ( 'AppTest' ); $app->setAutoloaderNamespaces ( $namespaces ); return $app; } }
/model_demo1/library/AppTest/Test.php
/model_demo1/application/controllers/IndexController.php
<?php class AppTest_Test{ static public function echoAppTestTest(){ echo 'AppTestTest<br/>'; } }
AppTest_Test::echoAppTestTest();
$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
/model_demo1/library/AppTest2/Test.php
<?php class Model_ModelTest{ static function echoModelModelTest(){ echo 'Model_ModelTest<br/>'; } }
Weitere Artikel zu den Grundregeln und der Verwendung des Modells im Zend Framework-Tutorial finden Sie auf der chinesischen PHP-Website!