Zend Framework - Skeleton Application

Let us create a skeleton application using the Zend Framework MVC layer and module systems.

Installation using Composer

The easiest way to create a new Zend Framework project is to use a Composer. It is defined as below −

$ cd /path/to/install 
$ composer create-project -n -sdev zendframework/skeleton-application myapp

You would see the following result on your screen −

Installing zendframework/skeleton-application (dev-master 
   - Installing zendframework/skeleton-application (dev-master master)
   Cloning master

Created project in myapp
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
   - Installing zendframework/zend-component-installer (0.3.0)
   Loading from cache
   - Installing zendframework/zend-stdlib (3.0.1)
   Loading from cache
   - Installing zendframework/zend-config (2.6.0)
   Loading from cache
   - Installing zendframework/zend-loader (2.5.1)
   Loading from cache
   - Installing zendframework/zend-eventmanager (3.0.1)
   Loading from cache
   - Installing zendframework/zend-view (2.8.0)
   Loading from cache
   - Installing container-interop/container-interop (1.1.0)
   Loading from cache
   - Installing zendframework/zend-servicemanager (3.1.0)
   Loading from cache
   - Installing zendframework/zend-validator (2.8.1)
   Loading from cache
   - Installing zendframework/zend-escaper (2.5.1)
   Loading from cache
   - Installing zendframework/zend-uri (2.5.2)
   Loading from cache
   - Installing zendframework/zend-http (2.5.4)
   Loading from cache
   - Installing zendframework/zend-router (3.0.2)
   Loading from cache
   - Installing zendframework/zend-modulemanager (2.7.2)
   Loading from cache

   - Installing zendframework/zend-mvc (3.0.1)
   Loading from cache
   - Installing zendframework/zend-skeleton-installer (0.1.3)
   Loading from cache
   - Installing zfcampus/zf-development-mode (3.0.0)
   Loading from cache
zendframework/zend-config suggests installing zendframework/zend-filter
   (Zend\Filter component)
zendframework/zend-config suggests installing zendframework/zend-i18n
   (Zend\I18n component)
zendframework/zend-config suggests installing zendframework/zend-json
   (Zend\Json to use the Json reader or writer classes)
zendframework/zend-view suggests installing zendframework/zend-authentication
   (Zend\Authentication component)
zendframework/zend-view suggests installing zendframework/zend-feed
   (Zend\Feed component)
zendframework/zend-view suggests installing zendframework/zend-filter
   (Zend\Filter component)
zendframework/zend-view suggests installing zendframework/zend-i18n
   (Zend\I18n component)
zendframework/zend-view suggests installing zendframework/zend-json
   (Zend\Json component)
zendframework/zend-view suggests installing zendframework/zend-navigation
   (Zend\Navigation component)
zendframework/zend-view suggests installing zendframework/zend-paginator
   (Zend\Paginator component)
zendframework/zend-view suggests installing zendframework/zend-permissions-acl
   (Zend\Permissions\Acl component)
zendframework/zend-servicemanager suggests installing ocramius/proxy-manager
   (ProxyManager 1.* to handle lazy initialization of services)
zendframework/zend-validator suggests installing zendframework/zend-db
   (Zend\Db component)
zendframework/zend-validator suggests installing zendframework/zend-filter
   (Zend\Filter component, required by the Digits validator)
zendframework/zend-validator suggests installing zendframework/zend-i18n
   (Zend\I18n component to allow translation of validation error messages as well as
   to use the various Date validators)
zendframework/zend-validator suggests installing zendframework/zend-i18nresources
   (Translations of validator messages)
zendframework/zend-validator suggests installing zendframework/zend-math
   (Zend\Math component)
zendframework/zend-validator suggests installing zendframework/zend-session
   (Zend\Session component)
zendframework/zend-router suggests installing zendframework/zend-i18n
   (^2.6, if defining translatable HTTP path segments)

zendframework/zend-modulemanager suggests installing zendframework/zend-console
   (Zend\Console component)
zendframework/zend-mvc suggests installing zendframework/zend-json ((^2.6.1 ||
   ^3.0) To auto-deserialize JSON body content in AbstractRestfulController
   extensions, when json_decode is unavailable)
zendframework/zend-mvc suggests installing zendframework/zend-mvc-console
   (zend-mvc-console provides the ability to expose zend-mvc as a console application)
zendframework/zend-mvc suggests installing zendframework/zend-mvc-i18n
   (zendmvc-i18n provides integration with zend-i18n, including a translation bridge
   and translatable route segments)
zendframework/zend-mvc suggests installing zendframework/zend-mvc-pluginfileprg
   (To provide Post/Redirect/Get functionality around forms that container
   file uploads)
zendframework/zend-mvc suggests installing zendframework/zend-mvc-pluginflashmessenger
   (To provide flash messaging capabilities between requests)
zendframework/zend-mvc suggests installing zendframework/zend-mvc-pluginidentity
   (To access the authenticated identity (per zend-authentication) in controllers)
zendframework/zend-mvc suggests installing zendframework/zend-mvc-plugin-prg
   (To provide Post/Redirect/Get functionality within controllers)
zendframework/zend-mvc suggests installing zendframework/zend-psr7bridge
   ((^0.2) To consume PSR-7 middleware within the MVC workflow)
zendframework/zend-mvc suggests installing zendframework/zend-servicemanager-di
   (zend-servicemanager-di provides utilities for integrating zend-di and
   zendservicemanager in your zend-mvc application)

Generating autoload files
   Removing optional packages from composer.json
   Updating composer.json
Removing zendframework/zend-skeleton-installer...
   - Removing zendframework/zend-skeleton-installer (0.1.3)
   Removed plugin zendframework/zend-skeleton-installer.
   Removing from composer.json
> zf-development-mode enable
You are now in development mode.

Now that the application is installed, you can test it out immediately using the PHP's built-in web server

$ cd path/to/install/myapp 
$ composer serve

Then you would see the following response −

> php -S -t public/ public/index.php 

This will start the PHP built-in CLI server on port 8080. Once the development server is started, you can visit the site at (http://localhost:8080/). The built-in CLI server is for development only.

CLI Server

Unit Tests

To run the skeleton unit tests, type the following command in your terminal.

$ composer require --dev zendframework/zend-test

It will produce the following response −

Using version ^3.0 for zendframework/zend-test 
   ./composer.json has been updated 
Loading composer repositories with package information 
Updating dependencies (including require-dev) 
   - Installing zendframework/zend-dom (2.6.0) 
   Loading from cache  
   - Installing zendframework/zend-console (2.6.0) 
   Loading from cache  
   - Installing sebastian/version (2.0.1) 
   Loading from cache 
   - Installing symfony/yaml (v3.2.1)
   Downloading: 100%           
   - Installing sebastian/resource-operations (1.0.0) 
   Loading from cache  
   - Installing sebastian/recursion-context (2.0.0) 
   Loading from cache  
   - Installing sebastian/object-enumerator (2.0.0) 
   Loading from cache  
   - Installing sebastian/global-state (1.1.1) 
   Loading from cache  
   - Installing sebastian/exporter (2.0.0) 
   Loading from cache  
   - Installing sebastian/environment (2.0.0) 
   Loading from cache  
   - Installing sebastian/diff (1.4.1) 
   Loading from cache  
   - Installing sebastian/comparator (1.2.2) 
   Loading from cache  
   - Installing phpunit/php-text-template (1.2.1) 
   Loading from cache  
   - Installing doctrine/instantiator (1.0.5) 
   Loading from cache  
   - Installing phpunit/phpunit-mock-objects (3.4.3) 
   Downloading: 100%          
   - Installing phpunit/php-timer (1.0.8)
   Loading from cache  
   - Installing phpunit/php-file-iterator (1.4.2) 
   Loading from cache  
   - Installing sebastian/code-unit-reverse-lookup (1.0.0) 
   Loading from cache  
   - Installing phpunit/php-token-stream (1.4.9) 
   Loading from cache  
   - Installing phpunit/php-code-coverage (4.0.4) 
   Downloading: 100%           
   - Installing webmozart/assert (1.2.0) 
   Loading from cache  
   - Installing phpdocumentor/reflection-common (1.0) 
   Loading from cache  
   - Installing phpdocumentor/type-resolver (0.2.1) 
   Loading from cache  
   - Installing phpdocumentor/reflection-docblock (3.1.1) 
   Loading from cache  
   - Installing phpspec/prophecy (v1.6.2) 
   Loading from cache  
   - Installing myclabs/deep-copy (1.5.5) 
   Loading from cache  
   - Installing phpunit/phpunit (5.7.4) 
   Downloading: 100%          
   - Installing zendframework/zend-test (3.0.2) 
   Loading from cache

zendframework/zend-console suggests installing zendframework/zend-filter 
   (To support DefaultRouteMatcher usage) 
symfony/yaml suggests installing symfony/console (For validating YAML files 
   using the lint command) 
sebastian/global-state suggests installing ext-uopz (*) 
phpunit/phpunit-mock-objects suggests installing ext-soap (*) 
phpunit/php-code-coverage suggests installing ext-xdebug (>=2.4.0) 
phpunit/phpunit suggests installing phpunit/php-invoker (~1.1) 
phpunit/phpunit suggests installing ext-xdebug (*) 
zendframework/zend-test suggests installing zendframework/zend-mvc-console 
   (^1.1.8, to test MVC <-> console integration) 
Writing lock file 
Generating autoload files

Now the testing support is enabled so you can run the test using the following command.

$ ./vendor/bin/phpunit

Apache Web Server

Hosting the Zend Framework based application in the production environment is very simple and straight-forward. Just create a VirtualHost in the Apache configuration file and point the DocumentRoot to the Public folder of the Zend Framework application.

A sample configuration (myapp) is given below −

<VirtualHost *:80> 
   ServerName myapp.localhost 
   DocumentRoot /path/to/install/myapp/public 
   <Directory /path/to/install/myapp/public> 
      DirectoryIndex index.php 
      AllowOverride All 
      Order allow,deny 
      Allow from all 
      <IfModule mod_authz_core.c> 
         Require all granted 
Kickstart Your Career

Get certified by completing the course

Get Started