This article describes the Zend Framework tutorial model model basic rules and usage methods. Share it with everyone for your reference, the details are as follows:
Here we talk about the model in Zend. In fact, Model processing in Zend is quite simple.
This is mainly due to the autoload function. Unlike other frameworks, complex base classes are defined for models.
If you want to define a model, you have to inherit a model base class before you can use specific functions.
The model is not encapsulated in Zend.
The reason is probably that the Model is mainly related to specific business logic, and too much encapsulation will only add insult to injury.
Zend uses the autoload and namespace functions to solve this problem tactfully.
Create a zendframework project model_demo1
In order to easily view errors, we can turn on the error information switch in the configuration file /model_demo1/application/configs/application.ini as follows:
phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1
The following is a brief talk about the model in zend:
1.Default Model
A standard webapp will have a directory such as application/models. It is not difficult to see that models are used to store the model of your app
The power of this directory is that if you define specific classes in the models directory. zend will automatically load it for us. Of course, certain conventions must be followed. The premise is:
For example, use the zf command line to create a Model named Test
zf create model Test
Creating a model at /www/model_demo1/application/models/Test.php
Updating project profile '/www/model_demo1/.zfproject.xml'
Refresh the project directory and you will see that the following file has been added/model_demo1/application/models/Test.php
The content of the file is as follows:
<?php class Application_Model_Test {}
It is not difficult to see that we must follow the following rules when using Model:
1). Start with Application_Model_, followed by the class name of the custom model.
That is: the directory structure of the model of our web application is /model_demo1/application/models/Test.php
The corresponding namespace is Application_Model_Test.
application corresponds to Application
models correspond to models
Test is the name of the model’s class file.
The name of the class according to the constraints is: class Application_Model_Test {
It is not difficult to understand Application_Model_. Such rules follow the autoload and namespace conventions of zend framework.
2).Application namespace
In fact, Application is also the namespace of the application we configured in the configuration file.
If you change the appnamespace = "Application" of the configuration file to appnamespace = "App".
Our original program will report an error. The reason is self-evident. So zend is not that smart.
If you want to investigate the principle in detail, it is probably the following class that completes this function:
Zend_Application_Bootstrap_Bootstrap Zend_Application_Module_Autoloader
2. Custom namespace
Zend is the default namespace. For example, create the class Zend_Test
in /model_demo1/library/Zend/Test.php<?php class Zend_Test{ static public function echoZendTest(){ echo 'ZendTest<br/>'; } }
You don’t need to do anything to use it in the program. For example: Zend_Test::echoZendTest();
Here are two simple ways to customize namespaces:
1).Use application.ini configuration file
Default namespace
appnamespace = "Application"
Custom namespace
autoloadernamespaces.app = "App_" autoloadernamespaces.my = "MyApp_"
or
autoloadernamespaces[] = "App_" autoloadernamespaces[] = "MyApp_"
The specific implementation class is: ZendApplication.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).In the Bootstrap.php file
For example/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). Use specific classes to complete automatic loading
$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/>'; } }
Readers who are interested in more zend-related content can check out the special topics of this site: "Zend FrameWork Framework Introductory Tutorial", "php Excellent Development Framework Summary", "Yii Framework Introduction and Summary of Common Techniques", "ThinkPHP Introductory Tutorial" , "php object-oriented programming introductory tutorial", "php mysql database operation introductory tutorial" and "php common database operation skills summary"
I hope this article will be helpful to everyone in PHP programming.