ZEND-MVC Intro

Source: Internet
Author: User
Tags autoload autoloader event listener
<span id="Label3"></p>ZEND-MVC Intro<p><p>The Zend MVC layer is built on servicemanager, eventmanager, http, stdlib, and several components. The related components are described in more detail in other Articles.</p></p><p><p>In addition to the above 4 components, MVC exposes several sub-components:router, controllers, Service, and View. The following is a brief introduction:</p></p><p><p>1, Router: matching the request to the relevant controller (also known as scheduling, Dispatch)</p></p><p><p>2, Controller: is a series of abstract classes, responsibility: event connectivity, Behavior scheduling, Controller Plug-ins.</p></p><p><p>3. Service: provide a series of servicemanager factories to provide a definition for the default application workflow.</p></p><p><p>4, view: provide default renderer, view Script parsing, Helper registration and so On. In addition, listeners are provided for the MVC WORKFLOW. Provides the following Features: automated template name resolution, Automated view model creation and injection, and More.</p></p><p><p>The Zend\mvc\application object when it leads to the door to Mvc. The main responsibilities are: directing resources, routing requests, accepting and scheduling matching controllers during Routing. When the appeal is complete, the view is rendered, the request is completed, and the answer is Returned.</p></p><strong><strong>Application's infrastructure:</strong></strong><pre><span style="color: #008080;"><span style="color: #008080;">1</span></span>application_root/<span style="color: #008080;"><span style="color: #008080;">2</span></span>config/<span style="color: #008080;"><span style="color: #008080;">3</span></span> <span style="color: #000000;"><span style="color: #000000;">application.config.php</span></span><span style="color: #008080;"><span style="color: #008080;">4</span></span>autoload/<span style="color: #008080;"><span style="color: #008080;">5</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Global</span></span><span style="color: #000000;"><span style="color: #000000;">. PHP</span></span><span style="color: #008080;"><span style="color: #008080;">6</span></span> <span style="color: #000000;"><span style="color: #000000;">local.php</span></span><span style="color: #008080;"><span style="color: #008080;">7</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">etc.</span></span><span style="color: #008080;"><span style="color: #008080;">8</span></span>data/<span style="color: #008080;"><span style="color: #008080;">9</span></span>module/<span style="color: #008080;"><span style="color: #008080;">Ten</span></span>vendor/<span style="color: #008080;"><span style="color: #008080;"></span> one</span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span>/<span style="color: #008080;"><span style="color: #008080;"></span> a</span> <span style="color: #000000;"><span style="color: #000000;">. htaccess</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">index.php</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>init_autoloader.php</pre><p><p>The following are the relevant Roles:</p></p><p><p>1. Public/index.php: arrange all user requests to your website and get configuration information from Config/application.config.php. On return, Run application using the Run () method to process the request & return Answer.</p></p><p><p>2. Config/:modulemanager uses the configuration file under this directory to load modules and merge these Configurations.</p></p><p><p>3. vendor/: any third-party module or library file that your application relies on should be in this directory. generally, This directory is managed by composer.</p></p><p><p>4, module/: This directory may contain one or more modules, these modules determine the function of your Application.</p></p><strong><strong>Basic Module Structure:</strong></strong><p><p>A module can basically contain anything: PHP code, library code, View scripts, public assets such as: pictures, CSS, JavaScript. The only requirement (or even optional): a module acts as a PHP namespace that contains a module class. This class will eventually be used by Modulemanager to perform some tasks.</p></p><p><p>The recommended module structure is as Follows:</p></p><pre><span style="color: #008080;"><span style="color: #008080;">1</span></span>module_root<name-after-module-<span style="color: #0000ff;"><span style="color: #0000ff;">namespace</span></span>>/<span style="color: #008080;"><span style="color: #008080;">2</span></span> <span style="color: #000000;"><span style="color: #000000;">module.php</span></span><span style="color: #008080;"><span style="color: #008080;">3</span></span> <span style="color: #000000;"><span style="color: #000000;">autoload_classmap.php</span></span><span style="color: #008080;"><span style="color: #008080;">4</span></span> <span style="color: #000000;"><span style="color: #000000;">autoload_function.php</span></span><span style="color: #008080;"><span style="color: #008080;">5</span></span> <span style="color: #000000;"><span style="color: #000000;">autoload_register.php</span></span><span style="color: #008080;"><span style="color: #008080;">6</span></span>config/<span style="color: #008080;"><span style="color: #008080;">7</span></span> <span style="color: #000000;"><span style="color: #000000;">module.config.php</span></span><span style="color: #008080;"><span style="color: #008080;">8</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> public</span>/<span style="color: #008080;"><span style="color: #008080;">9</span></span>images/<span style="color: #008080;"><span style="color: #008080;">Ten</span></span>css/<span style="color: #008080;"><span style="color: #008080;"></span> one</span>js/<span style="color: #008080;"><span style="color: #008080;"></span> a</span>src/<span style="color: #008080;"><span style="color: #008080;"></span> -</span><module_namespace>/<span style="color: #008080;"><span style="color: #008080;"></span> -</span><code file><span style="color: #008080;"><span style="color: #008080;"></span> the</span>test/<span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">Phpunit.xml</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">bootstrap.php</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span><module_namespace>/<span style="color: #008080;"><span style="color: #008080;"></span> +</span><test Code files><span style="color: #008080;"><span style="color: #008080;"></span> -</span>view/<span style="color: #008080;"><span style="color: #008080;"></span> +</span><dir-named-after-module-<span style="color: #0000ff;"><span style="color: #0000ff;">namespace</span></span>>/<span style="color: #008080;"><span style="color: #008080;"></span> a</span><dir-named-after-a-conftroller>/<span style="color: #008080;"><span style="color: #008080;"></span> at</span><.phtml files></pre><p><p>Since a module serves as a namespace, the module root should be the Namespace. This namespace can also contain a prefix for a vendor. For example, the core of a module is the user function, the module is provided by zend, then the module can be named Zenduser.</p></p><p><p>The appeal structure is actually a PSR-0-compliant structure. You can also use the PSR-4 structure, as long as you properly set the Autoload.</p></p><p><p>The module.php is placed directly under the root of the module, and its namespace should be the namespace that the module assumes:</p></p><pre><pre><span style="color: #008080;">1</span> <span style="color: #000000;">namespace zenduser;</span> <span style="color: #008080;">2</span> <span style="color: #0000ff;">class</span> <span style="color: #000000;">Module</span> <span style="color: #008080;">3</span> <span style="color: #000000;">{</span><span style="color: #008080;">4</span> }</pre></pre><p><p>Note: the location of the module class:</p></p><p><p>If you define autoloader or use the composer autoloading feature, you can put module.php in the same place. The current recommendation is to use composer to define Autoloading.</p></p><p><p>If you define the init () method, The method is triggered by the Modulemanager listener when the module class is loaded, and is passed to an Modulemanager instance. This allows you to perform a task similar to setting up a module-specific event listener. But be careful: the init () method is called whenever there is a request for each module on each page. therefore, This method only performs some lightweight tasks (such as registering listeners). Similar Onbootstrap () methods that accept Mvcevent instances should also perform only a few lightweight tasks when they are defined.</p></p><p><p>Three autoload_*.php files are not Required. If you do not use composer to provide autoload, it is recommended to use these three Files.</p></p> <table style="height: 80px; width: 523px;" border="1"> <tbody> <tr> <td>FILE</td> <td>Description</td> </tr> <tr> <td>autoload_classmap.php</td> <td>Returns an associative array of class mappings (name/filename), with the value filename parsed by the __dir__ magic Constant.</td> </tr> <tr> <td>autoload_function.php</td> <td>Returns a PHP callback function that can be passed into the Spl_autoload_register () Function. In general, these callback functions take advantage of the mappings returned by autoload_classmap.php.</td> </tr> <tr> <td>autoload_register.php</td> <td>Register the PHP callback Function. (these callback functions are typically returned by autoload_function.php, using Spl_autoload_register () to register).</td> </tr> </tbody> </table><p><p>These three files actually provide a mechanism for automatically loading the classes inside the module, providing a way to use the modules without the need for modulemanager.</p></p><p><p>The config directory should contain a module-qualified Configuration. These files can be in any zend-config supported Format. We recommend naming the master configuration module.config.<format> (for example, php-based configuration: module.config.php). In general you will create profiles for router and servicemanager.</p></p><p><p>The SRC directory should conform to PSR-0 or PSR-4 standards.</p></p><p><p>The test directory should contain your testing units, which, in general, can be written using phpunit.</p></p><p><p>The public directory should be used to store what you want to expose (more than tablets, css,javascript, etc.)</p></p><p><p>The view directory contains the views script associated with your controller.</p></p>Boot a application:<p><p>Application has 7 base dependencies:</p></p><p><p>1, configuration;</p></p><p><p>2, ServiceManager example;</p></p><p><p>3, EventManager Instance (by default, The service name is obtained from the ServiceManager eventmanager);</p></p><p><p>4, Sharedeventmanager Instances (also obtained from the servicemanager, this instance will be injected</p></p><p><p>EventManager instances);</p></p><p><p>5, Modulemanager Example (get the way ibid.);</p></p><p><p>6, the request instance (obtain the way ibid.);</p></p><p><p>7, reponse Instances (get the same way).</p></p><p><p>The dependency resolution code is as Follows:</p></p><pre><span style="color: #008080;"><span style="color: #008080;">1</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> use</span><span style="color: #000000;"><span style="color: #000000;">zend\eventmanager\eventmanager;</span></span><span style="color: #008080;"><span style="color: #008080;">2</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> use</span><span style="color: #000000;"><span style="color: #000000;">zend\eventmanager\sharedmanager;</span></span><span style="color: #008080;"><span style="color: #008080;">3</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> use</span><span style="color: #000000;"><span style="color: #000000;">zend\http\phpenvironment;</span></span><span style="color: #008080;"><span style="color: #008080;">4</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> use</span><span style="color: #000000;"><span style="color: #000000;">zend\modulemanager\modulemanager;</span></span><span style="color: #008080;"><span style="color: #008080;">5</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> use</span><span style="color: #000000;"><span style="color: #000000;">zend\mvc\application;</span></span><span style="color: #008080;"><span style="color: #008080;">6</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> use</span><span style="color: #000000;"><span style="color: #000000;">zend\servicemanager\servicemanager;</span></span><span style="color: #008080;"><span style="color: #008080;">7</span></span> <span style="color: #008080;"><span style="color: #008080;">8</span></span> <span style="color: #800080;"><span style="color: #800080;">$config</span></span>=<span style="color: #0000ff;"><span style="color: #0000ff;">include</span></span>' Config/application.config.php '<span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;">9</span></span> <span style="color: #800080;"><span style="color: #800080;">$serviceManager</span></span>=<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span><span style="color: #000000;"><span style="color: #000000;">ServiceManager ();</span></span><span style="color: #008080;"><span style="color: #008080;">Ten</span></span> <span style="color: #800080;"><span style="color: #800080;">$serviceManger</span></span>->setservice (' Sharedeventmanger ',<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span><span style="color: #000000;"><span style="color: #000000;">Sharedeventmanager ();</span></span><span style="color: #008080;"><span style="color: #008080;"></span> one</span> <span style="color: #800080;"><span style="color: #800080;">$serviceManager</span></span>->setservice (' Modulemanager ',<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span>Modulemanager (<span style="color: #800080;"><span style="color: #800080;">$config</span></span><span style="color: #000000;"><span style="color: #000000;">));</span></span><span style="color: #008080;"><span style="color: #008080;"></span> a</span> <span style="color: #800080;"><span style="color: #800080;">$serviceManager</span></span>->setservice (' Request ',<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span><span style="color: #000000;"><span style="color: #000000;">phpenvironment\request ());</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #800080;"><span style="color: #800080;">$serviceManager</span></span>->setservice (' reponse ',<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span><span style="color: #000000;"><span style="color: #000000;">Phpenvironment\reponse ());</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #800080;"><span style="color: #800080;">$serviceManager</span></span>->setfactory (' EventManager ',<span style="color: #0000ff;"><span style="color: #0000ff;">function</span></span>(<span style="color: #800080;"><span style="color: #800080;">$serviceManager</span></span><span style="color: #000000;"><span style="color: #000000;">) {</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #800080;"><span style="color: #800080;">$eventManager</span></span>=<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span><span style="color: #000000;"><span style="color: #000000;">EventManager ();</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #800080;"><span style="color: #800080;">$eventManager</span></span>->setsharedmanager (<span style="color: #800080;"><span style="color: #800080;">$serviceMnager</span></span>->get (' Sharedeventmanager '<span style="color: #000000;"><span style="color: #000000;">);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span> <span style="color: #800080;"><span style="color: #800080;">$eventManager</span></span><span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">});</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span> <span style="color: #800080;"><span style="color: #800080;">$serviceManager</span></span>->setshared (' EventManager ',<span style="color: #0000ff;"><span style="color: #0000ff;">false</span></span><span style="color: #000000;"><span style="color: #000000;">);</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #800080;"><span style="color: #800080;">$application</span></span>=<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span>Application (<span style="color: #800080;"><span style="color: #800080;">$config</span></span>,<span style="color: #800080;"><span style="color: #800080;">$serviceManager</span></span>);</pre><p><p>Once you have solved the dependency, you have two additional options:</p></p><p><p>1. The steps to boot the Application;bootstrap () method are as Follows:</p></p><p><p>Connect the default route (zend\mvc\routelistener);</p></p><p><p>Connected Middleware Scheduling Listener (zend\mvc\middlewarelistener);</p></p><p><p>Connect the default dispatch listener (zend\mvc\dispatchlistener);</p></p><p><p>Connecting the Viewmanager listener (zend\mvc\view\viewmanager);</p></p><p><p>Create mvcevent, and inject with application,request and response. At this point it also acquires the router (zend\mvc\router\http\treeroutestack) and connects to the event;</p></p><p><p>Triggers the "bootstrap" event.</p></p><p><p>These are just the default steps, and you can also choose the steps you want to perform by inheriting Application.</p></p><p><p>2, If you do not want to guide application, there is an alternative choice. Use the configured application, and then call the run () method. Calling this method will perform the following actions</p></p><p><p>Triggering a routed event;</p></p><p><p>then, according to the implementation of the event scheduling;</p></p><p><p>Triggering the Render event</p></p><p><p>When finished, the finish event is triggered and the answer instance is Returned. The Dispatch.error event will occur whenever an error occurs.</p></p><p><p>In order to guide application, there seems to be a lot of work to do, but in fact you do not need to cover so many services, directly with the default ServiceManager configuration can Be.</p></p><pre><span style="color: #0000ff;"><span style="color: #0000ff;"></span> use</span><span style="color: #000000;"><span style="color: #000000;">zend\loader\autoloaderfactory;</span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> use</span><span style="color: #000000;"><span style="color: #000000;">zend\mvc\service\servicemangerconfig;</span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> use</span><span style="color: #000000;"><span style="color: #000000;">zend\servicemanager\servicemanger;</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Setup Autoloader</span></span>autoloaderfactory::<span style="color: #000000;"><span style="color: #000000;">Factory ();</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">get application Stack configuratin</span></span><span style="color: #800080;"><span style="color: #800080;">$configuration</span></span>=<span style="color: #0000ff;"><span style="color: #0000ff;">include</span></span>' Config/application.php ';<br><br>Setup Service Manager<br>$serviceManager = new ServiceManager (new servicemanagerconfig ());<br>$serviceManager->setservice (' applicationconfig ', $configuration);<br><br>Load Modules--which would provides services, configuration, and more<br>$serviceManager->get (' Modulemanager ')->loadmodules ();<br><br>Bootstrap and Run application<br>$application = $serviceManager->get (' application ');<br>$application->bootstrap ();<br>$application->run ();</pre><p><p>You can even make this easier: we use the Init () method inside the Application. This is a static method that initializes the application instance Quickly.</p></p><pre><span style="color: #0000ff;"><span style="color: #0000ff;"></span> use</span><span style="color: #000000;"><span style="color: #000000;">zend\loader\autoloaderfactory;</span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> use</span><span style="color: #000000;"><span style="color: #000000;">zend\mvc\application;</span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> use</span><span style="color: #000000;"><span style="color: #000000;">zend\mvc\service\servicemanagerconfig;</span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> use</span><span style="color: #000000;"><span style="color: #000000;">zend\servicemanager\servicemanager;</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Setup Autoloader</span></span>autoloaderfactory::<span style="color: #000000;"><span style="color: #000000;">Factory ();</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">get application stack configuration</span></span><span style="color: #800080;"><span style="color: #800080;">$configuration</span></span>=<span style="color: #0000ff;"><span style="color: #0000ff;">include</span></span>' Config/application.config.php '<span style="color: #000000;"><span style="color: #000000;">;</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;">the <span style="color: #008000;">init () method does something very similar with the previous Example.</span></span>Application::init (<span style="color: #800080;"><span style="color: #800080;">$configuration</span></span>)->run ();</pre><p><p>Init () performs the following steps:</p></p><p><p>Get configuration information for application, get the key word from servicemanager, create a ServiceManager instance using the default service and the configuration you just made</p></p><p><p>Create a service named Applicationconfig using the configuration array</p></p><p><p>Get the Modulemanager service, and then load the module</p></p><p><p>Bootstrap () application and returns the instance</p></p><p><p>Note: about Applicationconfig services: If you use the init method, you will not be able to specify a service with the same name in your service management Configuration. This name is reserved for receiving arrays from APPLICATION.CONFIG.PHP. The following services can only be rewritten in application.config.php:</p></p><p><p>Modulemanager</p></p><p><p>Sharedeventmanager</p></p><p><p>EventManager</p></p><p><p>Zend\eventmanager\eventmanagerinterface</p></p><p><p>Other services will be configured after the module is loaded, so it can be rewritten inside the Module.</p></p>To guide a modular application<p><p>When we create a modular application, we assume that the configuration file originates from the module itself. How do we get information and aggregate them?</p></p><p><p>The answer is through Modulemanager. This component allows you to specify the module that application will Use. Then he will locate each module and initialize it. Module classes can be embedded in different listeners to provide configuration, services, listeners, and so on for Application.</p></p><p><p>Configuring Module Manager</p></p><p><p>The first step is to configure the module manager. Notifies the module manager which modules can be loaded and provides configuration for module Listeners. In application.config.php we have the following code:</p></p><pre><span style="color: #008080;"><span style="color: #008080;">1</span></span><?<span style="color: #000000;"><span style="color: #000000;">PHP</span></span><span style="color: #008080;"><span style="color: #008080;">2</span></span> <span style="color: #008080;"><span style="color: #008080;">3</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">config/application.php</span></span><span style="color: #008080;"><span style="color: #008080;">4</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Array</span></span><span style="color: #000000;"><span style="color: #000000;">[</span></span><span style="color: #008080;"><span style="color: #008080;">5</span></span>' Modules ' =<span style="color: #0000ff;"><span style="color: #0000ff;">Array</span></span><span style="color: #000000;"><span style="color: #000000;">[</span></span><span style="color: #008080;"><span style="color: #008080;">6</span></span>],<span style="color: #008080;"><span style="color: #008080;">7</span></span> <span style="color: #008080;"><span style="color: #008080;">8</span></span>' Module_listener_options ' =<span style="color: #000000;"><span style="color: #000000;"> [</span></span><span style="color: #008080;"><span style="color: #008080;">9</span></span>' Module_paths ' =<span style="color: #000000;"><span style="color: #000000;"> [</span></span><span style="color: #008080;"><span style="color: #008080;">Ten</span></span>'./module ',<span style="color: #008080;"><span style="color: #008080;"></span> one</span>'./vendor ',<span style="color: #008080;"><span style="color: #008080;"></span> a</span> <span style="color: #000000;"><span style="color: #000000;"> ]</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;"> ]</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>];</pre><p><p>Each module class that wants application to know the configuration information should define a getconfig () method. The method should return an array or an object that can be traversed (such as a zend\config\config instance)</p></p><p><p>code example</p></p><pre><pre><span style="color: #008080;">1</span> <span style="color: #000000;">namespace zenduser;</span> <span style="color: #008080;">2</span> <span style="color: #0000ff;">class</span> <span style="color: #000000;">Module</span> <span style="color: #008080;">3</span> <span style="color: #000000;">{</span><span style="color: #008080;">4</span> <span style="color: #0000ff;"></span> public <span style="color: #0000ff;">function</span> <span style="color: #000000;">GetConfig ()</span> <span style="color: #008080;">5</span> <span style="color: #000000;"> {</span><span style="color: #008080;">6</span> <span style="color: #0000ff;">return</span><span style="color: #0000ff;">include</span> __dir__. '/config/module.config.php '<span style="color: #008080;">7</span><span style="color: #000000;"> }</span><span style="color: #008080;">8</span> }</pre></pre><p><p></p></p><p><p>ZEND-MVC Intro</p></p></span>

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.