├── Makefile ├── README.md ├── custom-fpm ├── Dockerfile ├── nginx.conf ├── start-fpm.sh └── start-nginx.sh ├── docker-compose.custom-fpm.yaml ├── docker-compose.official-apache.yaml ├── docker-compose.official-fpm.yaml ├── official-apache ├── 000-default.conf └── Dockerfile ├── official-fpm └── nginx.conf └── symfony_skeleton ├── .env.dist ├── .gitignore ├── bin └── console ├── composer.json ├── composer.lock ├── config ├── bundles.php ├── packages │ ├── dev │ │ └── routing.yaml │ ├── framework.yaml │ ├── routing.yaml │ └── test │ │ └── framework.yaml ├── routes.yaml └── services.yaml ├── public └── index.php ├── src ├── Controller │ ├── .gitignore │ └── LuckyController.php └── Kernel.php └── symfony.lock /Makefile: -------------------------------------------------------------------------------- 1 | CONCURRENCY ?= 100 2 | REPS ?= 100 3 | 4 | .PHONY: bench_all bench_official-fpm bench_official-apache bench_custom-fpm 5 | 6 | bench_all: bench_official-fpm bench_official-apache bench_custom-fpm 7 | 8 | bench_official-fpm: 9 | @docker-compose -f docker-compose.official-fpm.yaml -p php_bench_official_fpm down 10 | @docker-compose -f docker-compose.official-fpm.yaml -p php_bench_official_fpm build 11 | @docker-compose -f docker-compose.official-fpm.yaml -p php_bench_official_fpm up -d 12 | @echo "" 13 | @echo "Official php-fpm + nginx" 14 | @echo "" 15 | sleep 3; 16 | siege -b -c${CONCURRENCY} -r${REPS} http://127.0.0.1/lucky/number 17 | @docker-compose -f docker-compose.official-fpm.yaml -p php_bench_official_fpm down 18 | 19 | bench_official-apache: 20 | @docker-compose -f docker-compose.official-apache.yaml -p php_bench_official_apache down 21 | @docker-compose -f docker-compose.official-apache.yaml -p php_bench_official_apache build 22 | @docker-compose -f docker-compose.official-apache.yaml -p php_bench_official_apache up -d 23 | @echo "" 24 | @echo "Official mod_php + apache" 25 | @echo "" 26 | sleep 3; 27 | siege -b -c${CONCURRENCY} -r${REPS} http://127.0.0.1/lucky/number 28 | @docker-compose -f docker-compose.official-apache.yaml -p php_bench_official_apache down 29 | 30 | bench_custom-fpm: 31 | @docker-compose -f docker-compose.custom-fpm.yaml -p php_bench_custom_fpm down 32 | @docker-compose -f docker-compose.custom-fpm.yaml -p php_bench_custom_fpm build 33 | @docker-compose -f docker-compose.custom-fpm.yaml -p php_bench_custom_fpm up -d 34 | @echo "" 35 | @echo "Custom php-fpm + nginx" 36 | @echo "" 37 | sleep 3; 38 | siege -b -c${CONCURRENCY} -r${REPS} http://127.0.0.1/lucky/number 39 | @docker-compose -f docker-compose.custom-fpm.yaml -p php_bench_custom_fpm down 40 | 41 | install: 42 | @docker run --rm \ 43 | --volume ${CURDIR}/symfony_skeleton:/app \ 44 | composer install --ansi 45 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## PHP Docker Benchmarks 2 | 3 | See: https://www.uvd.co.uk/ 4 | 5 | To run this, you need to have installed: 6 | * docker 7 | * docker-compose 8 | * siege 9 | 10 | To install the basic Symfony skeleton app 11 | 12 | ``` 13 | make install 14 | ``` 15 | 16 | Then to run all the benchmarks with default settings 17 | ``` 18 | make bench_all 19 | ``` 20 | -------------------------------------------------------------------------------- /custom-fpm/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:xenial 2 | 3 | # Add wait-for-it 4 | ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh /bin/wait-for-it.sh 5 | RUN chmod +x /bin/wait-for-it.sh 6 | 7 | # Add S6 supervisor (for graceful stop) 8 | ADD https://github.com/just-containers/s6-overlay/releases/download/v1.21.1.1/s6-overlay-amd64.tar.gz /tmp/ 9 | RUN tar xzf /tmp/s6-overlay-amd64.tar.gz -C / 10 | ENTRYPOINT ["/init"] 11 | CMD [] 12 | 13 | # Disable frontend dialogs 14 | ENV DEBIAN_FRONTEND noninteractive 15 | ENV PHP_VERSION 7.2 16 | # Add ppa, curl and syslogd 17 | RUN apt-get update && apt-get install -y software-properties-common curl inetutils-syslogd && \ 18 | apt-add-repository ppa:nginx/stable -y && \ 19 | LC_ALL=C.UTF-8 apt-add-repository ppa:ondrej/php -y && \ 20 | apt-get update && apt-get install -y \ 21 | php${PHP_VERSION}-fpm \ 22 | php${PHP_VERSION}-curl \ 23 | php${PHP_VERSION}-cli \ 24 | php${PHP_VERSION}-intl \ 25 | php${PHP_VERSION}-json \ 26 | php${PHP_VERSION}-mysql \ 27 | php-gettext \ 28 | php${PHP_VERSION}-xml \ 29 | php${PHP_VERSION}-bcmath \ 30 | php${PHP_VERSION}-mbstring \ 31 | php-ast \ 32 | php${PHP_VERSION}-zip \ 33 | php${PHP_VERSION}-sqlite3 \ 34 | php${PHP_VERSION}-apcu \ 35 | zip \ 36 | unzip \ 37 | nginx && \ 38 | apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* && \ 39 | mkdir -p /run/php && chmod -R 755 /run/php && \ 40 | sed -i 's|.*listen =.*|listen=9000|g' /etc/php/${PHP_VERSION}/fpm/pool.d/www.conf && \ 41 | sed -i 's|.*error_log =.*|error_log=/proc/self/fd/2|g' /etc/php/${PHP_VERSION}/fpm/php-fpm.conf && \ 42 | sed -i 's|.*access.log =.*|access.log=/proc/self/fd/2|g' /etc/php/${PHP_VERSION}/fpm/pool.d/www.conf && \ 43 | sed -i 's|.*user =.*|user=root|g' /etc/php/${PHP_VERSION}/fpm/pool.d/www.conf && \ 44 | sed -i 's|.*group =.*|group=root|g' /etc/php/${PHP_VERSION}/fpm/pool.d/www.conf && \ 45 | sed -i -e "s/;catch_workers_output\s*=\s*yes/catch_workers_output = yes/g" /etc/php/${PHP_VERSION}/fpm/pool.d/www.conf && \ 46 | sed -i 's#.*variables_order.*#variables_order=EGPCS#g' /etc/php/${PHP_VERSION}/fpm/php.ini && \ 47 | sed -i 's#.*date.timezone.*#date.timezone=UTC#g' /etc/php/${PHP_VERSION}/fpm/pool.d/www.conf && \ 48 | sed -i 's#.*clear_env.*#clear_env=no#g' /etc/php/${PHP_VERSION}/fpm/pool.d/www.conf 49 | 50 | # Copy NGINX service script 51 | COPY start-nginx.sh /etc/services.d/nginx/run 52 | RUN chmod 755 /etc/services.d/nginx/run 53 | 54 | # Copy PHP-FPM service script 55 | COPY start-fpm.sh /etc/services.d/php_fpm/run 56 | RUN chmod 755 /etc/services.d/php_fpm/run 57 | -------------------------------------------------------------------------------- /custom-fpm/nginx.conf: -------------------------------------------------------------------------------- 1 | worker_processes 1; 2 | daemon off; 3 | user root; 4 | 5 | #pid logs/nginx.pid; 6 | 7 | events { 8 | worker_connections 1024; 9 | } 10 | 11 | error_log /dev/stdout info; 12 | 13 | http { 14 | include /etc/nginx/mime.types; 15 | default_type application/octet-stream; 16 | sendfile on; 17 | keepalive_timeout 65; 18 | gzip on; 19 | 20 | error_log /dev/stdout; 21 | 22 | server { 23 | listen 80; 24 | 25 | server_name _; 26 | 27 | root /var/www/public; 28 | 29 | location / { 30 | # try to serve file directly, fallback to app.php 31 | try_files $uri /index.php$is_args$args; 32 | } 33 | 34 | location ~ ^/index\.php(/|$) { 35 | fastcgi_pass 127.0.0.1:9000; 36 | fastcgi_split_path_info ^(.+\.php)(/.*)$; 37 | include /etc/nginx/fastcgi_params; 38 | 39 | fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; 40 | fastcgi_param DOCUMENT_ROOT $realpath_root; 41 | 42 | # Prevents URIs that include the front controller. This will 404: 43 | # http://domain.tld/app.php/some-path 44 | # Remove the internal directive to allow URIs like this 45 | internal; 46 | } 47 | 48 | } 49 | } -------------------------------------------------------------------------------- /custom-fpm/start-fpm.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv sh 2 | set -e; 3 | 4 | # Start PHP-FPM 5 | /usr/sbin/php-fpm${PHP_VERSION} -R --nodaemonize -------------------------------------------------------------------------------- /custom-fpm/start-nginx.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv sh 2 | set -e; 3 | 4 | /bin/wait-for-it.sh -t 120 127.0.0.1:9000 5 | 6 | /usr/sbin/nginx 7 | -------------------------------------------------------------------------------- /docker-compose.custom-fpm.yaml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | web: 6 | build: 7 | dockerfile: Dockerfile 8 | context: custom-fpm 9 | ports: 10 | - "80:80" 11 | volumes: 12 | - "./custom-fpm/nginx.conf:/etc/nginx/nginx.conf" 13 | - "./symfony_skeleton:/var/www:cached" 14 | -------------------------------------------------------------------------------- /docker-compose.official-apache.yaml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | apache: 6 | build: 7 | dockerfile: official-apache/Dockerfile 8 | context: . 9 | ports: 10 | - "80:80" 11 | volumes: 12 | - "./official-apache/000-default.conf:/etc/apache2/sites-enabled/000-default.conf" 13 | - "./symfony_skeleton:/var/www:cached" 14 | -------------------------------------------------------------------------------- /docker-compose.official-fpm.yaml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fpm: 6 | image: php:7-fpm 7 | volumes: 8 | - "./symfony_skeleton:/var/www:cached" 9 | 10 | nginx: 11 | image: nginx:stable 12 | ports: 13 | - "80:80" 14 | volumes: 15 | - "./official-fpm/nginx.conf:/etc/nginx/nginx.conf" 16 | - "./symfony_skeleton:/var/www:cached" 17 | -------------------------------------------------------------------------------- /official-apache/000-default.conf: -------------------------------------------------------------------------------- 1 | 2 | # The ServerName directive sets the request scheme, hostname and port that 3 | # the server uses to identify itself. This is used when creating 4 | # redirection URLs. In the context of virtual hosts, the ServerName 5 | # specifies what hostname must appear in the request's Host: header to 6 | # match this virtual host. For the default virtual host (this file) this 7 | # value is not decisive as it is used as a last resort host regardless. 8 | # However, you must set it for any further virtual host explicitly. 9 | #ServerName www.example.com 10 | 11 | ServerAdmin webmaster@localhost 12 | DocumentRoot /var/www/public 13 | 14 | AllowOverride None 15 | Order Allow,Deny 16 | Allow from All 17 | 18 | 19 | Options -MultiViews 20 | RewriteEngine On 21 | RewriteCond %{REQUEST_FILENAME} !-f 22 | RewriteRule ^(.*)$ index.php [QSA,L] 23 | 24 | 25 | 26 | 27 | 28 | RewriteEngine Off 29 | 30 | 31 | 32 | # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, 33 | # error, crit, alert, emerg. 34 | # It is also possible to configure the loglevel for particular 35 | # modules, e.g. 36 | #LogLevel info ssl:warn 37 | 38 | ErrorLog ${APACHE_LOG_DIR}/error.log 39 | CustomLog ${APACHE_LOG_DIR}/access.log combined 40 | 41 | # For most configuration files from conf-available/, which are 42 | # enabled or disabled at a global level, it is possible to 43 | # include a line for only one particular virtual host. For example the 44 | # following line enables the CGI configuration for this host only 45 | # after it has been globally disabled with "a2disconf". 46 | #Include conf-available/serve-cgi-bin.conf 47 | 48 | 49 | # vim: syntax=apache ts=4 sw=4 sts=4 sr noet 50 | -------------------------------------------------------------------------------- /official-apache/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:7-apache 2 | 3 | RUN a2enmod rewrite 4 | -------------------------------------------------------------------------------- /official-fpm/nginx.conf: -------------------------------------------------------------------------------- 1 | worker_processes 1; 2 | user root; 3 | 4 | #pid logs/nginx.pid; 5 | 6 | events { 7 | worker_connections 1024; 8 | } 9 | 10 | error_log /dev/stdout info; 11 | 12 | http { 13 | include /etc/nginx/mime.types; 14 | default_type application/octet-stream; 15 | sendfile on; 16 | keepalive_timeout 65; 17 | gzip on; 18 | 19 | error_log /dev/stdout; 20 | 21 | server { 22 | listen 80; 23 | 24 | server_name _; 25 | 26 | root /var/www/public; 27 | 28 | location / { 29 | # try to serve file directly, fallback to app.php 30 | try_files $uri /index.php$is_args$args; 31 | } 32 | 33 | location ~ ^/index\.php(/|$) { 34 | fastcgi_pass fpm:9000; 35 | fastcgi_split_path_info ^(.+\.php)(/.*)$; 36 | include /etc/nginx/fastcgi_params; 37 | 38 | fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; 39 | fastcgi_param DOCUMENT_ROOT $realpath_root; 40 | 41 | # Prevents URIs that include the front controller. This will 404: 42 | # http://domain.tld/app.php/some-path 43 | # Remove the internal directive to allow URIs like this 44 | internal; 45 | } 46 | 47 | } 48 | } -------------------------------------------------------------------------------- /symfony_skeleton/.env.dist: -------------------------------------------------------------------------------- 1 | # This file is a "template" of which env vars need to be defined for your application 2 | # Copy this file to .env file for development, create environment variables when deploying to production 3 | # https://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration 4 | 5 | ###> symfony/framework-bundle ### 6 | APP_ENV=dev 7 | APP_SECRET=792b042b48c1aa3d0495223e695f8233 8 | #TRUSTED_PROXIES=127.0.0.1,127.0.0.2 9 | #TRUSTED_HOSTS=localhost,example.com 10 | ###< symfony/framework-bundle ### 11 | -------------------------------------------------------------------------------- /symfony_skeleton/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | ###> symfony/framework-bundle ### 3 | .env 4 | /public/bundles/ 5 | /var/ 6 | /vendor/ 7 | ###< symfony/framework-bundle ### 8 | -------------------------------------------------------------------------------- /symfony_skeleton/bin/console: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | load(__DIR__.'/../.env'); 23 | } 24 | 25 | $input = new ArgvInput(); 26 | $env = $input->getParameterOption(['--env', '-e'], $_SERVER['APP_ENV'] ?? 'dev', true); 27 | $debug = ($_SERVER['APP_DEBUG'] ?? ('prod' !== $env)) && !$input->hasParameterOption('--no-debug', true); 28 | 29 | if ($debug) { 30 | umask(0000); 31 | 32 | if (class_exists(Debug::class)) { 33 | Debug::enable(); 34 | } 35 | } 36 | 37 | $kernel = new Kernel($env, $debug); 38 | $application = new Application($kernel); 39 | $application->run($input); 40 | -------------------------------------------------------------------------------- /symfony_skeleton/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "project", 3 | "license": "proprietary", 4 | "require": { 5 | "php": "^7.1.3", 6 | "ext-iconv": "*", 7 | "symfony/console": "^4.0", 8 | "symfony/flex": "^1.0", 9 | "symfony/framework-bundle": "^4.0", 10 | "symfony/lts": "^4@dev", 11 | "symfony/yaml": "^4.0" 12 | }, 13 | "require-dev": { 14 | "symfony/dotenv": "^4.0" 15 | }, 16 | "config": { 17 | "preferred-install": { 18 | "*": "dist" 19 | }, 20 | "sort-packages": true 21 | }, 22 | "autoload": { 23 | "psr-4": { 24 | "App\\": "src/" 25 | } 26 | }, 27 | "autoload-dev": { 28 | "psr-4": { 29 | "App\\Tests\\": "tests/" 30 | } 31 | }, 32 | "replace": { 33 | "symfony/polyfill-iconv": "*", 34 | "symfony/polyfill-php71": "*", 35 | "symfony/polyfill-php70": "*", 36 | "symfony/polyfill-php56": "*" 37 | }, 38 | "scripts": { 39 | "auto-scripts": { 40 | "cache:clear": "symfony-cmd", 41 | "assets:install --symlink --relative %PUBLIC_DIR%": "symfony-cmd" 42 | }, 43 | "post-install-cmd": [ 44 | "@auto-scripts" 45 | ], 46 | "post-update-cmd": [ 47 | "@auto-scripts" 48 | ] 49 | }, 50 | "conflict": { 51 | "symfony/symfony": "*" 52 | }, 53 | "extra": { 54 | "symfony": { 55 | "id": "01C7TY5HEJ33WC9NA1MN5DT15G", 56 | "allow-contrib": false 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /symfony_skeleton/composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "31c264298a409fd3387f44c33ed800df", 8 | "packages": [ 9 | { 10 | "name": "psr/cache", 11 | "version": "1.0.1", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/php-fig/cache.git", 15 | "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", 20 | "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": ">=5.3.0" 25 | }, 26 | "type": "library", 27 | "extra": { 28 | "branch-alias": { 29 | "dev-master": "1.0.x-dev" 30 | } 31 | }, 32 | "autoload": { 33 | "psr-4": { 34 | "Psr\\Cache\\": "src/" 35 | } 36 | }, 37 | "notification-url": "https://packagist.org/downloads/", 38 | "license": [ 39 | "MIT" 40 | ], 41 | "authors": [ 42 | { 43 | "name": "PHP-FIG", 44 | "homepage": "http://www.php-fig.org/" 45 | } 46 | ], 47 | "description": "Common interface for caching libraries", 48 | "keywords": [ 49 | "cache", 50 | "psr", 51 | "psr-6" 52 | ], 53 | "time": "2016-08-06T20:24:11+00:00" 54 | }, 55 | { 56 | "name": "psr/container", 57 | "version": "1.0.0", 58 | "source": { 59 | "type": "git", 60 | "url": "https://github.com/php-fig/container.git", 61 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" 62 | }, 63 | "dist": { 64 | "type": "zip", 65 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 66 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 67 | "shasum": "" 68 | }, 69 | "require": { 70 | "php": ">=5.3.0" 71 | }, 72 | "type": "library", 73 | "extra": { 74 | "branch-alias": { 75 | "dev-master": "1.0.x-dev" 76 | } 77 | }, 78 | "autoload": { 79 | "psr-4": { 80 | "Psr\\Container\\": "src/" 81 | } 82 | }, 83 | "notification-url": "https://packagist.org/downloads/", 84 | "license": [ 85 | "MIT" 86 | ], 87 | "authors": [ 88 | { 89 | "name": "PHP-FIG", 90 | "homepage": "http://www.php-fig.org/" 91 | } 92 | ], 93 | "description": "Common Container Interface (PHP FIG PSR-11)", 94 | "homepage": "https://github.com/php-fig/container", 95 | "keywords": [ 96 | "PSR-11", 97 | "container", 98 | "container-interface", 99 | "container-interop", 100 | "psr" 101 | ], 102 | "time": "2017-02-14T16:28:37+00:00" 103 | }, 104 | { 105 | "name": "psr/log", 106 | "version": "1.0.2", 107 | "source": { 108 | "type": "git", 109 | "url": "https://github.com/php-fig/log.git", 110 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" 111 | }, 112 | "dist": { 113 | "type": "zip", 114 | "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 115 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 116 | "shasum": "" 117 | }, 118 | "require": { 119 | "php": ">=5.3.0" 120 | }, 121 | "type": "library", 122 | "extra": { 123 | "branch-alias": { 124 | "dev-master": "1.0.x-dev" 125 | } 126 | }, 127 | "autoload": { 128 | "psr-4": { 129 | "Psr\\Log\\": "Psr/Log/" 130 | } 131 | }, 132 | "notification-url": "https://packagist.org/downloads/", 133 | "license": [ 134 | "MIT" 135 | ], 136 | "authors": [ 137 | { 138 | "name": "PHP-FIG", 139 | "homepage": "http://www.php-fig.org/" 140 | } 141 | ], 142 | "description": "Common interface for logging libraries", 143 | "homepage": "https://github.com/php-fig/log", 144 | "keywords": [ 145 | "log", 146 | "psr", 147 | "psr-3" 148 | ], 149 | "time": "2016-10-10T12:19:37+00:00" 150 | }, 151 | { 152 | "name": "psr/simple-cache", 153 | "version": "1.0.1", 154 | "source": { 155 | "type": "git", 156 | "url": "https://github.com/php-fig/simple-cache.git", 157 | "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" 158 | }, 159 | "dist": { 160 | "type": "zip", 161 | "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", 162 | "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", 163 | "shasum": "" 164 | }, 165 | "require": { 166 | "php": ">=5.3.0" 167 | }, 168 | "type": "library", 169 | "extra": { 170 | "branch-alias": { 171 | "dev-master": "1.0.x-dev" 172 | } 173 | }, 174 | "autoload": { 175 | "psr-4": { 176 | "Psr\\SimpleCache\\": "src/" 177 | } 178 | }, 179 | "notification-url": "https://packagist.org/downloads/", 180 | "license": [ 181 | "MIT" 182 | ], 183 | "authors": [ 184 | { 185 | "name": "PHP-FIG", 186 | "homepage": "http://www.php-fig.org/" 187 | } 188 | ], 189 | "description": "Common interfaces for simple caching", 190 | "keywords": [ 191 | "cache", 192 | "caching", 193 | "psr", 194 | "psr-16", 195 | "simple-cache" 196 | ], 197 | "time": "2017-10-23T01:57:42+00:00" 198 | }, 199 | { 200 | "name": "symfony/cache", 201 | "version": "v4.0.5", 202 | "source": { 203 | "type": "git", 204 | "url": "https://github.com/symfony/cache.git", 205 | "reference": "fcffcf7f26d232b64329f37182defe253caa06b0" 206 | }, 207 | "dist": { 208 | "type": "zip", 209 | "url": "https://api.github.com/repos/symfony/cache/zipball/fcffcf7f26d232b64329f37182defe253caa06b0", 210 | "reference": "fcffcf7f26d232b64329f37182defe253caa06b0", 211 | "shasum": "" 212 | }, 213 | "require": { 214 | "php": "^7.1.3", 215 | "psr/cache": "~1.0", 216 | "psr/log": "~1.0", 217 | "psr/simple-cache": "^1.0" 218 | }, 219 | "conflict": { 220 | "symfony/var-dumper": "<3.4" 221 | }, 222 | "provide": { 223 | "psr/cache-implementation": "1.0", 224 | "psr/simple-cache-implementation": "1.0" 225 | }, 226 | "require-dev": { 227 | "cache/integration-tests": "dev-master", 228 | "doctrine/cache": "~1.6", 229 | "doctrine/dbal": "~2.4", 230 | "predis/predis": "~1.0" 231 | }, 232 | "type": "library", 233 | "extra": { 234 | "branch-alias": { 235 | "dev-master": "4.0-dev" 236 | } 237 | }, 238 | "autoload": { 239 | "psr-4": { 240 | "Symfony\\Component\\Cache\\": "" 241 | }, 242 | "exclude-from-classmap": [ 243 | "/Tests/" 244 | ] 245 | }, 246 | "notification-url": "https://packagist.org/downloads/", 247 | "license": [ 248 | "MIT" 249 | ], 250 | "authors": [ 251 | { 252 | "name": "Nicolas Grekas", 253 | "email": "p@tchwork.com" 254 | }, 255 | { 256 | "name": "Symfony Community", 257 | "homepage": "https://symfony.com/contributors" 258 | } 259 | ], 260 | "description": "Symfony Cache component with PSR-6, PSR-16, and tags", 261 | "homepage": "https://symfony.com", 262 | "keywords": [ 263 | "caching", 264 | "psr6" 265 | ], 266 | "time": "2018-02-11T17:17:44+00:00" 267 | }, 268 | { 269 | "name": "symfony/config", 270 | "version": "v4.0.5", 271 | "source": { 272 | "type": "git", 273 | "url": "https://github.com/symfony/config.git", 274 | "reference": "289eadd3771f7682ea2540e4925861c18ec5b4d0" 275 | }, 276 | "dist": { 277 | "type": "zip", 278 | "url": "https://api.github.com/repos/symfony/config/zipball/289eadd3771f7682ea2540e4925861c18ec5b4d0", 279 | "reference": "289eadd3771f7682ea2540e4925861c18ec5b4d0", 280 | "shasum": "" 281 | }, 282 | "require": { 283 | "php": "^7.1.3", 284 | "symfony/filesystem": "~3.4|~4.0" 285 | }, 286 | "conflict": { 287 | "symfony/finder": "<3.4" 288 | }, 289 | "require-dev": { 290 | "symfony/dependency-injection": "~3.4|~4.0", 291 | "symfony/event-dispatcher": "~3.4|~4.0", 292 | "symfony/finder": "~3.4|~4.0", 293 | "symfony/yaml": "~3.4|~4.0" 294 | }, 295 | "suggest": { 296 | "symfony/yaml": "To use the yaml reference dumper" 297 | }, 298 | "type": "library", 299 | "extra": { 300 | "branch-alias": { 301 | "dev-master": "4.0-dev" 302 | } 303 | }, 304 | "autoload": { 305 | "psr-4": { 306 | "Symfony\\Component\\Config\\": "" 307 | }, 308 | "exclude-from-classmap": [ 309 | "/Tests/" 310 | ] 311 | }, 312 | "notification-url": "https://packagist.org/downloads/", 313 | "license": [ 314 | "MIT" 315 | ], 316 | "authors": [ 317 | { 318 | "name": "Fabien Potencier", 319 | "email": "fabien@symfony.com" 320 | }, 321 | { 322 | "name": "Symfony Community", 323 | "homepage": "https://symfony.com/contributors" 324 | } 325 | ], 326 | "description": "Symfony Config Component", 327 | "homepage": "https://symfony.com", 328 | "time": "2018-02-04T16:43:51+00:00" 329 | }, 330 | { 331 | "name": "symfony/console", 332 | "version": "v4.0.5", 333 | "source": { 334 | "type": "git", 335 | "url": "https://github.com/symfony/console.git", 336 | "reference": "555c8dbe0ae9e561740451eabdbed2cc554b6a51" 337 | }, 338 | "dist": { 339 | "type": "zip", 340 | "url": "https://api.github.com/repos/symfony/console/zipball/555c8dbe0ae9e561740451eabdbed2cc554b6a51", 341 | "reference": "555c8dbe0ae9e561740451eabdbed2cc554b6a51", 342 | "shasum": "" 343 | }, 344 | "require": { 345 | "php": "^7.1.3", 346 | "symfony/polyfill-mbstring": "~1.0" 347 | }, 348 | "conflict": { 349 | "symfony/dependency-injection": "<3.4", 350 | "symfony/process": "<3.3" 351 | }, 352 | "require-dev": { 353 | "psr/log": "~1.0", 354 | "symfony/config": "~3.4|~4.0", 355 | "symfony/dependency-injection": "~3.4|~4.0", 356 | "symfony/event-dispatcher": "~3.4|~4.0", 357 | "symfony/lock": "~3.4|~4.0", 358 | "symfony/process": "~3.4|~4.0" 359 | }, 360 | "suggest": { 361 | "psr/log": "For using the console logger", 362 | "symfony/event-dispatcher": "", 363 | "symfony/lock": "", 364 | "symfony/process": "" 365 | }, 366 | "type": "library", 367 | "extra": { 368 | "branch-alias": { 369 | "dev-master": "4.0-dev" 370 | } 371 | }, 372 | "autoload": { 373 | "psr-4": { 374 | "Symfony\\Component\\Console\\": "" 375 | }, 376 | "exclude-from-classmap": [ 377 | "/Tests/" 378 | ] 379 | }, 380 | "notification-url": "https://packagist.org/downloads/", 381 | "license": [ 382 | "MIT" 383 | ], 384 | "authors": [ 385 | { 386 | "name": "Fabien Potencier", 387 | "email": "fabien@symfony.com" 388 | }, 389 | { 390 | "name": "Symfony Community", 391 | "homepage": "https://symfony.com/contributors" 392 | } 393 | ], 394 | "description": "Symfony Console Component", 395 | "homepage": "https://symfony.com", 396 | "time": "2018-02-26T15:55:47+00:00" 397 | }, 398 | { 399 | "name": "symfony/debug", 400 | "version": "v4.0.5", 401 | "source": { 402 | "type": "git", 403 | "url": "https://github.com/symfony/debug.git", 404 | "reference": "1721e4e7effb23480966690cdcdc7d2a4152d489" 405 | }, 406 | "dist": { 407 | "type": "zip", 408 | "url": "https://api.github.com/repos/symfony/debug/zipball/1721e4e7effb23480966690cdcdc7d2a4152d489", 409 | "reference": "1721e4e7effb23480966690cdcdc7d2a4152d489", 410 | "shasum": "" 411 | }, 412 | "require": { 413 | "php": "^7.1.3", 414 | "psr/log": "~1.0" 415 | }, 416 | "conflict": { 417 | "symfony/http-kernel": "<3.4" 418 | }, 419 | "require-dev": { 420 | "symfony/http-kernel": "~3.4|~4.0" 421 | }, 422 | "type": "library", 423 | "extra": { 424 | "branch-alias": { 425 | "dev-master": "4.0-dev" 426 | } 427 | }, 428 | "autoload": { 429 | "psr-4": { 430 | "Symfony\\Component\\Debug\\": "" 431 | }, 432 | "exclude-from-classmap": [ 433 | "/Tests/" 434 | ] 435 | }, 436 | "notification-url": "https://packagist.org/downloads/", 437 | "license": [ 438 | "MIT" 439 | ], 440 | "authors": [ 441 | { 442 | "name": "Fabien Potencier", 443 | "email": "fabien@symfony.com" 444 | }, 445 | { 446 | "name": "Symfony Community", 447 | "homepage": "https://symfony.com/contributors" 448 | } 449 | ], 450 | "description": "Symfony Debug Component", 451 | "homepage": "https://symfony.com", 452 | "time": "2018-02-28T21:50:02+00:00" 453 | }, 454 | { 455 | "name": "symfony/dependency-injection", 456 | "version": "v4.0.5", 457 | "source": { 458 | "type": "git", 459 | "url": "https://github.com/symfony/dependency-injection.git", 460 | "reference": "2fca7961d10cf33fa528ce633e992942ef1bccd8" 461 | }, 462 | "dist": { 463 | "type": "zip", 464 | "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/2fca7961d10cf33fa528ce633e992942ef1bccd8", 465 | "reference": "2fca7961d10cf33fa528ce633e992942ef1bccd8", 466 | "shasum": "" 467 | }, 468 | "require": { 469 | "php": "^7.1.3", 470 | "psr/container": "^1.0" 471 | }, 472 | "conflict": { 473 | "symfony/config": "<3.4", 474 | "symfony/finder": "<3.4", 475 | "symfony/proxy-manager-bridge": "<3.4", 476 | "symfony/yaml": "<3.4" 477 | }, 478 | "provide": { 479 | "psr/container-implementation": "1.0" 480 | }, 481 | "require-dev": { 482 | "symfony/config": "~3.4|~4.0", 483 | "symfony/expression-language": "~3.4|~4.0", 484 | "symfony/yaml": "~3.4|~4.0" 485 | }, 486 | "suggest": { 487 | "symfony/config": "", 488 | "symfony/expression-language": "For using expressions in service container configuration", 489 | "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", 490 | "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", 491 | "symfony/yaml": "" 492 | }, 493 | "type": "library", 494 | "extra": { 495 | "branch-alias": { 496 | "dev-master": "4.0-dev" 497 | } 498 | }, 499 | "autoload": { 500 | "psr-4": { 501 | "Symfony\\Component\\DependencyInjection\\": "" 502 | }, 503 | "exclude-from-classmap": [ 504 | "/Tests/" 505 | ] 506 | }, 507 | "notification-url": "https://packagist.org/downloads/", 508 | "license": [ 509 | "MIT" 510 | ], 511 | "authors": [ 512 | { 513 | "name": "Fabien Potencier", 514 | "email": "fabien@symfony.com" 515 | }, 516 | { 517 | "name": "Symfony Community", 518 | "homepage": "https://symfony.com/contributors" 519 | } 520 | ], 521 | "description": "Symfony DependencyInjection Component", 522 | "homepage": "https://symfony.com", 523 | "time": "2018-02-26T15:55:47+00:00" 524 | }, 525 | { 526 | "name": "symfony/event-dispatcher", 527 | "version": "v4.0.5", 528 | "source": { 529 | "type": "git", 530 | "url": "https://github.com/symfony/event-dispatcher.git", 531 | "reference": "85eaf6a8ec915487abac52e133efc4a268204428" 532 | }, 533 | "dist": { 534 | "type": "zip", 535 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/85eaf6a8ec915487abac52e133efc4a268204428", 536 | "reference": "85eaf6a8ec915487abac52e133efc4a268204428", 537 | "shasum": "" 538 | }, 539 | "require": { 540 | "php": "^7.1.3" 541 | }, 542 | "conflict": { 543 | "symfony/dependency-injection": "<3.4" 544 | }, 545 | "require-dev": { 546 | "psr/log": "~1.0", 547 | "symfony/config": "~3.4|~4.0", 548 | "symfony/dependency-injection": "~3.4|~4.0", 549 | "symfony/expression-language": "~3.4|~4.0", 550 | "symfony/stopwatch": "~3.4|~4.0" 551 | }, 552 | "suggest": { 553 | "symfony/dependency-injection": "", 554 | "symfony/http-kernel": "" 555 | }, 556 | "type": "library", 557 | "extra": { 558 | "branch-alias": { 559 | "dev-master": "4.0-dev" 560 | } 561 | }, 562 | "autoload": { 563 | "psr-4": { 564 | "Symfony\\Component\\EventDispatcher\\": "" 565 | }, 566 | "exclude-from-classmap": [ 567 | "/Tests/" 568 | ] 569 | }, 570 | "notification-url": "https://packagist.org/downloads/", 571 | "license": [ 572 | "MIT" 573 | ], 574 | "authors": [ 575 | { 576 | "name": "Fabien Potencier", 577 | "email": "fabien@symfony.com" 578 | }, 579 | { 580 | "name": "Symfony Community", 581 | "homepage": "https://symfony.com/contributors" 582 | } 583 | ], 584 | "description": "Symfony EventDispatcher Component", 585 | "homepage": "https://symfony.com", 586 | "time": "2018-02-14T14:11:10+00:00" 587 | }, 588 | { 589 | "name": "symfony/filesystem", 590 | "version": "v4.0.5", 591 | "source": { 592 | "type": "git", 593 | "url": "https://github.com/symfony/filesystem.git", 594 | "reference": "5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21" 595 | }, 596 | "dist": { 597 | "type": "zip", 598 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21", 599 | "reference": "5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21", 600 | "shasum": "" 601 | }, 602 | "require": { 603 | "php": "^7.1.3" 604 | }, 605 | "type": "library", 606 | "extra": { 607 | "branch-alias": { 608 | "dev-master": "4.0-dev" 609 | } 610 | }, 611 | "autoload": { 612 | "psr-4": { 613 | "Symfony\\Component\\Filesystem\\": "" 614 | }, 615 | "exclude-from-classmap": [ 616 | "/Tests/" 617 | ] 618 | }, 619 | "notification-url": "https://packagist.org/downloads/", 620 | "license": [ 621 | "MIT" 622 | ], 623 | "authors": [ 624 | { 625 | "name": "Fabien Potencier", 626 | "email": "fabien@symfony.com" 627 | }, 628 | { 629 | "name": "Symfony Community", 630 | "homepage": "https://symfony.com/contributors" 631 | } 632 | ], 633 | "description": "Symfony Filesystem Component", 634 | "homepage": "https://symfony.com", 635 | "time": "2018-02-22T10:50:29+00:00" 636 | }, 637 | { 638 | "name": "symfony/finder", 639 | "version": "v4.0.5", 640 | "source": { 641 | "type": "git", 642 | "url": "https://github.com/symfony/finder.git", 643 | "reference": "552e244df10237f845a94fd64b194f848805e34b" 644 | }, 645 | "dist": { 646 | "type": "zip", 647 | "url": "https://api.github.com/repos/symfony/finder/zipball/552e244df10237f845a94fd64b194f848805e34b", 648 | "reference": "552e244df10237f845a94fd64b194f848805e34b", 649 | "shasum": "" 650 | }, 651 | "require": { 652 | "php": "^7.1.3" 653 | }, 654 | "type": "library", 655 | "extra": { 656 | "branch-alias": { 657 | "dev-master": "4.0-dev" 658 | } 659 | }, 660 | "autoload": { 661 | "psr-4": { 662 | "Symfony\\Component\\Finder\\": "" 663 | }, 664 | "exclude-from-classmap": [ 665 | "/Tests/" 666 | ] 667 | }, 668 | "notification-url": "https://packagist.org/downloads/", 669 | "license": [ 670 | "MIT" 671 | ], 672 | "authors": [ 673 | { 674 | "name": "Fabien Potencier", 675 | "email": "fabien@symfony.com" 676 | }, 677 | { 678 | "name": "Symfony Community", 679 | "homepage": "https://symfony.com/contributors" 680 | } 681 | ], 682 | "description": "Symfony Finder Component", 683 | "homepage": "https://symfony.com", 684 | "time": "2018-02-11T17:17:44+00:00" 685 | }, 686 | { 687 | "name": "symfony/flex", 688 | "version": "v1.0.70", 689 | "source": { 690 | "type": "git", 691 | "url": "https://github.com/symfony/flex.git", 692 | "reference": "1f00c05d35523dc0ac52e4a457989a069be5a7a4" 693 | }, 694 | "dist": { 695 | "type": "zip", 696 | "url": "https://api.github.com/repos/symfony/flex/zipball/1f00c05d35523dc0ac52e4a457989a069be5a7a4", 697 | "reference": "1f00c05d35523dc0ac52e4a457989a069be5a7a4", 698 | "shasum": "" 699 | }, 700 | "require": { 701 | "composer-plugin-api": "^1.0", 702 | "php": "^7.0" 703 | }, 704 | "require-dev": { 705 | "composer/composer": "^1.0.2", 706 | "symfony/phpunit-bridge": "^3.2.8" 707 | }, 708 | "type": "composer-plugin", 709 | "extra": { 710 | "branch-alias": { 711 | "dev-master": "1.0-dev" 712 | }, 713 | "class": "Symfony\\Flex\\Flex" 714 | }, 715 | "autoload": { 716 | "psr-4": { 717 | "Symfony\\Flex\\": "src" 718 | } 719 | }, 720 | "notification-url": "https://packagist.org/downloads/", 721 | "license": [ 722 | "MIT" 723 | ], 724 | "authors": [ 725 | { 726 | "name": "Fabien Potencier", 727 | "email": "fabien.potencier@gmail.com" 728 | } 729 | ], 730 | "time": "2018-02-22T07:00:47+00:00" 731 | }, 732 | { 733 | "name": "symfony/framework-bundle", 734 | "version": "v4.0.5", 735 | "source": { 736 | "type": "git", 737 | "url": "https://github.com/symfony/framework-bundle.git", 738 | "reference": "1221c54863061e71573b07882b4c53795fbfc229" 739 | }, 740 | "dist": { 741 | "type": "zip", 742 | "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/1221c54863061e71573b07882b4c53795fbfc229", 743 | "reference": "1221c54863061e71573b07882b4c53795fbfc229", 744 | "shasum": "" 745 | }, 746 | "require": { 747 | "ext-xml": "*", 748 | "php": "^7.1.3", 749 | "symfony/cache": "~3.4|~4.0", 750 | "symfony/config": "~3.4|~4.0", 751 | "symfony/dependency-injection": "^3.4.3|^4.0.3", 752 | "symfony/event-dispatcher": "~3.4|~4.0", 753 | "symfony/filesystem": "~3.4|~4.0", 754 | "symfony/finder": "~3.4|~4.0", 755 | "symfony/http-foundation": "~3.4|~4.0", 756 | "symfony/http-kernel": "~3.4|~4.0", 757 | "symfony/polyfill-mbstring": "~1.0", 758 | "symfony/routing": "^3.4.5|^4.0.5" 759 | }, 760 | "conflict": { 761 | "phpdocumentor/reflection-docblock": "<3.0", 762 | "phpdocumentor/type-resolver": "<0.2.1", 763 | "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", 764 | "symfony/asset": "<3.4", 765 | "symfony/console": "<3.4", 766 | "symfony/form": "<3.4", 767 | "symfony/property-info": "<3.4", 768 | "symfony/serializer": "<3.4", 769 | "symfony/stopwatch": "<3.4", 770 | "symfony/translation": "<3.4", 771 | "symfony/validator": "<3.4", 772 | "symfony/workflow": "<3.4" 773 | }, 774 | "require-dev": { 775 | "doctrine/annotations": "~1.0", 776 | "doctrine/cache": "~1.0", 777 | "fig/link-util": "^1.0", 778 | "phpdocumentor/reflection-docblock": "^3.0|^4.0", 779 | "symfony/asset": "~3.4|~4.0", 780 | "symfony/browser-kit": "~3.4|~4.0", 781 | "symfony/console": "~3.4|~4.0", 782 | "symfony/css-selector": "~3.4|~4.0", 783 | "symfony/dom-crawler": "~3.4|~4.0", 784 | "symfony/expression-language": "~3.4|~4.0", 785 | "symfony/form": "~3.4|~4.0", 786 | "symfony/lock": "~3.4|~4.0", 787 | "symfony/polyfill-intl-icu": "~1.0", 788 | "symfony/process": "~3.4|~4.0", 789 | "symfony/property-info": "~3.4|~4.0", 790 | "symfony/security": "~3.4|~4.0", 791 | "symfony/security-core": "~3.4|~4.0", 792 | "symfony/security-csrf": "~3.4|~4.0", 793 | "symfony/serializer": "~3.4|~4.0", 794 | "symfony/stopwatch": "~3.4|~4.0", 795 | "symfony/templating": "~3.4|~4.0", 796 | "symfony/translation": "~3.4|~4.0", 797 | "symfony/validator": "~3.4|~4.0", 798 | "symfony/var-dumper": "~3.4|~4.0", 799 | "symfony/web-link": "~3.4|~4.0", 800 | "symfony/workflow": "~3.4|~4.0", 801 | "symfony/yaml": "~3.4|~4.0", 802 | "twig/twig": "~1.34|~2.4" 803 | }, 804 | "suggest": { 805 | "ext-apcu": "For best performance of the system caches", 806 | "symfony/console": "For using the console commands", 807 | "symfony/form": "For using forms", 808 | "symfony/property-info": "For using the property_info service", 809 | "symfony/serializer": "For using the serializer service", 810 | "symfony/validator": "For using validation", 811 | "symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering", 812 | "symfony/yaml": "For using the debug:config and lint:yaml commands" 813 | }, 814 | "type": "symfony-bundle", 815 | "extra": { 816 | "branch-alias": { 817 | "dev-master": "4.0-dev" 818 | } 819 | }, 820 | "autoload": { 821 | "psr-4": { 822 | "Symfony\\Bundle\\FrameworkBundle\\": "" 823 | }, 824 | "exclude-from-classmap": [ 825 | "/Tests/" 826 | ] 827 | }, 828 | "notification-url": "https://packagist.org/downloads/", 829 | "license": [ 830 | "MIT" 831 | ], 832 | "authors": [ 833 | { 834 | "name": "Fabien Potencier", 835 | "email": "fabien@symfony.com" 836 | }, 837 | { 838 | "name": "Symfony Community", 839 | "homepage": "https://symfony.com/contributors" 840 | } 841 | ], 842 | "description": "Symfony FrameworkBundle", 843 | "homepage": "https://symfony.com", 844 | "time": "2018-02-28T21:50:02+00:00" 845 | }, 846 | { 847 | "name": "symfony/http-foundation", 848 | "version": "v4.0.5", 849 | "source": { 850 | "type": "git", 851 | "url": "https://github.com/symfony/http-foundation.git", 852 | "reference": "94139989e51193e62a46bc87741ae05c8e8390f5" 853 | }, 854 | "dist": { 855 | "type": "zip", 856 | "url": "https://api.github.com/repos/symfony/http-foundation/zipball/94139989e51193e62a46bc87741ae05c8e8390f5", 857 | "reference": "94139989e51193e62a46bc87741ae05c8e8390f5", 858 | "shasum": "" 859 | }, 860 | "require": { 861 | "php": "^7.1.3", 862 | "symfony/polyfill-mbstring": "~1.1" 863 | }, 864 | "require-dev": { 865 | "symfony/expression-language": "~3.4|~4.0" 866 | }, 867 | "type": "library", 868 | "extra": { 869 | "branch-alias": { 870 | "dev-master": "4.0-dev" 871 | } 872 | }, 873 | "autoload": { 874 | "psr-4": { 875 | "Symfony\\Component\\HttpFoundation\\": "" 876 | }, 877 | "exclude-from-classmap": [ 878 | "/Tests/" 879 | ] 880 | }, 881 | "notification-url": "https://packagist.org/downloads/", 882 | "license": [ 883 | "MIT" 884 | ], 885 | "authors": [ 886 | { 887 | "name": "Fabien Potencier", 888 | "email": "fabien@symfony.com" 889 | }, 890 | { 891 | "name": "Symfony Community", 892 | "homepage": "https://symfony.com/contributors" 893 | } 894 | ], 895 | "description": "Symfony HttpFoundation Component", 896 | "homepage": "https://symfony.com", 897 | "time": "2018-02-22T10:50:29+00:00" 898 | }, 899 | { 900 | "name": "symfony/http-kernel", 901 | "version": "v4.0.5", 902 | "source": { 903 | "type": "git", 904 | "url": "https://github.com/symfony/http-kernel.git", 905 | "reference": "77cf672c855f038b1b916201d00b1d55899ee8e7" 906 | }, 907 | "dist": { 908 | "type": "zip", 909 | "url": "https://api.github.com/repos/symfony/http-kernel/zipball/77cf672c855f038b1b916201d00b1d55899ee8e7", 910 | "reference": "77cf672c855f038b1b916201d00b1d55899ee8e7", 911 | "shasum": "" 912 | }, 913 | "require": { 914 | "php": "^7.1.3", 915 | "psr/log": "~1.0", 916 | "symfony/debug": "~3.4|~4.0", 917 | "symfony/event-dispatcher": "~3.4|~4.0", 918 | "symfony/http-foundation": "~3.4.4|~4.0.4" 919 | }, 920 | "conflict": { 921 | "symfony/config": "<3.4", 922 | "symfony/dependency-injection": "<3.4.5|<4.0.5,>=4", 923 | "symfony/var-dumper": "<3.4", 924 | "twig/twig": "<1.34|<2.4,>=2" 925 | }, 926 | "provide": { 927 | "psr/log-implementation": "1.0" 928 | }, 929 | "require-dev": { 930 | "psr/cache": "~1.0", 931 | "symfony/browser-kit": "~3.4|~4.0", 932 | "symfony/config": "~3.4|~4.0", 933 | "symfony/console": "~3.4|~4.0", 934 | "symfony/css-selector": "~3.4|~4.0", 935 | "symfony/dependency-injection": "^3.4.5|^4.0.5", 936 | "symfony/dom-crawler": "~3.4|~4.0", 937 | "symfony/expression-language": "~3.4|~4.0", 938 | "symfony/finder": "~3.4|~4.0", 939 | "symfony/process": "~3.4|~4.0", 940 | "symfony/routing": "~3.4|~4.0", 941 | "symfony/stopwatch": "~3.4|~4.0", 942 | "symfony/templating": "~3.4|~4.0", 943 | "symfony/translation": "~3.4|~4.0", 944 | "symfony/var-dumper": "~3.4|~4.0" 945 | }, 946 | "suggest": { 947 | "symfony/browser-kit": "", 948 | "symfony/config": "", 949 | "symfony/console": "", 950 | "symfony/dependency-injection": "", 951 | "symfony/var-dumper": "" 952 | }, 953 | "type": "library", 954 | "extra": { 955 | "branch-alias": { 956 | "dev-master": "4.0-dev" 957 | } 958 | }, 959 | "autoload": { 960 | "psr-4": { 961 | "Symfony\\Component\\HttpKernel\\": "" 962 | }, 963 | "exclude-from-classmap": [ 964 | "/Tests/" 965 | ] 966 | }, 967 | "notification-url": "https://packagist.org/downloads/", 968 | "license": [ 969 | "MIT" 970 | ], 971 | "authors": [ 972 | { 973 | "name": "Fabien Potencier", 974 | "email": "fabien@symfony.com" 975 | }, 976 | { 977 | "name": "Symfony Community", 978 | "homepage": "https://symfony.com/contributors" 979 | } 980 | ], 981 | "description": "Symfony HttpKernel Component", 982 | "homepage": "https://symfony.com", 983 | "time": "2018-03-01T19:48:35+00:00" 984 | }, 985 | { 986 | "name": "symfony/lts", 987 | "version": "dev-master", 988 | "source": { 989 | "type": "git", 990 | "url": "https://github.com/symfony/lts.git", 991 | "reference": "396c5fca8d73d01186df37d7031321a3c0c2bf92" 992 | }, 993 | "dist": { 994 | "type": "zip", 995 | "url": "https://api.github.com/repos/symfony/lts/zipball/396c5fca8d73d01186df37d7031321a3c0c2bf92", 996 | "reference": "396c5fca8d73d01186df37d7031321a3c0c2bf92", 997 | "shasum": "" 998 | }, 999 | "conflict": { 1000 | "symfony/asset": ">=5", 1001 | "symfony/browser-kit": ">=5", 1002 | "symfony/cache": ">=5", 1003 | "symfony/class-loader": ">=5", 1004 | "symfony/config": ">=5", 1005 | "symfony/console": ">=5", 1006 | "symfony/css-selector": ">=5", 1007 | "symfony/debug": ">=5", 1008 | "symfony/debug-bundle": ">=5", 1009 | "symfony/dependency-injection": ">=5", 1010 | "symfony/doctrine-bridge": ">=5", 1011 | "symfony/dom-crawler": ">=5", 1012 | "symfony/dotenv": ">=5", 1013 | "symfony/event-dispatcher": ">=5", 1014 | "symfony/expression-language": ">=5", 1015 | "symfony/filesystem": ">=5", 1016 | "symfony/finder": ">=5", 1017 | "symfony/form": ">=5", 1018 | "symfony/framework-bundle": ">=5", 1019 | "symfony/http-foundation": ">=5", 1020 | "symfony/http-kernel": ">=5", 1021 | "symfony/inflector": ">=5", 1022 | "symfony/intl": ">=5", 1023 | "symfony/ldap": ">=5", 1024 | "symfony/lock": ">=5", 1025 | "symfony/monolog-bridge": ">=5", 1026 | "symfony/options-resolver": ">=5", 1027 | "symfony/process": ">=5", 1028 | "symfony/property-access": ">=5", 1029 | "symfony/property-info": ">=5", 1030 | "symfony/proxy-manager-bridge": ">=5", 1031 | "symfony/routing": ">=5", 1032 | "symfony/security": ">=5", 1033 | "symfony/security-bundle": ">=5", 1034 | "symfony/security-core": ">=5", 1035 | "symfony/security-csrf": ">=5", 1036 | "symfony/security-guard": ">=5", 1037 | "symfony/security-http": ">=5", 1038 | "symfony/serializer": ">=5", 1039 | "symfony/stopwatch": ">=5", 1040 | "symfony/symfony": ">=5", 1041 | "symfony/templating": ">=5", 1042 | "symfony/translation": ">=5", 1043 | "symfony/twig-bridge": ">=5", 1044 | "symfony/twig-bundle": ">=5", 1045 | "symfony/validator": ">=5", 1046 | "symfony/var-dumper": ">=5", 1047 | "symfony/web-link": ">=5", 1048 | "symfony/web-profiler-bundle": ">=5", 1049 | "symfony/web-server-bundle": ">=5", 1050 | "symfony/workflow": ">=5", 1051 | "symfony/yaml": ">=5" 1052 | }, 1053 | "type": "metapackage", 1054 | "extra": { 1055 | "branch-alias": { 1056 | "dev-master": "4-dev" 1057 | } 1058 | }, 1059 | "notification-url": "https://packagist.org/downloads/", 1060 | "license": [ 1061 | "MIT" 1062 | ], 1063 | "authors": [ 1064 | { 1065 | "name": "Fabien Potencier", 1066 | "email": "fabien@symfony.com" 1067 | }, 1068 | { 1069 | "name": "Symfony Community", 1070 | "homepage": "https://symfony.com/contributors" 1071 | } 1072 | ], 1073 | "description": "Enforces Long Term Supported versions of Symfony components", 1074 | "homepage": "https://symfony.com", 1075 | "time": "2017-10-19T02:16:32+00:00" 1076 | }, 1077 | { 1078 | "name": "symfony/polyfill-mbstring", 1079 | "version": "v1.7.0", 1080 | "source": { 1081 | "type": "git", 1082 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1083 | "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b" 1084 | }, 1085 | "dist": { 1086 | "type": "zip", 1087 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b", 1088 | "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b", 1089 | "shasum": "" 1090 | }, 1091 | "require": { 1092 | "php": ">=5.3.3" 1093 | }, 1094 | "suggest": { 1095 | "ext-mbstring": "For best performance" 1096 | }, 1097 | "type": "library", 1098 | "extra": { 1099 | "branch-alias": { 1100 | "dev-master": "1.7-dev" 1101 | } 1102 | }, 1103 | "autoload": { 1104 | "psr-4": { 1105 | "Symfony\\Polyfill\\Mbstring\\": "" 1106 | }, 1107 | "files": [ 1108 | "bootstrap.php" 1109 | ] 1110 | }, 1111 | "notification-url": "https://packagist.org/downloads/", 1112 | "license": [ 1113 | "MIT" 1114 | ], 1115 | "authors": [ 1116 | { 1117 | "name": "Nicolas Grekas", 1118 | "email": "p@tchwork.com" 1119 | }, 1120 | { 1121 | "name": "Symfony Community", 1122 | "homepage": "https://symfony.com/contributors" 1123 | } 1124 | ], 1125 | "description": "Symfony polyfill for the Mbstring extension", 1126 | "homepage": "https://symfony.com", 1127 | "keywords": [ 1128 | "compatibility", 1129 | "mbstring", 1130 | "polyfill", 1131 | "portable", 1132 | "shim" 1133 | ], 1134 | "time": "2018-01-30T19:27:44+00:00" 1135 | }, 1136 | { 1137 | "name": "symfony/routing", 1138 | "version": "v4.0.5", 1139 | "source": { 1140 | "type": "git", 1141 | "url": "https://github.com/symfony/routing.git", 1142 | "reference": "9c6268c1970c7e507bedc8946bece32a7db23515" 1143 | }, 1144 | "dist": { 1145 | "type": "zip", 1146 | "url": "https://api.github.com/repos/symfony/routing/zipball/9c6268c1970c7e507bedc8946bece32a7db23515", 1147 | "reference": "9c6268c1970c7e507bedc8946bece32a7db23515", 1148 | "shasum": "" 1149 | }, 1150 | "require": { 1151 | "php": "^7.1.3" 1152 | }, 1153 | "conflict": { 1154 | "symfony/config": "<3.4", 1155 | "symfony/dependency-injection": "<3.4", 1156 | "symfony/yaml": "<3.4" 1157 | }, 1158 | "require-dev": { 1159 | "doctrine/annotations": "~1.0", 1160 | "doctrine/common": "~2.2", 1161 | "psr/log": "~1.0", 1162 | "symfony/config": "~3.4|~4.0", 1163 | "symfony/dependency-injection": "~3.4|~4.0", 1164 | "symfony/expression-language": "~3.4|~4.0", 1165 | "symfony/http-foundation": "~3.4|~4.0", 1166 | "symfony/yaml": "~3.4|~4.0" 1167 | }, 1168 | "suggest": { 1169 | "doctrine/annotations": "For using the annotation loader", 1170 | "symfony/config": "For using the all-in-one router or any loader", 1171 | "symfony/dependency-injection": "For loading routes from a service", 1172 | "symfony/expression-language": "For using expression matching", 1173 | "symfony/http-foundation": "For using a Symfony Request object", 1174 | "symfony/yaml": "For using the YAML loader" 1175 | }, 1176 | "type": "library", 1177 | "extra": { 1178 | "branch-alias": { 1179 | "dev-master": "4.0-dev" 1180 | } 1181 | }, 1182 | "autoload": { 1183 | "psr-4": { 1184 | "Symfony\\Component\\Routing\\": "" 1185 | }, 1186 | "exclude-from-classmap": [ 1187 | "/Tests/" 1188 | ] 1189 | }, 1190 | "notification-url": "https://packagist.org/downloads/", 1191 | "license": [ 1192 | "MIT" 1193 | ], 1194 | "authors": [ 1195 | { 1196 | "name": "Fabien Potencier", 1197 | "email": "fabien@symfony.com" 1198 | }, 1199 | { 1200 | "name": "Symfony Community", 1201 | "homepage": "https://symfony.com/contributors" 1202 | } 1203 | ], 1204 | "description": "Symfony Routing Component", 1205 | "homepage": "https://symfony.com", 1206 | "keywords": [ 1207 | "router", 1208 | "routing", 1209 | "uri", 1210 | "url" 1211 | ], 1212 | "time": "2018-02-28T21:50:02+00:00" 1213 | }, 1214 | { 1215 | "name": "symfony/yaml", 1216 | "version": "v4.0.5", 1217 | "source": { 1218 | "type": "git", 1219 | "url": "https://github.com/symfony/yaml.git", 1220 | "reference": "de5f125ea39de846b90b313b2cfb031a0152d223" 1221 | }, 1222 | "dist": { 1223 | "type": "zip", 1224 | "url": "https://api.github.com/repos/symfony/yaml/zipball/de5f125ea39de846b90b313b2cfb031a0152d223", 1225 | "reference": "de5f125ea39de846b90b313b2cfb031a0152d223", 1226 | "shasum": "" 1227 | }, 1228 | "require": { 1229 | "php": "^7.1.3" 1230 | }, 1231 | "conflict": { 1232 | "symfony/console": "<3.4" 1233 | }, 1234 | "require-dev": { 1235 | "symfony/console": "~3.4|~4.0" 1236 | }, 1237 | "suggest": { 1238 | "symfony/console": "For validating YAML files using the lint command" 1239 | }, 1240 | "type": "library", 1241 | "extra": { 1242 | "branch-alias": { 1243 | "dev-master": "4.0-dev" 1244 | } 1245 | }, 1246 | "autoload": { 1247 | "psr-4": { 1248 | "Symfony\\Component\\Yaml\\": "" 1249 | }, 1250 | "exclude-from-classmap": [ 1251 | "/Tests/" 1252 | ] 1253 | }, 1254 | "notification-url": "https://packagist.org/downloads/", 1255 | "license": [ 1256 | "MIT" 1257 | ], 1258 | "authors": [ 1259 | { 1260 | "name": "Fabien Potencier", 1261 | "email": "fabien@symfony.com" 1262 | }, 1263 | { 1264 | "name": "Symfony Community", 1265 | "homepage": "https://symfony.com/contributors" 1266 | } 1267 | ], 1268 | "description": "Symfony Yaml Component", 1269 | "homepage": "https://symfony.com", 1270 | "time": "2018-02-19T20:08:53+00:00" 1271 | } 1272 | ], 1273 | "packages-dev": [ 1274 | { 1275 | "name": "symfony/dotenv", 1276 | "version": "v4.0.5", 1277 | "source": { 1278 | "type": "git", 1279 | "url": "https://github.com/symfony/dotenv.git", 1280 | "reference": "afb6923923e22874dac20bd042167ccb8df1d158" 1281 | }, 1282 | "dist": { 1283 | "type": "zip", 1284 | "url": "https://api.github.com/repos/symfony/dotenv/zipball/afb6923923e22874dac20bd042167ccb8df1d158", 1285 | "reference": "afb6923923e22874dac20bd042167ccb8df1d158", 1286 | "shasum": "" 1287 | }, 1288 | "require": { 1289 | "php": "^7.1.3" 1290 | }, 1291 | "require-dev": { 1292 | "symfony/process": "~3.4|~4.0" 1293 | }, 1294 | "type": "library", 1295 | "extra": { 1296 | "branch-alias": { 1297 | "dev-master": "4.0-dev" 1298 | } 1299 | }, 1300 | "autoload": { 1301 | "psr-4": { 1302 | "Symfony\\Component\\Dotenv\\": "" 1303 | }, 1304 | "exclude-from-classmap": [ 1305 | "/Tests/" 1306 | ] 1307 | }, 1308 | "notification-url": "https://packagist.org/downloads/", 1309 | "license": [ 1310 | "MIT" 1311 | ], 1312 | "authors": [ 1313 | { 1314 | "name": "Fabien Potencier", 1315 | "email": "fabien@symfony.com" 1316 | }, 1317 | { 1318 | "name": "Symfony Community", 1319 | "homepage": "https://symfony.com/contributors" 1320 | } 1321 | ], 1322 | "description": "Registers environment variables from a .env file", 1323 | "homepage": "https://symfony.com", 1324 | "keywords": [ 1325 | "dotenv", 1326 | "env", 1327 | "environment" 1328 | ], 1329 | "time": "2018-01-03T17:15:19+00:00" 1330 | } 1331 | ], 1332 | "aliases": [], 1333 | "minimum-stability": "stable", 1334 | "stability-flags": { 1335 | "symfony/lts": 20 1336 | }, 1337 | "prefer-stable": false, 1338 | "prefer-lowest": false, 1339 | "platform": { 1340 | "php": "^7.1.3", 1341 | "ext-iconv": "*" 1342 | }, 1343 | "platform-dev": [] 1344 | } 1345 | -------------------------------------------------------------------------------- /symfony_skeleton/config/bundles.php: -------------------------------------------------------------------------------- 1 | ['all' => true], 5 | ]; 6 | -------------------------------------------------------------------------------- /symfony_skeleton/config/packages/dev/routing.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | router: 3 | strict_requirements: true 4 | -------------------------------------------------------------------------------- /symfony_skeleton/config/packages/framework.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | secret: '%env(APP_SECRET)%' 3 | #default_locale: en 4 | #csrf_protection: true 5 | #http_method_override: true 6 | 7 | # Enables session support. Note that the session will ONLY be started if you read or write from it. 8 | # Remove or comment this section to explicitly disable session support. 9 | session: 10 | handler_id: ~ 11 | 12 | #esi: true 13 | #fragments: true 14 | php_errors: 15 | log: true 16 | 17 | cache: 18 | # Put the unique name of your app here: the prefix seed 19 | # is used to compute stable namespaces for cache keys. 20 | #prefix_seed: your_vendor_name/app_name 21 | 22 | # The app cache caches to the filesystem by default. 23 | # Other options include: 24 | 25 | # Redis 26 | #app: cache.adapter.redis 27 | #default_redis_provider: redis://localhost 28 | 29 | # APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues) 30 | #app: cache.adapter.apcu 31 | -------------------------------------------------------------------------------- /symfony_skeleton/config/packages/routing.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | router: 3 | strict_requirements: ~ 4 | -------------------------------------------------------------------------------- /symfony_skeleton/config/packages/test/framework.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | test: true 3 | session: 4 | storage_id: session.storage.mock_file 5 | -------------------------------------------------------------------------------- /symfony_skeleton/config/routes.yaml: -------------------------------------------------------------------------------- 1 | #index: 2 | # path: / 3 | # controller: App\Controller\DefaultController::index 4 | 5 | app_lucky_number: 6 | path: /lucky/number 7 | controller: App\Controller\LuckyController::number -------------------------------------------------------------------------------- /symfony_skeleton/config/services.yaml: -------------------------------------------------------------------------------- 1 | # Put parameters here that don't need to change on each machine where the app is deployed 2 | # https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration 3 | parameters: 4 | 5 | services: 6 | # default configuration for services in *this* file 7 | _defaults: 8 | autowire: true # Automatically injects dependencies in your services. 9 | autoconfigure: true # Automatically registers your services as commands, event subscribers, etc. 10 | public: false # Allows optimizing the container by removing unused services; this also means 11 | # fetching services directly from the container via $container->get() won't work. 12 | # The best practice is to be explicit about your dependencies anyway. 13 | 14 | # makes classes in src/ available to be used as services 15 | # this creates a service per class whose id is the fully-qualified class name 16 | App\: 17 | resource: '../src/*' 18 | exclude: '../src/{Entity,Migrations,Tests,Kernel.php}' 19 | 20 | # controllers are imported separately to make sure services can be injected 21 | # as action arguments even if you don't extend any base controller class 22 | App\Controller\: 23 | resource: '../src/Controller' 24 | tags: ['controller.service_arguments'] 25 | 26 | # add more service definitions when explicit configuration is needed 27 | # please note that last definitions always *replace* previous ones 28 | -------------------------------------------------------------------------------- /symfony_skeleton/public/index.php: -------------------------------------------------------------------------------- 1 | load(__DIR__.'/../.env'); 16 | } 17 | 18 | $env = $_SERVER['APP_ENV'] ?? 'dev'; 19 | $debug = $_SERVER['APP_DEBUG'] ?? ('prod' !== $env); 20 | 21 | if ($debug) { 22 | umask(0000); 23 | 24 | Debug::enable(); 25 | } 26 | 27 | if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? false) { 28 | Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST); 29 | } 30 | 31 | if ($trustedHosts = $_SERVER['TRUSTED_HOSTS'] ?? false) { 32 | Request::setTrustedHosts(explode(',', $trustedHosts)); 33 | } 34 | 35 | $kernel = new Kernel($env, $debug); 36 | $request = Request::createFromGlobals(); 37 | $response = $kernel->handle($request); 38 | $response->send(); 39 | $kernel->terminate($request, $response); 40 | -------------------------------------------------------------------------------- /symfony_skeleton/src/Controller/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wemakewaves/php-docker-bench/590bff2346016223529f12c57dc5fff43efcfbe1/symfony_skeleton/src/Controller/.gitignore -------------------------------------------------------------------------------- /symfony_skeleton/src/Controller/LuckyController.php: -------------------------------------------------------------------------------- 1 | Lucky number: '.$number.'' 14 | ); 15 | } 16 | } -------------------------------------------------------------------------------- /symfony_skeleton/src/Kernel.php: -------------------------------------------------------------------------------- 1 | getProjectDir().'/var/cache/'.$this->environment; 20 | } 21 | 22 | public function getLogDir() 23 | { 24 | return $this->getProjectDir().'/var/log'; 25 | } 26 | 27 | public function registerBundles() 28 | { 29 | $contents = require $this->getProjectDir().'/config/bundles.php'; 30 | foreach ($contents as $class => $envs) { 31 | if (isset($envs['all']) || isset($envs[$this->environment])) { 32 | yield new $class(); 33 | } 34 | } 35 | } 36 | 37 | protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader) 38 | { 39 | // Feel free to remove the "container.autowiring.strict_mode" parameter 40 | // if you are using symfony/dependency-injection 4.0+ as it's the default behavior 41 | $container->setParameter('container.autowiring.strict_mode', true); 42 | $container->setParameter('container.dumper.inline_class_loader', true); 43 | $confDir = $this->getProjectDir().'/config'; 44 | 45 | $loader->load($confDir.'/{packages}/*'.self::CONFIG_EXTS, 'glob'); 46 | $loader->load($confDir.'/{packages}/'.$this->environment.'/**/*'.self::CONFIG_EXTS, 'glob'); 47 | $loader->load($confDir.'/{services}'.self::CONFIG_EXTS, 'glob'); 48 | $loader->load($confDir.'/{services}_'.$this->environment.self::CONFIG_EXTS, 'glob'); 49 | } 50 | 51 | protected function configureRoutes(RouteCollectionBuilder $routes) 52 | { 53 | $confDir = $this->getProjectDir().'/config'; 54 | 55 | $routes->import($confDir.'/{routes}/*'.self::CONFIG_EXTS, '/', 'glob'); 56 | $routes->import($confDir.'/{routes}/'.$this->environment.'/**/*'.self::CONFIG_EXTS, '/', 'glob'); 57 | $routes->import($confDir.'/{routes}'.self::CONFIG_EXTS, '/', 'glob'); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /symfony_skeleton/symfony.lock: -------------------------------------------------------------------------------- 1 | { 2 | "psr/cache": { 3 | "version": "1.0.1" 4 | }, 5 | "psr/container": { 6 | "version": "1.0.0" 7 | }, 8 | "psr/log": { 9 | "version": "1.0.2" 10 | }, 11 | "psr/simple-cache": { 12 | "version": "1.0.1" 13 | }, 14 | "symfony/cache": { 15 | "version": "v4.0.5" 16 | }, 17 | "symfony/config": { 18 | "version": "v4.0.5" 19 | }, 20 | "symfony/console": { 21 | "version": "3.3", 22 | "recipe": { 23 | "repo": "github.com/symfony/recipes", 24 | "branch": "master", 25 | "version": "3.3", 26 | "ref": "c646e4b71af082e94b5014daca36ef6812bad076" 27 | } 28 | }, 29 | "symfony/debug": { 30 | "version": "v4.0.5" 31 | }, 32 | "symfony/dependency-injection": { 33 | "version": "v4.0.5" 34 | }, 35 | "symfony/dotenv": { 36 | "version": "v4.0.5" 37 | }, 38 | "symfony/event-dispatcher": { 39 | "version": "v4.0.5" 40 | }, 41 | "symfony/filesystem": { 42 | "version": "v4.0.5" 43 | }, 44 | "symfony/finder": { 45 | "version": "v4.0.5" 46 | }, 47 | "symfony/flex": { 48 | "version": "1.0", 49 | "recipe": { 50 | "repo": "github.com/symfony/recipes", 51 | "branch": "master", 52 | "version": "1.0", 53 | "ref": "cc1afd81841db36fbef982fe56b48ade6716fac4" 54 | } 55 | }, 56 | "symfony/framework-bundle": { 57 | "version": "3.3", 58 | "recipe": { 59 | "repo": "github.com/symfony/recipes", 60 | "branch": "master", 61 | "version": "3.3", 62 | "ref": "b9f462a47f7fd28d56c61f59c027fd7ad8e1aac8" 63 | } 64 | }, 65 | "symfony/http-foundation": { 66 | "version": "v4.0.5" 67 | }, 68 | "symfony/http-kernel": { 69 | "version": "v4.0.5" 70 | }, 71 | "symfony/lts": { 72 | "version": "4-dev" 73 | }, 74 | "symfony/polyfill-mbstring": { 75 | "version": "v1.7.0" 76 | }, 77 | "symfony/routing": { 78 | "version": "4.0", 79 | "recipe": { 80 | "repo": "github.com/symfony/recipes", 81 | "branch": "master", 82 | "version": "4.0", 83 | "ref": "cda8b550123383d25827705d05a42acf6819fe4e" 84 | } 85 | }, 86 | "symfony/yaml": { 87 | "version": "v4.0.5" 88 | } 89 | } 90 | --------------------------------------------------------------------------------