Laminas MVC Starter kit

1.0.0 2020-07-22 12:43 UTC

This package is not auto-updated.

Last update: 2023-02-04 11:09:36 UTC



This is a skeleton application using the Laminas MVC layer and module systems. This application is meant to be used as a starting place for those looking to get their feet wet with Laminas MVC.

This is my vision of the application skeleton. Use as is

Installation using Composer

The easiest way to create a new Laminas MVC project is to use Composer. If you don't have it already installed, then please install as per the documentation.

To create your new Laminas MVC project:

$ composer create-project -sdev afinogen/laminas-mvc-starter-kit path/to/install

Once installed, you can test it out immediately using PHP's built-in web server:

$ cd path/to/install
$ php -S -t public
# OR use the composer alias:
$ composer run --timeout 0 serve

This will start the cli-server on port 8080, and bind it to all network interfaces. You can then visit the site at http://localhost:8080/

  • which will bring up Laminas MVC Skeleton welcome page.

Note: The built-in CLI server is for development only.

Development mode

The skeleton ships with laminas-development-mode by default, and provides three aliases for consuming the script it ships with:

$ composer development-enable  # enable development mode
$ composer development-disable # disable development mode
$ composer development-status  # whether or not development mode is enabled

You may provide development-only modules and bootstrap-level configuration in config/development.config.php.dist, and development-only application configuration in config/autoload/development.local.php.dist. Enabling development mode will copy these files to versions removing the .dist suffix, while disabling development mode will remove those copies.

Development mode is automatically enabled as part of the skeleton installation process. After making changes to one of the above-mentioned .dist configuration files you will either need to disable then enable development mode for the changes to take effect, or manually make matching updates to the .dist-less copies of those files.

Modules used

laminas/laminas-db - connect to DB
laminas/laminas-mvc-form - use forms
laminas/laminas-session - use session for save auth user
symfony/console - run console commands
robmorgan/phinx - db migration
vlucas/phpdotenv - use .env files
tekill/env-diff - diff .env and .env.dist files laminas/laminas-authentication - auth user
laminas/laminas-permissions-acl - user roles

Running Unit Tests

To run the supplied skeleton unit tests, you need to do one of the following:

  • During initial project creation, select to install the MVC testing support.

  • After initial project creation, install laminas-test:

    $ composer require --dev laminas/laminas-test

Once testing support is present, you can run the tests using:

$ ./vendor/bin/phpunit

If you need to make local modifications for the PHPUnit test setup, copy phpunit.xml.dist to phpunit.xml and edit the new file; the latter has precedence over the former when running tests, and is ignored by version control. (If you want to make the modifications permanent, edit the phpunit.xml.dist file.)

Using docker-compose

This skeleton provides a docker-compose.yml for use with docker-compose.

Docker-compose.yml included services:

  • nginx - is an HTTP and reverse proxy server
  • laminas - application skeleton
  • mysql - db
  • phpmyadmin - manager mysql db
  • mailhog - mail catcher

The configuration is located at folder docker/ .

Build and start the image and container using:

$ docker-compose up -d --build

At this point, you can visit http://localhost to see the site running.

You can also run commands such as composer in the container. The container environment is named "laminas" so you will pass that value to docker-compose run:

$ docker-compose run laminas composer install

Some composer packages may need additional PHP extensions. The Dockerfile contains several examples of commented out commands that add some of the more popular php extensions. For example, to install intl support uncomment the lines

# RUN apt-get install --yes libicu-dev
# RUN docker-php-ext-configure intl 
# RUN docker-php-ext-install intl

then re-run the docker-compose up -d --build line as above.

Web server setup

Apache setup

To setup apache, setup a virtual host to point to the public/ directory of the project and you should be ready to go! It should look something like below:

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

Nginx setup

To setup nginx, open your /path/to/nginx/nginx.conf and add an include directive below into http block if it does not already exist:

http {
    # ...
    include sites-enabled/*.conf;

Create a virtual host configuration file for your project under /path/to/nginx/sites-enabled/laminasapp.localhost.conf it should look something like below:

server {
    listen       80;
    server_name  laminasapp.localhost;
    root         /path/to/laminasapp/public;

    location / {
        index index.php;
        try_files $uri $uri/ @php;

    location @php {
        # Pass the PHP requests to FastCGI server (php-fpm) on
        fastcgi_param  SCRIPT_FILENAME /path/to/laminasapp/public/index.php;
        include fastcgi_params;

Restart the nginx, now you should be ready to go!

QA Tools

The skeleton does not come with any QA tooling by default, but does ship with configuration for each of:

Additionally, it comes with some basic tests for the shipped Application\Controller\IndexController.

If you want to add these QA tools, execute the following:

$ composer require --dev phpunit/phpunit squizlabs/php_codesniffer laminas/laminas-test

We provide aliases for each of these tools in the Composer configuration:

# Run CS checks:
$ composer cs-check
# Fix CS errors:
$ composer cs-fix
# Run PHPUnit tests:
$ composer test