Symfony e-commerce bundle for high performance online shops
Latest commit 6653bd0 Jan 21, 2017 @aimeos Fixed documentation

Aimeos logo

Aimeos Symfony bundle

Build Status Coverage Status Scrutinizer Code Quality HHVM Status

The repository contains the Symfony e-commerce bundle integrating the Aimeos e-commerce library into Symfony 2 and 3. The bundle provides controllers for e.g. faceted filter, product lists and detail views, for searching products as well as baskets and the checkout process. A full set of pages including routing is also available for a quick start.

Aimeos Symfony2 demo

Table of content


This document is for the latest Aimeos Symfony 2016.10 release and later.

  • Beta release: 2017.01
  • LTS release: 2016.10

If you want to upgrade between major versions, please have a look into the upgrade guide!

The Aimeos Symfony e-commerce bundle is a composer based library that can be installed easiest by using Composer. Before, the Aimeos bundle class must be known by the registerBundles() method in the app/AppKernel.php file so the composer post install/update scripts won't fail:

    $bundles = array(
        new Aimeos\ShopBundle\AimeosShopBundle(),

Make sure that the database is set up and it is configured in your config.yml. Then add these lines to your composer.json of your Symfony2 project:

    "prefer-stable": true,
    "minimum-stability": "dev",
    "require": {
        "aimeos/aimeos-symfony": "~2016.10",
    "scripts": {
        "post-install-cmd": [
        "post-update-cmd": [

Afterwards, install the Aimeos shop bundle using

composer update

In a production environment or if you don't want that the demo data gets installed, use the --no-dev option:

SYMFONY_ENV=prod composer update --no-dev


To see all components and get everything working, you also need to adapt your Twig base template in app/Resources/views/base.html.twig. This is a working example using the Twitter bootstrap CSS framework:

<!DOCTYPE html>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
{% block aimeos_header %}{% endblock %}
        <title>{% block title %}Aimeos shop{% endblock %}</title>
        <link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
        <link type="text/css" rel="stylesheet" href="">
{% block aimeos_styles %}{% endblock %}
        <div class="navbar navbar-static" role="navigation">
          <div class="container">
            <div class="navbar-header">
              <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
{% block aimeos_head %}{% endblock %}
        <div class="col-xs-12">
            {% block aimeos_nav %}{% endblock %}
            {% block aimeos_stage %}{% endblock %}
            {% block aimeos_body %}{% endblock %}
            {% block aimeos_aside %}{% endblock %}
        <script type="text/javascript" src=""></script>
        <script type="text/javascript" src=""></script>
{% block aimeos_scripts %}{% endblock %}

Start the PHP web server in the base directory of your application to do some quick tests:

php -S -t web

Then, you should be able to call the catalog list page in your browser using


Setting up the administration interface is a matter of configuring the Symfony firewall to restrict access to the admin URLs. A basic firewall setup in the ./app/config/security.yml file can look like this one:

                    admin: { password: secret, roles: [ 'ROLE_ADMIN' ] }
            entity: { class: AimeosShopBundle:User, property: username }
            memory: ~

        Symfony\Component\Security\Core\User\User: plaintext
            algorithm: sha1
            encode_as_base64: false
            iterations: 1

            pattern:   ^/(admin|extadm|jqadm|jsonadm)
            anonymous: ~
            provider: admin
                login_path: /admin
                check_path: /admin_check
            pattern: ^/myaccount
            provider: aimeos_customer
                realm: "MyAccount"
            anonymous: ~

        - { path: ^/(extadm|jqadm|jsonadm), roles: ROLE_ADMIN }
        - { path: ^/myaccount, roles: ROLE_USER }

Caution: The order of the configuration settings in this file is important! If you place the in_memory or main section before the Aimeos related sections, authentication will fail!

These settings will protect the /extadm (ExtJS), the /jqadm (JQuery+Bootstrap) and /jsonadm (JSON API) URLs from unauthorized access from someone without admin privileges. There's only one user/password combination defined, which is rather inflexible. As alternative, you can use on of the other Symfony user provider to authenticate against.

The /myaccount URL is protected by HTTP basic authentication in this short example. Usually, you will replace it with a form based login or use the FOS user bundle with also offers user registration. A bit more detailed explanation of the authentication is available in the Aimeos docs and it contains the setup of the FOS user bundle too.

Caution: This is only an example and contains a public password! Use a strong password for authentication in production environments!

If the PHP web server is still running (php -S -t web), you should be able to call the admin login page in your browser using:

and authenticating with the user admin and the password secret as defined in your ./app/config/security.yml file.


To simplify development, you should configure to use no content cache. You can do this in the ./app/config/config_dev.yml file of your Symfony application by adding these lines:

                name: None


The Aimeos Symfony bundle is licensed under the terms of the MIT license and is available for free.