├── .env ├── .gitignore ├── Docker structure.png ├── LICENSE ├── Makefile ├── README.md ├── bin └── console ├── composer.json ├── composer.lock ├── config ├── bundles.php ├── packages │ ├── cache.yaml │ ├── framework.yaml │ ├── prod │ │ └── routing.yaml │ ├── routing.yaml │ └── test │ │ └── framework.yaml ├── routes.yaml ├── routes │ └── dev │ │ └── framework.yaml └── services.yaml ├── docker-compose.yml ├── docker ├── nginx │ ├── Dockerfile │ └── default.conf └── php │ ├── Dockerfile │ ├── php.ini │ ├── xdebug-linux.ini │ └── xdebug-macos.ini ├── public └── index.php ├── src ├── Controller │ └── .gitignore └── Kernel.php └── symfony.lock /.env: -------------------------------------------------------------------------------- 1 | # In all environments, the following files are loaded if they exist, 2 | # the latter taking precedence over the former: 3 | # 4 | # * .env contains default values for the environment variables needed by the app 5 | # * .env.local uncommitted file with local overrides 6 | # * .env.$APP_ENV committed environment-specific defaults 7 | # * .env.$APP_ENV.local uncommitted environment-specific overrides 8 | # 9 | # Real environment variables win over .env files. 10 | # 11 | # DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES. 12 | # 13 | # Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2). 14 | # https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration 15 | 16 | ###> symfony/framework-bundle ### 17 | APP_ENV=dev 18 | APP_SECRET=e18df7aaeffc3707e68b770261422ef6 19 | #TRUSTED_PROXIES=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 20 | #TRUSTED_HOSTS='^(localhost|example\.com)$' 21 | ###< symfony/framework-bundle ### 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | ###> symfony/framework-bundle ### 3 | /.env.local 4 | /.env.local.php 5 | /.env.*.local 6 | /config/secrets/prod/prod.decrypt.private.php 7 | /public/bundles/ 8 | /var/ 9 | /vendor/ 10 | ###< symfony/framework-bundle ### 11 | 12 | ###> Other files and folders ### 13 | .idea 14 | ###< Other files and folders ### 15 | -------------------------------------------------------------------------------- /Docker structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juanwilde/docker-symfony/b1f55eb5b9a3cd02ffc4185a8ed95c6f2b214707/Docker structure.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) Fabien Potencier 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is furnished 8 | to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DOCKER_BE = docker-symfony-be 4 | UID = $(shell id -u) 5 | 6 | help: ## Show this help message 7 | @echo 'usage: make [target]' 8 | @echo 9 | @echo 'targets:' 10 | @egrep '^(.+)\:\ ##\ (.+)' ${MAKEFILE_LIST} | column -t -c 2 -s ':#' 11 | 12 | run: ## Start the containers 13 | docker network create docker-symfony-network || true 14 | U_ID=${UID} docker-compose up -d 15 | 16 | stop: ## Stop the containers 17 | U_ID=${UID} docker-compose stop 18 | 19 | restart: ## Restart the containers 20 | $(MAKE) stop && $(MAKE) run 21 | 22 | build: ## Rebuilds all the containers 23 | U_ID=${UID} docker-compose build 24 | 25 | prepare: ## Runs backend commands 26 | $(MAKE) composer-install 27 | 28 | # Backend commands 29 | composer-install: ## Installs composer dependencies 30 | U_ID=${UID} docker exec --user ${UID} -it ${DOCKER_BE} composer install --no-scripts --no-interaction --optimize-autoloader 31 | 32 | be-logs: ## Tails the Symfony dev log 33 | U_ID=${UID} docker exec -it --user ${UID} ${DOCKER_BE} tail -f var/log/dev.log 34 | # End backend commands 35 | 36 | ssh-be: ## ssh's into the be container 37 | U_ID=${UID} docker exec -it --user ${UID} ${DOCKER_BE} bash 38 | 39 | code-style: ## Runs php-cs to fix code styling following Symfony rules 40 | U_ID=${UID} docker exec -it --user ${UID} ${DOCKER_BE} php-cs-fixer fix src --rules=@Symfony 41 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # docker-symfony 2 | 3 | This repository contains all the code explained in this [**YouTube playlist**](https://www.youtube.com/playlist?list=PLWpsZlKx38t9SEQu6_AbzBoHeQbApIcjJ) 4 | 5 | ### Scripts 6 | *Using **Makefile***: https://makefiletutorial.com/ 7 | 8 | Installs composer dependencies 9 | 10 | ```shell 11 | make prepare 12 | ``` 13 | 14 | Build the containers 15 | 16 | ```shell 17 | make build 18 | ``` 19 | 20 | Start the containers 21 | 22 | ```shell 23 | make run 24 | ``` 25 | 26 | Stop the containers 27 | 28 | ```shell 29 | make stop 30 | ``` 31 | 32 | Restart the containers 33 | 34 | ```shell 35 | make restart 36 | ``` 37 | 38 | ### Steps to follow 39 | 40 | Init the bash shell into the **Backend container** 41 | 42 | ```shell 43 | make ssh-be 44 | ``` 45 | 46 | Update packages 47 | 48 | ```shell 49 | composer update 50 | ``` 51 | 52 | Install packages 53 | 54 | ```shell 55 | composer install 56 | ``` 57 | 58 | 59 | ### Optional 60 | *Use dry to manage docker*: https://github.com/moncho/dry#installation 61 | 62 | ```shell 63 | curl -sSf https://moncho.github.io/dry/dryup.sh | sudo sh 64 | sudo chmod 755 /usr/local/bin/dry 65 | ``` 66 | 67 | Listen docker containers 68 | 69 | ```shell 70 | dry 71 | ``` -------------------------------------------------------------------------------- /bin/console: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | getParameterOption(['--env', '-e'], null, true)) { 24 | putenv('APP_ENV='.$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = $env); 25 | } 26 | 27 | if ($input->hasParameterOption('--no-debug', true)) { 28 | putenv('APP_DEBUG='.$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = '0'); 29 | } 30 | 31 | (new Dotenv())->bootEnv(dirname(__DIR__).'/.env'); 32 | 33 | if ($_SERVER['APP_DEBUG']) { 34 | umask(0000); 35 | 36 | if (class_exists(Debug::class)) { 37 | Debug::enable(); 38 | } 39 | } 40 | 41 | $kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); 42 | $application = new Application($kernel); 43 | $application->run($input); 44 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "project", 3 | "license": "proprietary", 4 | "require": { 5 | "php": "^7.2.5", 6 | "ext-ctype": "*", 7 | "ext-iconv": "*", 8 | "symfony/console": "5.1.*", 9 | "symfony/dotenv": "5.1.*", 10 | "symfony/flex": "^1.3.1", 11 | "symfony/framework-bundle": "5.1.*", 12 | "symfony/yaml": "5.1.*" 13 | }, 14 | "require-dev": { 15 | }, 16 | "config": { 17 | "optimize-autoloader": true, 18 | "preferred-install": { 19 | "*": "dist" 20 | }, 21 | "sort-packages": true 22 | }, 23 | "autoload": { 24 | "psr-4": { 25 | "App\\": "src/" 26 | } 27 | }, 28 | "autoload-dev": { 29 | "psr-4": { 30 | "App\\Tests\\": "tests/" 31 | } 32 | }, 33 | "replace": { 34 | "paragonie/random_compat": "2.*", 35 | "symfony/polyfill-ctype": "*", 36 | "symfony/polyfill-iconv": "*", 37 | "symfony/polyfill-php72": "*", 38 | "symfony/polyfill-php71": "*", 39 | "symfony/polyfill-php70": "*", 40 | "symfony/polyfill-php56": "*" 41 | }, 42 | "scripts": { 43 | "auto-scripts": { 44 | "cache:clear": "symfony-cmd", 45 | "assets:install %PUBLIC_DIR%": "symfony-cmd" 46 | }, 47 | "post-install-cmd": [ 48 | "@auto-scripts" 49 | ], 50 | "post-update-cmd": [ 51 | "@auto-scripts" 52 | ] 53 | }, 54 | "conflict": { 55 | "symfony/symfony": "*" 56 | }, 57 | "extra": { 58 | "symfony": { 59 | "allow-contrib": false, 60 | "require": "5.1.*" 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /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#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "6671c1127cdb0c6a359ee2fe0429a363", 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/event-dispatcher", 106 | "version": "1.0.0", 107 | "source": { 108 | "type": "git", 109 | "url": "https://github.com/php-fig/event-dispatcher.git", 110 | "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" 111 | }, 112 | "dist": { 113 | "type": "zip", 114 | "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", 115 | "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", 116 | "shasum": "" 117 | }, 118 | "require": { 119 | "php": ">=7.2.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\\EventDispatcher\\": "src/" 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": "Standard interfaces for event handling.", 143 | "keywords": [ 144 | "events", 145 | "psr", 146 | "psr-14" 147 | ], 148 | "time": "2019-01-08T18:20:26+00:00" 149 | }, 150 | { 151 | "name": "psr/log", 152 | "version": "1.1.3", 153 | "source": { 154 | "type": "git", 155 | "url": "https://github.com/php-fig/log.git", 156 | "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" 157 | }, 158 | "dist": { 159 | "type": "zip", 160 | "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", 161 | "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", 162 | "shasum": "" 163 | }, 164 | "require": { 165 | "php": ">=5.3.0" 166 | }, 167 | "type": "library", 168 | "extra": { 169 | "branch-alias": { 170 | "dev-master": "1.1.x-dev" 171 | } 172 | }, 173 | "autoload": { 174 | "psr-4": { 175 | "Psr\\Log\\": "Psr/Log/" 176 | } 177 | }, 178 | "notification-url": "https://packagist.org/downloads/", 179 | "license": [ 180 | "MIT" 181 | ], 182 | "authors": [ 183 | { 184 | "name": "PHP-FIG", 185 | "homepage": "http://www.php-fig.org/" 186 | } 187 | ], 188 | "description": "Common interface for logging libraries", 189 | "homepage": "https://github.com/php-fig/log", 190 | "keywords": [ 191 | "log", 192 | "psr", 193 | "psr-3" 194 | ], 195 | "time": "2020-03-23T09:12:05+00:00" 196 | }, 197 | { 198 | "name": "symfony/cache", 199 | "version": "v5.1.2", 200 | "source": { 201 | "type": "git", 202 | "url": "https://github.com/symfony/cache.git", 203 | "reference": "787eb05e137ad74fa5e51857b9884719760c7b2f" 204 | }, 205 | "dist": { 206 | "type": "zip", 207 | "url": "https://api.github.com/repos/symfony/cache/zipball/787eb05e137ad74fa5e51857b9884719760c7b2f", 208 | "reference": "787eb05e137ad74fa5e51857b9884719760c7b2f", 209 | "shasum": "" 210 | }, 211 | "require": { 212 | "php": ">=7.2.5", 213 | "psr/cache": "~1.0", 214 | "psr/log": "~1.0", 215 | "symfony/cache-contracts": "^1.1.7|^2", 216 | "symfony/polyfill-php80": "^1.15", 217 | "symfony/service-contracts": "^1.1|^2", 218 | "symfony/var-exporter": "^4.4|^5.0" 219 | }, 220 | "conflict": { 221 | "doctrine/dbal": "<2.5", 222 | "symfony/dependency-injection": "<4.4", 223 | "symfony/http-kernel": "<4.4", 224 | "symfony/var-dumper": "<4.4" 225 | }, 226 | "provide": { 227 | "psr/cache-implementation": "1.0", 228 | "psr/simple-cache-implementation": "1.0", 229 | "symfony/cache-implementation": "1.0" 230 | }, 231 | "require-dev": { 232 | "cache/integration-tests": "dev-master", 233 | "doctrine/cache": "^1.6", 234 | "doctrine/dbal": "^2.5|^3.0", 235 | "predis/predis": "^1.1", 236 | "psr/simple-cache": "^1.0", 237 | "symfony/config": "^4.4|^5.0", 238 | "symfony/dependency-injection": "^4.4|^5.0", 239 | "symfony/var-dumper": "^4.4|^5.0" 240 | }, 241 | "type": "library", 242 | "extra": { 243 | "branch-alias": { 244 | "dev-master": "5.1-dev" 245 | } 246 | }, 247 | "autoload": { 248 | "psr-4": { 249 | "Symfony\\Component\\Cache\\": "" 250 | }, 251 | "exclude-from-classmap": [ 252 | "/Tests/" 253 | ] 254 | }, 255 | "notification-url": "https://packagist.org/downloads/", 256 | "license": [ 257 | "MIT" 258 | ], 259 | "authors": [ 260 | { 261 | "name": "Nicolas Grekas", 262 | "email": "p@tchwork.com" 263 | }, 264 | { 265 | "name": "Symfony Community", 266 | "homepage": "https://symfony.com/contributors" 267 | } 268 | ], 269 | "description": "Symfony Cache component with PSR-6, PSR-16, and tags", 270 | "homepage": "https://symfony.com", 271 | "keywords": [ 272 | "caching", 273 | "psr6" 274 | ], 275 | "funding": [ 276 | { 277 | "url": "https://symfony.com/sponsor", 278 | "type": "custom" 279 | }, 280 | { 281 | "url": "https://github.com/fabpot", 282 | "type": "github" 283 | }, 284 | { 285 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 286 | "type": "tidelift" 287 | } 288 | ], 289 | "time": "2020-06-09T14:15:34+00:00" 290 | }, 291 | { 292 | "name": "symfony/cache-contracts", 293 | "version": "v2.1.3", 294 | "source": { 295 | "type": "git", 296 | "url": "https://github.com/symfony/cache-contracts.git", 297 | "reference": "9771a09d2e6b84ecb8c9f0a7dbc72ee92aeba009" 298 | }, 299 | "dist": { 300 | "type": "zip", 301 | "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/9771a09d2e6b84ecb8c9f0a7dbc72ee92aeba009", 302 | "reference": "9771a09d2e6b84ecb8c9f0a7dbc72ee92aeba009", 303 | "shasum": "" 304 | }, 305 | "require": { 306 | "php": ">=7.2.5", 307 | "psr/cache": "^1.0" 308 | }, 309 | "suggest": { 310 | "symfony/cache-implementation": "" 311 | }, 312 | "type": "library", 313 | "extra": { 314 | "branch-alias": { 315 | "dev-master": "2.1-dev" 316 | }, 317 | "thanks": { 318 | "name": "symfony/contracts", 319 | "url": "https://github.com/symfony/contracts" 320 | } 321 | }, 322 | "autoload": { 323 | "psr-4": { 324 | "Symfony\\Contracts\\Cache\\": "" 325 | } 326 | }, 327 | "notification-url": "https://packagist.org/downloads/", 328 | "license": [ 329 | "MIT" 330 | ], 331 | "authors": [ 332 | { 333 | "name": "Nicolas Grekas", 334 | "email": "p@tchwork.com" 335 | }, 336 | { 337 | "name": "Symfony Community", 338 | "homepage": "https://symfony.com/contributors" 339 | } 340 | ], 341 | "description": "Generic abstractions related to caching", 342 | "homepage": "https://symfony.com", 343 | "keywords": [ 344 | "abstractions", 345 | "contracts", 346 | "decoupling", 347 | "interfaces", 348 | "interoperability", 349 | "standards" 350 | ], 351 | "funding": [ 352 | { 353 | "url": "https://symfony.com/sponsor", 354 | "type": "custom" 355 | }, 356 | { 357 | "url": "https://github.com/fabpot", 358 | "type": "github" 359 | }, 360 | { 361 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 362 | "type": "tidelift" 363 | } 364 | ], 365 | "time": "2020-07-06T13:23:11+00:00" 366 | }, 367 | { 368 | "name": "symfony/config", 369 | "version": "v5.1.2", 370 | "source": { 371 | "type": "git", 372 | "url": "https://github.com/symfony/config.git", 373 | "reference": "b8623ef3d99fe62a34baf7a111b576216965f880" 374 | }, 375 | "dist": { 376 | "type": "zip", 377 | "url": "https://api.github.com/repos/symfony/config/zipball/b8623ef3d99fe62a34baf7a111b576216965f880", 378 | "reference": "b8623ef3d99fe62a34baf7a111b576216965f880", 379 | "shasum": "" 380 | }, 381 | "require": { 382 | "php": ">=7.2.5", 383 | "symfony/deprecation-contracts": "^2.1", 384 | "symfony/filesystem": "^4.4|^5.0", 385 | "symfony/polyfill-ctype": "~1.8", 386 | "symfony/polyfill-php80": "^1.15" 387 | }, 388 | "conflict": { 389 | "symfony/finder": "<4.4" 390 | }, 391 | "require-dev": { 392 | "symfony/event-dispatcher": "^4.4|^5.0", 393 | "symfony/finder": "^4.4|^5.0", 394 | "symfony/messenger": "^4.4|^5.0", 395 | "symfony/service-contracts": "^1.1|^2", 396 | "symfony/yaml": "^4.4|^5.0" 397 | }, 398 | "suggest": { 399 | "symfony/yaml": "To use the yaml reference dumper" 400 | }, 401 | "type": "library", 402 | "extra": { 403 | "branch-alias": { 404 | "dev-master": "5.1-dev" 405 | } 406 | }, 407 | "autoload": { 408 | "psr-4": { 409 | "Symfony\\Component\\Config\\": "" 410 | }, 411 | "exclude-from-classmap": [ 412 | "/Tests/" 413 | ] 414 | }, 415 | "notification-url": "https://packagist.org/downloads/", 416 | "license": [ 417 | "MIT" 418 | ], 419 | "authors": [ 420 | { 421 | "name": "Fabien Potencier", 422 | "email": "fabien@symfony.com" 423 | }, 424 | { 425 | "name": "Symfony Community", 426 | "homepage": "https://symfony.com/contributors" 427 | } 428 | ], 429 | "description": "Symfony Config Component", 430 | "homepage": "https://symfony.com", 431 | "funding": [ 432 | { 433 | "url": "https://symfony.com/sponsor", 434 | "type": "custom" 435 | }, 436 | { 437 | "url": "https://github.com/fabpot", 438 | "type": "github" 439 | }, 440 | { 441 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 442 | "type": "tidelift" 443 | } 444 | ], 445 | "time": "2020-05-23T13:08:13+00:00" 446 | }, 447 | { 448 | "name": "symfony/console", 449 | "version": "v5.1.2", 450 | "source": { 451 | "type": "git", 452 | "url": "https://github.com/symfony/console.git", 453 | "reference": "34ac555a3627e324b660e318daa07572e1140123" 454 | }, 455 | "dist": { 456 | "type": "zip", 457 | "url": "https://api.github.com/repos/symfony/console/zipball/34ac555a3627e324b660e318daa07572e1140123", 458 | "reference": "34ac555a3627e324b660e318daa07572e1140123", 459 | "shasum": "" 460 | }, 461 | "require": { 462 | "php": ">=7.2.5", 463 | "symfony/polyfill-mbstring": "~1.0", 464 | "symfony/polyfill-php73": "^1.8", 465 | "symfony/polyfill-php80": "^1.15", 466 | "symfony/service-contracts": "^1.1|^2", 467 | "symfony/string": "^5.1" 468 | }, 469 | "conflict": { 470 | "symfony/dependency-injection": "<4.4", 471 | "symfony/dotenv": "<5.1", 472 | "symfony/event-dispatcher": "<4.4", 473 | "symfony/lock": "<4.4", 474 | "symfony/process": "<4.4" 475 | }, 476 | "provide": { 477 | "psr/log-implementation": "1.0" 478 | }, 479 | "require-dev": { 480 | "psr/log": "~1.0", 481 | "symfony/config": "^4.4|^5.0", 482 | "symfony/dependency-injection": "^4.4|^5.0", 483 | "symfony/event-dispatcher": "^4.4|^5.0", 484 | "symfony/lock": "^4.4|^5.0", 485 | "symfony/process": "^4.4|^5.0", 486 | "symfony/var-dumper": "^4.4|^5.0" 487 | }, 488 | "suggest": { 489 | "psr/log": "For using the console logger", 490 | "symfony/event-dispatcher": "", 491 | "symfony/lock": "", 492 | "symfony/process": "" 493 | }, 494 | "type": "library", 495 | "extra": { 496 | "branch-alias": { 497 | "dev-master": "5.1-dev" 498 | } 499 | }, 500 | "autoload": { 501 | "psr-4": { 502 | "Symfony\\Component\\Console\\": "" 503 | }, 504 | "exclude-from-classmap": [ 505 | "/Tests/" 506 | ] 507 | }, 508 | "notification-url": "https://packagist.org/downloads/", 509 | "license": [ 510 | "MIT" 511 | ], 512 | "authors": [ 513 | { 514 | "name": "Fabien Potencier", 515 | "email": "fabien@symfony.com" 516 | }, 517 | { 518 | "name": "Symfony Community", 519 | "homepage": "https://symfony.com/contributors" 520 | } 521 | ], 522 | "description": "Symfony Console Component", 523 | "homepage": "https://symfony.com", 524 | "funding": [ 525 | { 526 | "url": "https://symfony.com/sponsor", 527 | "type": "custom" 528 | }, 529 | { 530 | "url": "https://github.com/fabpot", 531 | "type": "github" 532 | }, 533 | { 534 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 535 | "type": "tidelift" 536 | } 537 | ], 538 | "time": "2020-06-15T12:59:21+00:00" 539 | }, 540 | { 541 | "name": "symfony/dependency-injection", 542 | "version": "v5.1.2", 543 | "source": { 544 | "type": "git", 545 | "url": "https://github.com/symfony/dependency-injection.git", 546 | "reference": "6508423eded583fc07e88a0172803e1a62f0310c" 547 | }, 548 | "dist": { 549 | "type": "zip", 550 | "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/6508423eded583fc07e88a0172803e1a62f0310c", 551 | "reference": "6508423eded583fc07e88a0172803e1a62f0310c", 552 | "shasum": "" 553 | }, 554 | "require": { 555 | "php": ">=7.2.5", 556 | "psr/container": "^1.0", 557 | "symfony/deprecation-contracts": "^2.1", 558 | "symfony/polyfill-php80": "^1.15", 559 | "symfony/service-contracts": "^1.1.6|^2" 560 | }, 561 | "conflict": { 562 | "symfony/config": "<5.1", 563 | "symfony/finder": "<4.4", 564 | "symfony/proxy-manager-bridge": "<4.4", 565 | "symfony/yaml": "<4.4" 566 | }, 567 | "provide": { 568 | "psr/container-implementation": "1.0", 569 | "symfony/service-implementation": "1.0" 570 | }, 571 | "require-dev": { 572 | "symfony/config": "^5.1", 573 | "symfony/expression-language": "^4.4|^5.0", 574 | "symfony/yaml": "^4.4|^5.0" 575 | }, 576 | "suggest": { 577 | "symfony/config": "", 578 | "symfony/expression-language": "For using expressions in service container configuration", 579 | "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", 580 | "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", 581 | "symfony/yaml": "" 582 | }, 583 | "type": "library", 584 | "extra": { 585 | "branch-alias": { 586 | "dev-master": "5.1-dev" 587 | } 588 | }, 589 | "autoload": { 590 | "psr-4": { 591 | "Symfony\\Component\\DependencyInjection\\": "" 592 | }, 593 | "exclude-from-classmap": [ 594 | "/Tests/" 595 | ] 596 | }, 597 | "notification-url": "https://packagist.org/downloads/", 598 | "license": [ 599 | "MIT" 600 | ], 601 | "authors": [ 602 | { 603 | "name": "Fabien Potencier", 604 | "email": "fabien@symfony.com" 605 | }, 606 | { 607 | "name": "Symfony Community", 608 | "homepage": "https://symfony.com/contributors" 609 | } 610 | ], 611 | "description": "Symfony DependencyInjection Component", 612 | "homepage": "https://symfony.com", 613 | "funding": [ 614 | { 615 | "url": "https://symfony.com/sponsor", 616 | "type": "custom" 617 | }, 618 | { 619 | "url": "https://github.com/fabpot", 620 | "type": "github" 621 | }, 622 | { 623 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 624 | "type": "tidelift" 625 | } 626 | ], 627 | "time": "2020-06-12T08:11:32+00:00" 628 | }, 629 | { 630 | "name": "symfony/deprecation-contracts", 631 | "version": "v2.1.3", 632 | "source": { 633 | "type": "git", 634 | "url": "https://github.com/symfony/deprecation-contracts.git", 635 | "reference": "5e20b83385a77593259c9f8beb2c43cd03b2ac14" 636 | }, 637 | "dist": { 638 | "type": "zip", 639 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5e20b83385a77593259c9f8beb2c43cd03b2ac14", 640 | "reference": "5e20b83385a77593259c9f8beb2c43cd03b2ac14", 641 | "shasum": "" 642 | }, 643 | "require": { 644 | "php": ">=7.1" 645 | }, 646 | "type": "library", 647 | "extra": { 648 | "branch-alias": { 649 | "dev-master": "2.1-dev" 650 | }, 651 | "thanks": { 652 | "name": "symfony/contracts", 653 | "url": "https://github.com/symfony/contracts" 654 | } 655 | }, 656 | "autoload": { 657 | "files": [ 658 | "function.php" 659 | ] 660 | }, 661 | "notification-url": "https://packagist.org/downloads/", 662 | "license": [ 663 | "MIT" 664 | ], 665 | "authors": [ 666 | { 667 | "name": "Nicolas Grekas", 668 | "email": "p@tchwork.com" 669 | }, 670 | { 671 | "name": "Symfony Community", 672 | "homepage": "https://symfony.com/contributors" 673 | } 674 | ], 675 | "description": "A generic function and convention to trigger deprecation notices", 676 | "homepage": "https://symfony.com", 677 | "funding": [ 678 | { 679 | "url": "https://symfony.com/sponsor", 680 | "type": "custom" 681 | }, 682 | { 683 | "url": "https://github.com/fabpot", 684 | "type": "github" 685 | }, 686 | { 687 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 688 | "type": "tidelift" 689 | } 690 | ], 691 | "time": "2020-06-06T08:49:21+00:00" 692 | }, 693 | { 694 | "name": "symfony/dotenv", 695 | "version": "v5.1.2", 696 | "source": { 697 | "type": "git", 698 | "url": "https://github.com/symfony/dotenv.git", 699 | "reference": "42d2a18597f4c7cafc0e25b1ad6a1cbb4f2caf05" 700 | }, 701 | "dist": { 702 | "type": "zip", 703 | "url": "https://api.github.com/repos/symfony/dotenv/zipball/42d2a18597f4c7cafc0e25b1ad6a1cbb4f2caf05", 704 | "reference": "42d2a18597f4c7cafc0e25b1ad6a1cbb4f2caf05", 705 | "shasum": "" 706 | }, 707 | "require": { 708 | "php": ">=7.2.5", 709 | "symfony/deprecation-contracts": "^2.1" 710 | }, 711 | "require-dev": { 712 | "symfony/process": "^4.4|^5.0" 713 | }, 714 | "type": "library", 715 | "extra": { 716 | "branch-alias": { 717 | "dev-master": "5.1-dev" 718 | } 719 | }, 720 | "autoload": { 721 | "psr-4": { 722 | "Symfony\\Component\\Dotenv\\": "" 723 | }, 724 | "exclude-from-classmap": [ 725 | "/Tests/" 726 | ] 727 | }, 728 | "notification-url": "https://packagist.org/downloads/", 729 | "license": [ 730 | "MIT" 731 | ], 732 | "authors": [ 733 | { 734 | "name": "Fabien Potencier", 735 | "email": "fabien@symfony.com" 736 | }, 737 | { 738 | "name": "Symfony Community", 739 | "homepage": "https://symfony.com/contributors" 740 | } 741 | ], 742 | "description": "Registers environment variables from a .env file", 743 | "homepage": "https://symfony.com", 744 | "keywords": [ 745 | "dotenv", 746 | "env", 747 | "environment" 748 | ], 749 | "funding": [ 750 | { 751 | "url": "https://symfony.com/sponsor", 752 | "type": "custom" 753 | }, 754 | { 755 | "url": "https://github.com/fabpot", 756 | "type": "github" 757 | }, 758 | { 759 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 760 | "type": "tidelift" 761 | } 762 | ], 763 | "time": "2020-05-28T08:20:44+00:00" 764 | }, 765 | { 766 | "name": "symfony/error-handler", 767 | "version": "v5.1.2", 768 | "source": { 769 | "type": "git", 770 | "url": "https://github.com/symfony/error-handler.git", 771 | "reference": "7d0b927b9d3dc41d7d46cda38cbfcd20cdcbb896" 772 | }, 773 | "dist": { 774 | "type": "zip", 775 | "url": "https://api.github.com/repos/symfony/error-handler/zipball/7d0b927b9d3dc41d7d46cda38cbfcd20cdcbb896", 776 | "reference": "7d0b927b9d3dc41d7d46cda38cbfcd20cdcbb896", 777 | "shasum": "" 778 | }, 779 | "require": { 780 | "php": ">=7.2.5", 781 | "psr/log": "^1.0", 782 | "symfony/polyfill-php80": "^1.15", 783 | "symfony/var-dumper": "^4.4|^5.0" 784 | }, 785 | "require-dev": { 786 | "symfony/deprecation-contracts": "^2.1", 787 | "symfony/http-kernel": "^4.4|^5.0", 788 | "symfony/serializer": "^4.4|^5.0" 789 | }, 790 | "type": "library", 791 | "extra": { 792 | "branch-alias": { 793 | "dev-master": "5.1-dev" 794 | } 795 | }, 796 | "autoload": { 797 | "psr-4": { 798 | "Symfony\\Component\\ErrorHandler\\": "" 799 | }, 800 | "exclude-from-classmap": [ 801 | "/Tests/" 802 | ] 803 | }, 804 | "notification-url": "https://packagist.org/downloads/", 805 | "license": [ 806 | "MIT" 807 | ], 808 | "authors": [ 809 | { 810 | "name": "Fabien Potencier", 811 | "email": "fabien@symfony.com" 812 | }, 813 | { 814 | "name": "Symfony Community", 815 | "homepage": "https://symfony.com/contributors" 816 | } 817 | ], 818 | "description": "Symfony ErrorHandler Component", 819 | "homepage": "https://symfony.com", 820 | "funding": [ 821 | { 822 | "url": "https://symfony.com/sponsor", 823 | "type": "custom" 824 | }, 825 | { 826 | "url": "https://github.com/fabpot", 827 | "type": "github" 828 | }, 829 | { 830 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 831 | "type": "tidelift" 832 | } 833 | ], 834 | "time": "2020-05-30T20:35:19+00:00" 835 | }, 836 | { 837 | "name": "symfony/event-dispatcher", 838 | "version": "v5.1.2", 839 | "source": { 840 | "type": "git", 841 | "url": "https://github.com/symfony/event-dispatcher.git", 842 | "reference": "cc0d059e2e997e79ca34125a52f3e33de4424ac7" 843 | }, 844 | "dist": { 845 | "type": "zip", 846 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/cc0d059e2e997e79ca34125a52f3e33de4424ac7", 847 | "reference": "cc0d059e2e997e79ca34125a52f3e33de4424ac7", 848 | "shasum": "" 849 | }, 850 | "require": { 851 | "php": ">=7.2.5", 852 | "symfony/deprecation-contracts": "^2.1", 853 | "symfony/event-dispatcher-contracts": "^2", 854 | "symfony/polyfill-php80": "^1.15" 855 | }, 856 | "conflict": { 857 | "symfony/dependency-injection": "<4.4" 858 | }, 859 | "provide": { 860 | "psr/event-dispatcher-implementation": "1.0", 861 | "symfony/event-dispatcher-implementation": "2.0" 862 | }, 863 | "require-dev": { 864 | "psr/log": "~1.0", 865 | "symfony/config": "^4.4|^5.0", 866 | "symfony/dependency-injection": "^4.4|^5.0", 867 | "symfony/expression-language": "^4.4|^5.0", 868 | "symfony/http-foundation": "^4.4|^5.0", 869 | "symfony/service-contracts": "^1.1|^2", 870 | "symfony/stopwatch": "^4.4|^5.0" 871 | }, 872 | "suggest": { 873 | "symfony/dependency-injection": "", 874 | "symfony/http-kernel": "" 875 | }, 876 | "type": "library", 877 | "extra": { 878 | "branch-alias": { 879 | "dev-master": "5.1-dev" 880 | } 881 | }, 882 | "autoload": { 883 | "psr-4": { 884 | "Symfony\\Component\\EventDispatcher\\": "" 885 | }, 886 | "exclude-from-classmap": [ 887 | "/Tests/" 888 | ] 889 | }, 890 | "notification-url": "https://packagist.org/downloads/", 891 | "license": [ 892 | "MIT" 893 | ], 894 | "authors": [ 895 | { 896 | "name": "Fabien Potencier", 897 | "email": "fabien@symfony.com" 898 | }, 899 | { 900 | "name": "Symfony Community", 901 | "homepage": "https://symfony.com/contributors" 902 | } 903 | ], 904 | "description": "Symfony EventDispatcher Component", 905 | "homepage": "https://symfony.com", 906 | "funding": [ 907 | { 908 | "url": "https://symfony.com/sponsor", 909 | "type": "custom" 910 | }, 911 | { 912 | "url": "https://github.com/fabpot", 913 | "type": "github" 914 | }, 915 | { 916 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 917 | "type": "tidelift" 918 | } 919 | ], 920 | "time": "2020-05-20T17:43:50+00:00" 921 | }, 922 | { 923 | "name": "symfony/event-dispatcher-contracts", 924 | "version": "v2.1.3", 925 | "source": { 926 | "type": "git", 927 | "url": "https://github.com/symfony/event-dispatcher-contracts.git", 928 | "reference": "f6f613d74cfc5a623fc36294d3451eb7fa5a042b" 929 | }, 930 | "dist": { 931 | "type": "zip", 932 | "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f6f613d74cfc5a623fc36294d3451eb7fa5a042b", 933 | "reference": "f6f613d74cfc5a623fc36294d3451eb7fa5a042b", 934 | "shasum": "" 935 | }, 936 | "require": { 937 | "php": ">=7.2.5", 938 | "psr/event-dispatcher": "^1" 939 | }, 940 | "suggest": { 941 | "symfony/event-dispatcher-implementation": "" 942 | }, 943 | "type": "library", 944 | "extra": { 945 | "branch-alias": { 946 | "dev-master": "2.1-dev" 947 | }, 948 | "thanks": { 949 | "name": "symfony/contracts", 950 | "url": "https://github.com/symfony/contracts" 951 | } 952 | }, 953 | "autoload": { 954 | "psr-4": { 955 | "Symfony\\Contracts\\EventDispatcher\\": "" 956 | } 957 | }, 958 | "notification-url": "https://packagist.org/downloads/", 959 | "license": [ 960 | "MIT" 961 | ], 962 | "authors": [ 963 | { 964 | "name": "Nicolas Grekas", 965 | "email": "p@tchwork.com" 966 | }, 967 | { 968 | "name": "Symfony Community", 969 | "homepage": "https://symfony.com/contributors" 970 | } 971 | ], 972 | "description": "Generic abstractions related to dispatching event", 973 | "homepage": "https://symfony.com", 974 | "keywords": [ 975 | "abstractions", 976 | "contracts", 977 | "decoupling", 978 | "interfaces", 979 | "interoperability", 980 | "standards" 981 | ], 982 | "funding": [ 983 | { 984 | "url": "https://symfony.com/sponsor", 985 | "type": "custom" 986 | }, 987 | { 988 | "url": "https://github.com/fabpot", 989 | "type": "github" 990 | }, 991 | { 992 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 993 | "type": "tidelift" 994 | } 995 | ], 996 | "time": "2020-07-06T13:23:11+00:00" 997 | }, 998 | { 999 | "name": "symfony/filesystem", 1000 | "version": "v5.1.2", 1001 | "source": { 1002 | "type": "git", 1003 | "url": "https://github.com/symfony/filesystem.git", 1004 | "reference": "6e4320f06d5f2cce0d96530162491f4465179157" 1005 | }, 1006 | "dist": { 1007 | "type": "zip", 1008 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/6e4320f06d5f2cce0d96530162491f4465179157", 1009 | "reference": "6e4320f06d5f2cce0d96530162491f4465179157", 1010 | "shasum": "" 1011 | }, 1012 | "require": { 1013 | "php": ">=7.2.5", 1014 | "symfony/polyfill-ctype": "~1.8" 1015 | }, 1016 | "type": "library", 1017 | "extra": { 1018 | "branch-alias": { 1019 | "dev-master": "5.1-dev" 1020 | } 1021 | }, 1022 | "autoload": { 1023 | "psr-4": { 1024 | "Symfony\\Component\\Filesystem\\": "" 1025 | }, 1026 | "exclude-from-classmap": [ 1027 | "/Tests/" 1028 | ] 1029 | }, 1030 | "notification-url": "https://packagist.org/downloads/", 1031 | "license": [ 1032 | "MIT" 1033 | ], 1034 | "authors": [ 1035 | { 1036 | "name": "Fabien Potencier", 1037 | "email": "fabien@symfony.com" 1038 | }, 1039 | { 1040 | "name": "Symfony Community", 1041 | "homepage": "https://symfony.com/contributors" 1042 | } 1043 | ], 1044 | "description": "Symfony Filesystem Component", 1045 | "homepage": "https://symfony.com", 1046 | "funding": [ 1047 | { 1048 | "url": "https://symfony.com/sponsor", 1049 | "type": "custom" 1050 | }, 1051 | { 1052 | "url": "https://github.com/fabpot", 1053 | "type": "github" 1054 | }, 1055 | { 1056 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1057 | "type": "tidelift" 1058 | } 1059 | ], 1060 | "time": "2020-05-30T20:35:19+00:00" 1061 | }, 1062 | { 1063 | "name": "symfony/finder", 1064 | "version": "v5.1.2", 1065 | "source": { 1066 | "type": "git", 1067 | "url": "https://github.com/symfony/finder.git", 1068 | "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187" 1069 | }, 1070 | "dist": { 1071 | "type": "zip", 1072 | "url": "https://api.github.com/repos/symfony/finder/zipball/4298870062bfc667cb78d2b379be4bf5dec5f187", 1073 | "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187", 1074 | "shasum": "" 1075 | }, 1076 | "require": { 1077 | "php": ">=7.2.5" 1078 | }, 1079 | "type": "library", 1080 | "extra": { 1081 | "branch-alias": { 1082 | "dev-master": "5.1-dev" 1083 | } 1084 | }, 1085 | "autoload": { 1086 | "psr-4": { 1087 | "Symfony\\Component\\Finder\\": "" 1088 | }, 1089 | "exclude-from-classmap": [ 1090 | "/Tests/" 1091 | ] 1092 | }, 1093 | "notification-url": "https://packagist.org/downloads/", 1094 | "license": [ 1095 | "MIT" 1096 | ], 1097 | "authors": [ 1098 | { 1099 | "name": "Fabien Potencier", 1100 | "email": "fabien@symfony.com" 1101 | }, 1102 | { 1103 | "name": "Symfony Community", 1104 | "homepage": "https://symfony.com/contributors" 1105 | } 1106 | ], 1107 | "description": "Symfony Finder Component", 1108 | "homepage": "https://symfony.com", 1109 | "funding": [ 1110 | { 1111 | "url": "https://symfony.com/sponsor", 1112 | "type": "custom" 1113 | }, 1114 | { 1115 | "url": "https://github.com/fabpot", 1116 | "type": "github" 1117 | }, 1118 | { 1119 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1120 | "type": "tidelift" 1121 | } 1122 | ], 1123 | "time": "2020-05-20T17:43:50+00:00" 1124 | }, 1125 | { 1126 | "name": "symfony/flex", 1127 | "version": "v1.8.4", 1128 | "source": { 1129 | "type": "git", 1130 | "url": "https://github.com/symfony/flex.git", 1131 | "reference": "7df5a72c7664baab629ec33de7890e9e3996b51b" 1132 | }, 1133 | "dist": { 1134 | "type": "zip", 1135 | "url": "https://api.github.com/repos/symfony/flex/zipball/7df5a72c7664baab629ec33de7890e9e3996b51b", 1136 | "reference": "7df5a72c7664baab629ec33de7890e9e3996b51b", 1137 | "shasum": "" 1138 | }, 1139 | "require": { 1140 | "composer-plugin-api": "^1.0|^2.0", 1141 | "php": ">=7.1" 1142 | }, 1143 | "require-dev": { 1144 | "composer/composer": "^1.0.2|^2.0", 1145 | "symfony/dotenv": "^4.4|^5.0", 1146 | "symfony/phpunit-bridge": "^4.4|^5.0", 1147 | "symfony/process": "^3.4|^4.4|^5.0" 1148 | }, 1149 | "type": "composer-plugin", 1150 | "extra": { 1151 | "branch-alias": { 1152 | "dev-master": "1.8-dev" 1153 | }, 1154 | "class": "Symfony\\Flex\\Flex" 1155 | }, 1156 | "autoload": { 1157 | "psr-4": { 1158 | "Symfony\\Flex\\": "src" 1159 | } 1160 | }, 1161 | "notification-url": "https://packagist.org/downloads/", 1162 | "license": [ 1163 | "MIT" 1164 | ], 1165 | "authors": [ 1166 | { 1167 | "name": "Fabien Potencier", 1168 | "email": "fabien.potencier@gmail.com" 1169 | } 1170 | ], 1171 | "description": "Composer plugin for Symfony", 1172 | "funding": [ 1173 | { 1174 | "url": "https://symfony.com/sponsor", 1175 | "type": "custom" 1176 | }, 1177 | { 1178 | "url": "https://github.com/fabpot", 1179 | "type": "github" 1180 | }, 1181 | { 1182 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1183 | "type": "tidelift" 1184 | } 1185 | ], 1186 | "time": "2020-06-16T23:10:41+00:00" 1187 | }, 1188 | { 1189 | "name": "symfony/framework-bundle", 1190 | "version": "v5.1.2", 1191 | "source": { 1192 | "type": "git", 1193 | "url": "https://github.com/symfony/framework-bundle.git", 1194 | "reference": "d9a85deaa9c7a10df087d86f6a689eb5d4db0abc" 1195 | }, 1196 | "dist": { 1197 | "type": "zip", 1198 | "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/d9a85deaa9c7a10df087d86f6a689eb5d4db0abc", 1199 | "reference": "d9a85deaa9c7a10df087d86f6a689eb5d4db0abc", 1200 | "shasum": "" 1201 | }, 1202 | "require": { 1203 | "ext-xml": "*", 1204 | "php": ">=7.2.5", 1205 | "symfony/cache": "^4.4|^5.0", 1206 | "symfony/config": "^5.0", 1207 | "symfony/dependency-injection": "^5.1", 1208 | "symfony/error-handler": "^4.4.1|^5.0.1", 1209 | "symfony/event-dispatcher": "^5.1", 1210 | "symfony/filesystem": "^4.4|^5.0", 1211 | "symfony/finder": "^4.4|^5.0", 1212 | "symfony/http-foundation": "^4.4|^5.0", 1213 | "symfony/http-kernel": "^5.0", 1214 | "symfony/polyfill-mbstring": "~1.0", 1215 | "symfony/polyfill-php80": "^1.15", 1216 | "symfony/routing": "^5.1" 1217 | }, 1218 | "conflict": { 1219 | "doctrine/persistence": "<1.3", 1220 | "phpdocumentor/reflection-docblock": "<3.0", 1221 | "phpdocumentor/type-resolver": "<0.2.1", 1222 | "phpunit/phpunit": "<5.4.3", 1223 | "symfony/asset": "<5.1", 1224 | "symfony/browser-kit": "<4.4", 1225 | "symfony/console": "<4.4", 1226 | "symfony/dom-crawler": "<4.4", 1227 | "symfony/dotenv": "<5.1", 1228 | "symfony/form": "<4.4", 1229 | "symfony/http-client": "<4.4", 1230 | "symfony/lock": "<4.4", 1231 | "symfony/mailer": "<4.4", 1232 | "symfony/messenger": "<4.4", 1233 | "symfony/mime": "<4.4", 1234 | "symfony/property-info": "<4.4", 1235 | "symfony/serializer": "<4.4", 1236 | "symfony/stopwatch": "<4.4", 1237 | "symfony/translation": "<5.0", 1238 | "symfony/twig-bridge": "<4.4", 1239 | "symfony/twig-bundle": "<4.4", 1240 | "symfony/validator": "<4.4", 1241 | "symfony/web-profiler-bundle": "<4.4", 1242 | "symfony/workflow": "<4.4" 1243 | }, 1244 | "require-dev": { 1245 | "doctrine/annotations": "~1.7", 1246 | "doctrine/cache": "~1.0", 1247 | "paragonie/sodium_compat": "^1.8", 1248 | "phpdocumentor/reflection-docblock": "^3.0|^4.0", 1249 | "symfony/asset": "^5.1", 1250 | "symfony/browser-kit": "^4.4|^5.0", 1251 | "symfony/console": "^4.4|^5.0", 1252 | "symfony/css-selector": "^4.4|^5.0", 1253 | "symfony/dom-crawler": "^4.4|^5.0", 1254 | "symfony/dotenv": "^5.1", 1255 | "symfony/expression-language": "^4.4|^5.0", 1256 | "symfony/form": "^4.4|^5.0", 1257 | "symfony/http-client": "^4.4|^5.0", 1258 | "symfony/lock": "^4.4|^5.0", 1259 | "symfony/mailer": "^4.4|^5.0", 1260 | "symfony/messenger": "^4.4|^5.0", 1261 | "symfony/mime": "^4.4|^5.0", 1262 | "symfony/polyfill-intl-icu": "~1.0", 1263 | "symfony/process": "^4.4|^5.0", 1264 | "symfony/property-info": "^4.4|^5.0", 1265 | "symfony/security-bundle": "^5.1", 1266 | "symfony/security-csrf": "^4.4|^5.0", 1267 | "symfony/security-http": "^4.4|^5.0", 1268 | "symfony/serializer": "^4.4|^5.0", 1269 | "symfony/stopwatch": "^4.4|^5.0", 1270 | "symfony/string": "^5.0", 1271 | "symfony/translation": "^5.0", 1272 | "symfony/twig-bundle": "^4.4|^5.0", 1273 | "symfony/validator": "^4.4|^5.0", 1274 | "symfony/web-link": "^4.4|^5.0", 1275 | "symfony/workflow": "^4.4|^5.0", 1276 | "symfony/yaml": "^4.4|^5.0", 1277 | "twig/twig": "^2.10|^3.0" 1278 | }, 1279 | "suggest": { 1280 | "ext-apcu": "For best performance of the system caches", 1281 | "symfony/console": "For using the console commands", 1282 | "symfony/form": "For using forms", 1283 | "symfony/property-info": "For using the property_info service", 1284 | "symfony/serializer": "For using the serializer service", 1285 | "symfony/validator": "For using validation", 1286 | "symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering", 1287 | "symfony/yaml": "For using the debug:config and lint:yaml commands" 1288 | }, 1289 | "type": "symfony-bundle", 1290 | "extra": { 1291 | "branch-alias": { 1292 | "dev-master": "5.1-dev" 1293 | } 1294 | }, 1295 | "autoload": { 1296 | "psr-4": { 1297 | "Symfony\\Bundle\\FrameworkBundle\\": "" 1298 | }, 1299 | "exclude-from-classmap": [ 1300 | "/Tests/" 1301 | ] 1302 | }, 1303 | "notification-url": "https://packagist.org/downloads/", 1304 | "license": [ 1305 | "MIT" 1306 | ], 1307 | "authors": [ 1308 | { 1309 | "name": "Fabien Potencier", 1310 | "email": "fabien@symfony.com" 1311 | }, 1312 | { 1313 | "name": "Symfony Community", 1314 | "homepage": "https://symfony.com/contributors" 1315 | } 1316 | ], 1317 | "description": "Symfony FrameworkBundle", 1318 | "homepage": "https://symfony.com", 1319 | "funding": [ 1320 | { 1321 | "url": "https://symfony.com/sponsor", 1322 | "type": "custom" 1323 | }, 1324 | { 1325 | "url": "https://github.com/fabpot", 1326 | "type": "github" 1327 | }, 1328 | { 1329 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1330 | "type": "tidelift" 1331 | } 1332 | ], 1333 | "time": "2020-06-12T08:11:32+00:00" 1334 | }, 1335 | { 1336 | "name": "symfony/http-foundation", 1337 | "version": "v5.1.2", 1338 | "source": { 1339 | "type": "git", 1340 | "url": "https://github.com/symfony/http-foundation.git", 1341 | "reference": "f93055171b847915225bd5b0a5792888419d8d75" 1342 | }, 1343 | "dist": { 1344 | "type": "zip", 1345 | "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f93055171b847915225bd5b0a5792888419d8d75", 1346 | "reference": "f93055171b847915225bd5b0a5792888419d8d75", 1347 | "shasum": "" 1348 | }, 1349 | "require": { 1350 | "php": ">=7.2.5", 1351 | "symfony/deprecation-contracts": "^2.1", 1352 | "symfony/polyfill-mbstring": "~1.1", 1353 | "symfony/polyfill-php80": "^1.15" 1354 | }, 1355 | "require-dev": { 1356 | "predis/predis": "~1.0", 1357 | "symfony/cache": "^4.4|^5.0", 1358 | "symfony/expression-language": "^4.4|^5.0", 1359 | "symfony/mime": "^4.4|^5.0" 1360 | }, 1361 | "suggest": { 1362 | "symfony/mime": "To use the file extension guesser" 1363 | }, 1364 | "type": "library", 1365 | "extra": { 1366 | "branch-alias": { 1367 | "dev-master": "5.1-dev" 1368 | } 1369 | }, 1370 | "autoload": { 1371 | "psr-4": { 1372 | "Symfony\\Component\\HttpFoundation\\": "" 1373 | }, 1374 | "exclude-from-classmap": [ 1375 | "/Tests/" 1376 | ] 1377 | }, 1378 | "notification-url": "https://packagist.org/downloads/", 1379 | "license": [ 1380 | "MIT" 1381 | ], 1382 | "authors": [ 1383 | { 1384 | "name": "Fabien Potencier", 1385 | "email": "fabien@symfony.com" 1386 | }, 1387 | { 1388 | "name": "Symfony Community", 1389 | "homepage": "https://symfony.com/contributors" 1390 | } 1391 | ], 1392 | "description": "Symfony HttpFoundation Component", 1393 | "homepage": "https://symfony.com", 1394 | "funding": [ 1395 | { 1396 | "url": "https://symfony.com/sponsor", 1397 | "type": "custom" 1398 | }, 1399 | { 1400 | "url": "https://github.com/fabpot", 1401 | "type": "github" 1402 | }, 1403 | { 1404 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1405 | "type": "tidelift" 1406 | } 1407 | ], 1408 | "time": "2020-06-15T06:52:54+00:00" 1409 | }, 1410 | { 1411 | "name": "symfony/http-kernel", 1412 | "version": "v5.1.2", 1413 | "source": { 1414 | "type": "git", 1415 | "url": "https://github.com/symfony/http-kernel.git", 1416 | "reference": "a18c27ace1ef344ffcb129a5b089bad7643b387a" 1417 | }, 1418 | "dist": { 1419 | "type": "zip", 1420 | "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a18c27ace1ef344ffcb129a5b089bad7643b387a", 1421 | "reference": "a18c27ace1ef344ffcb129a5b089bad7643b387a", 1422 | "shasum": "" 1423 | }, 1424 | "require": { 1425 | "php": ">=7.2.5", 1426 | "psr/log": "~1.0", 1427 | "symfony/deprecation-contracts": "^2.1", 1428 | "symfony/error-handler": "^4.4|^5.0", 1429 | "symfony/event-dispatcher": "^5.0", 1430 | "symfony/http-foundation": "^4.4|^5.0", 1431 | "symfony/polyfill-ctype": "^1.8", 1432 | "symfony/polyfill-php73": "^1.9", 1433 | "symfony/polyfill-php80": "^1.15" 1434 | }, 1435 | "conflict": { 1436 | "symfony/browser-kit": "<4.4", 1437 | "symfony/cache": "<5.0", 1438 | "symfony/config": "<5.0", 1439 | "symfony/console": "<4.4", 1440 | "symfony/dependency-injection": "<4.4", 1441 | "symfony/doctrine-bridge": "<5.0", 1442 | "symfony/form": "<5.0", 1443 | "symfony/http-client": "<5.0", 1444 | "symfony/mailer": "<5.0", 1445 | "symfony/messenger": "<5.0", 1446 | "symfony/translation": "<5.0", 1447 | "symfony/twig-bridge": "<5.0", 1448 | "symfony/validator": "<5.0", 1449 | "twig/twig": "<2.4" 1450 | }, 1451 | "provide": { 1452 | "psr/log-implementation": "1.0" 1453 | }, 1454 | "require-dev": { 1455 | "psr/cache": "~1.0", 1456 | "symfony/browser-kit": "^4.4|^5.0", 1457 | "symfony/config": "^5.0", 1458 | "symfony/console": "^4.4|^5.0", 1459 | "symfony/css-selector": "^4.4|^5.0", 1460 | "symfony/dependency-injection": "^4.4|^5.0", 1461 | "symfony/dom-crawler": "^4.4|^5.0", 1462 | "symfony/expression-language": "^4.4|^5.0", 1463 | "symfony/finder": "^4.4|^5.0", 1464 | "symfony/process": "^4.4|^5.0", 1465 | "symfony/routing": "^4.4|^5.0", 1466 | "symfony/stopwatch": "^4.4|^5.0", 1467 | "symfony/translation": "^4.4|^5.0", 1468 | "symfony/translation-contracts": "^1.1|^2", 1469 | "twig/twig": "^2.4|^3.0" 1470 | }, 1471 | "suggest": { 1472 | "symfony/browser-kit": "", 1473 | "symfony/config": "", 1474 | "symfony/console": "", 1475 | "symfony/dependency-injection": "" 1476 | }, 1477 | "type": "library", 1478 | "extra": { 1479 | "branch-alias": { 1480 | "dev-master": "5.1-dev" 1481 | } 1482 | }, 1483 | "autoload": { 1484 | "psr-4": { 1485 | "Symfony\\Component\\HttpKernel\\": "" 1486 | }, 1487 | "exclude-from-classmap": [ 1488 | "/Tests/" 1489 | ] 1490 | }, 1491 | "notification-url": "https://packagist.org/downloads/", 1492 | "license": [ 1493 | "MIT" 1494 | ], 1495 | "authors": [ 1496 | { 1497 | "name": "Fabien Potencier", 1498 | "email": "fabien@symfony.com" 1499 | }, 1500 | { 1501 | "name": "Symfony Community", 1502 | "homepage": "https://symfony.com/contributors" 1503 | } 1504 | ], 1505 | "description": "Symfony HttpKernel Component", 1506 | "homepage": "https://symfony.com", 1507 | "funding": [ 1508 | { 1509 | "url": "https://symfony.com/sponsor", 1510 | "type": "custom" 1511 | }, 1512 | { 1513 | "url": "https://github.com/fabpot", 1514 | "type": "github" 1515 | }, 1516 | { 1517 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1518 | "type": "tidelift" 1519 | } 1520 | ], 1521 | "time": "2020-06-15T13:51:38+00:00" 1522 | }, 1523 | { 1524 | "name": "symfony/polyfill-intl-grapheme", 1525 | "version": "v1.17.1", 1526 | "source": { 1527 | "type": "git", 1528 | "url": "https://github.com/symfony/polyfill-intl-grapheme.git", 1529 | "reference": "6e4dbcf5e81eba86e36731f94fe56b1726835846" 1530 | }, 1531 | "dist": { 1532 | "type": "zip", 1533 | "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/6e4dbcf5e81eba86e36731f94fe56b1726835846", 1534 | "reference": "6e4dbcf5e81eba86e36731f94fe56b1726835846", 1535 | "shasum": "" 1536 | }, 1537 | "require": { 1538 | "php": ">=5.3.3" 1539 | }, 1540 | "suggest": { 1541 | "ext-intl": "For best performance" 1542 | }, 1543 | "type": "library", 1544 | "extra": { 1545 | "branch-alias": { 1546 | "dev-master": "1.17-dev" 1547 | }, 1548 | "thanks": { 1549 | "name": "symfony/polyfill", 1550 | "url": "https://github.com/symfony/polyfill" 1551 | } 1552 | }, 1553 | "autoload": { 1554 | "psr-4": { 1555 | "Symfony\\Polyfill\\Intl\\Grapheme\\": "" 1556 | }, 1557 | "files": [ 1558 | "bootstrap.php" 1559 | ] 1560 | }, 1561 | "notification-url": "https://packagist.org/downloads/", 1562 | "license": [ 1563 | "MIT" 1564 | ], 1565 | "authors": [ 1566 | { 1567 | "name": "Nicolas Grekas", 1568 | "email": "p@tchwork.com" 1569 | }, 1570 | { 1571 | "name": "Symfony Community", 1572 | "homepage": "https://symfony.com/contributors" 1573 | } 1574 | ], 1575 | "description": "Symfony polyfill for intl's grapheme_* functions", 1576 | "homepage": "https://symfony.com", 1577 | "keywords": [ 1578 | "compatibility", 1579 | "grapheme", 1580 | "intl", 1581 | "polyfill", 1582 | "portable", 1583 | "shim" 1584 | ], 1585 | "funding": [ 1586 | { 1587 | "url": "https://symfony.com/sponsor", 1588 | "type": "custom" 1589 | }, 1590 | { 1591 | "url": "https://github.com/fabpot", 1592 | "type": "github" 1593 | }, 1594 | { 1595 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1596 | "type": "tidelift" 1597 | } 1598 | ], 1599 | "time": "2020-06-06T08:46:27+00:00" 1600 | }, 1601 | { 1602 | "name": "symfony/polyfill-intl-normalizer", 1603 | "version": "v1.17.1", 1604 | "source": { 1605 | "type": "git", 1606 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git", 1607 | "reference": "40309d1700e8f72447bb9e7b54af756eeea35620" 1608 | }, 1609 | "dist": { 1610 | "type": "zip", 1611 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/40309d1700e8f72447bb9e7b54af756eeea35620", 1612 | "reference": "40309d1700e8f72447bb9e7b54af756eeea35620", 1613 | "shasum": "" 1614 | }, 1615 | "require": { 1616 | "php": ">=5.3.3" 1617 | }, 1618 | "suggest": { 1619 | "ext-intl": "For best performance" 1620 | }, 1621 | "type": "library", 1622 | "extra": { 1623 | "branch-alias": { 1624 | "dev-master": "1.17-dev" 1625 | }, 1626 | "thanks": { 1627 | "name": "symfony/polyfill", 1628 | "url": "https://github.com/symfony/polyfill" 1629 | } 1630 | }, 1631 | "autoload": { 1632 | "psr-4": { 1633 | "Symfony\\Polyfill\\Intl\\Normalizer\\": "" 1634 | }, 1635 | "files": [ 1636 | "bootstrap.php" 1637 | ], 1638 | "classmap": [ 1639 | "Resources/stubs" 1640 | ] 1641 | }, 1642 | "notification-url": "https://packagist.org/downloads/", 1643 | "license": [ 1644 | "MIT" 1645 | ], 1646 | "authors": [ 1647 | { 1648 | "name": "Nicolas Grekas", 1649 | "email": "p@tchwork.com" 1650 | }, 1651 | { 1652 | "name": "Symfony Community", 1653 | "homepage": "https://symfony.com/contributors" 1654 | } 1655 | ], 1656 | "description": "Symfony polyfill for intl's Normalizer class and related functions", 1657 | "homepage": "https://symfony.com", 1658 | "keywords": [ 1659 | "compatibility", 1660 | "intl", 1661 | "normalizer", 1662 | "polyfill", 1663 | "portable", 1664 | "shim" 1665 | ], 1666 | "funding": [ 1667 | { 1668 | "url": "https://symfony.com/sponsor", 1669 | "type": "custom" 1670 | }, 1671 | { 1672 | "url": "https://github.com/fabpot", 1673 | "type": "github" 1674 | }, 1675 | { 1676 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1677 | "type": "tidelift" 1678 | } 1679 | ], 1680 | "time": "2020-06-14T14:40:37+00:00" 1681 | }, 1682 | { 1683 | "name": "symfony/polyfill-mbstring", 1684 | "version": "v1.17.1", 1685 | "source": { 1686 | "type": "git", 1687 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1688 | "reference": "7110338d81ce1cbc3e273136e4574663627037a7" 1689 | }, 1690 | "dist": { 1691 | "type": "zip", 1692 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7110338d81ce1cbc3e273136e4574663627037a7", 1693 | "reference": "7110338d81ce1cbc3e273136e4574663627037a7", 1694 | "shasum": "" 1695 | }, 1696 | "require": { 1697 | "php": ">=5.3.3" 1698 | }, 1699 | "suggest": { 1700 | "ext-mbstring": "For best performance" 1701 | }, 1702 | "type": "library", 1703 | "extra": { 1704 | "branch-alias": { 1705 | "dev-master": "1.17-dev" 1706 | }, 1707 | "thanks": { 1708 | "name": "symfony/polyfill", 1709 | "url": "https://github.com/symfony/polyfill" 1710 | } 1711 | }, 1712 | "autoload": { 1713 | "psr-4": { 1714 | "Symfony\\Polyfill\\Mbstring\\": "" 1715 | }, 1716 | "files": [ 1717 | "bootstrap.php" 1718 | ] 1719 | }, 1720 | "notification-url": "https://packagist.org/downloads/", 1721 | "license": [ 1722 | "MIT" 1723 | ], 1724 | "authors": [ 1725 | { 1726 | "name": "Nicolas Grekas", 1727 | "email": "p@tchwork.com" 1728 | }, 1729 | { 1730 | "name": "Symfony Community", 1731 | "homepage": "https://symfony.com/contributors" 1732 | } 1733 | ], 1734 | "description": "Symfony polyfill for the Mbstring extension", 1735 | "homepage": "https://symfony.com", 1736 | "keywords": [ 1737 | "compatibility", 1738 | "mbstring", 1739 | "polyfill", 1740 | "portable", 1741 | "shim" 1742 | ], 1743 | "funding": [ 1744 | { 1745 | "url": "https://symfony.com/sponsor", 1746 | "type": "custom" 1747 | }, 1748 | { 1749 | "url": "https://github.com/fabpot", 1750 | "type": "github" 1751 | }, 1752 | { 1753 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1754 | "type": "tidelift" 1755 | } 1756 | ], 1757 | "time": "2020-06-06T08:46:27+00:00" 1758 | }, 1759 | { 1760 | "name": "symfony/polyfill-php73", 1761 | "version": "v1.17.1", 1762 | "source": { 1763 | "type": "git", 1764 | "url": "https://github.com/symfony/polyfill-php73.git", 1765 | "reference": "fa0837fe02d617d31fbb25f990655861bb27bd1a" 1766 | }, 1767 | "dist": { 1768 | "type": "zip", 1769 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fa0837fe02d617d31fbb25f990655861bb27bd1a", 1770 | "reference": "fa0837fe02d617d31fbb25f990655861bb27bd1a", 1771 | "shasum": "" 1772 | }, 1773 | "require": { 1774 | "php": ">=5.3.3" 1775 | }, 1776 | "type": "library", 1777 | "extra": { 1778 | "branch-alias": { 1779 | "dev-master": "1.17-dev" 1780 | }, 1781 | "thanks": { 1782 | "name": "symfony/polyfill", 1783 | "url": "https://github.com/symfony/polyfill" 1784 | } 1785 | }, 1786 | "autoload": { 1787 | "psr-4": { 1788 | "Symfony\\Polyfill\\Php73\\": "" 1789 | }, 1790 | "files": [ 1791 | "bootstrap.php" 1792 | ], 1793 | "classmap": [ 1794 | "Resources/stubs" 1795 | ] 1796 | }, 1797 | "notification-url": "https://packagist.org/downloads/", 1798 | "license": [ 1799 | "MIT" 1800 | ], 1801 | "authors": [ 1802 | { 1803 | "name": "Nicolas Grekas", 1804 | "email": "p@tchwork.com" 1805 | }, 1806 | { 1807 | "name": "Symfony Community", 1808 | "homepage": "https://symfony.com/contributors" 1809 | } 1810 | ], 1811 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", 1812 | "homepage": "https://symfony.com", 1813 | "keywords": [ 1814 | "compatibility", 1815 | "polyfill", 1816 | "portable", 1817 | "shim" 1818 | ], 1819 | "funding": [ 1820 | { 1821 | "url": "https://symfony.com/sponsor", 1822 | "type": "custom" 1823 | }, 1824 | { 1825 | "url": "https://github.com/fabpot", 1826 | "type": "github" 1827 | }, 1828 | { 1829 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1830 | "type": "tidelift" 1831 | } 1832 | ], 1833 | "time": "2020-06-06T08:46:27+00:00" 1834 | }, 1835 | { 1836 | "name": "symfony/polyfill-php80", 1837 | "version": "v1.17.1", 1838 | "source": { 1839 | "type": "git", 1840 | "url": "https://github.com/symfony/polyfill-php80.git", 1841 | "reference": "4a5b6bba3259902e386eb80dd1956181ee90b5b2" 1842 | }, 1843 | "dist": { 1844 | "type": "zip", 1845 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4a5b6bba3259902e386eb80dd1956181ee90b5b2", 1846 | "reference": "4a5b6bba3259902e386eb80dd1956181ee90b5b2", 1847 | "shasum": "" 1848 | }, 1849 | "require": { 1850 | "php": ">=7.0.8" 1851 | }, 1852 | "type": "library", 1853 | "extra": { 1854 | "branch-alias": { 1855 | "dev-master": "1.17-dev" 1856 | }, 1857 | "thanks": { 1858 | "name": "symfony/polyfill", 1859 | "url": "https://github.com/symfony/polyfill" 1860 | } 1861 | }, 1862 | "autoload": { 1863 | "psr-4": { 1864 | "Symfony\\Polyfill\\Php80\\": "" 1865 | }, 1866 | "files": [ 1867 | "bootstrap.php" 1868 | ], 1869 | "classmap": [ 1870 | "Resources/stubs" 1871 | ] 1872 | }, 1873 | "notification-url": "https://packagist.org/downloads/", 1874 | "license": [ 1875 | "MIT" 1876 | ], 1877 | "authors": [ 1878 | { 1879 | "name": "Ion Bazan", 1880 | "email": "ion.bazan@gmail.com" 1881 | }, 1882 | { 1883 | "name": "Nicolas Grekas", 1884 | "email": "p@tchwork.com" 1885 | }, 1886 | { 1887 | "name": "Symfony Community", 1888 | "homepage": "https://symfony.com/contributors" 1889 | } 1890 | ], 1891 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 1892 | "homepage": "https://symfony.com", 1893 | "keywords": [ 1894 | "compatibility", 1895 | "polyfill", 1896 | "portable", 1897 | "shim" 1898 | ], 1899 | "funding": [ 1900 | { 1901 | "url": "https://symfony.com/sponsor", 1902 | "type": "custom" 1903 | }, 1904 | { 1905 | "url": "https://github.com/fabpot", 1906 | "type": "github" 1907 | }, 1908 | { 1909 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1910 | "type": "tidelift" 1911 | } 1912 | ], 1913 | "time": "2020-06-06T08:46:27+00:00" 1914 | }, 1915 | { 1916 | "name": "symfony/routing", 1917 | "version": "v5.1.2", 1918 | "source": { 1919 | "type": "git", 1920 | "url": "https://github.com/symfony/routing.git", 1921 | "reference": "bbd0ba121d623f66d165a55a108008968911f3eb" 1922 | }, 1923 | "dist": { 1924 | "type": "zip", 1925 | "url": "https://api.github.com/repos/symfony/routing/zipball/bbd0ba121d623f66d165a55a108008968911f3eb", 1926 | "reference": "bbd0ba121d623f66d165a55a108008968911f3eb", 1927 | "shasum": "" 1928 | }, 1929 | "require": { 1930 | "php": ">=7.2.5", 1931 | "symfony/deprecation-contracts": "^2.1", 1932 | "symfony/polyfill-php80": "^1.15" 1933 | }, 1934 | "conflict": { 1935 | "symfony/config": "<5.0", 1936 | "symfony/dependency-injection": "<4.4", 1937 | "symfony/yaml": "<4.4" 1938 | }, 1939 | "require-dev": { 1940 | "doctrine/annotations": "~1.2", 1941 | "psr/log": "~1.0", 1942 | "symfony/config": "^5.0", 1943 | "symfony/dependency-injection": "^4.4|^5.0", 1944 | "symfony/expression-language": "^4.4|^5.0", 1945 | "symfony/http-foundation": "^4.4|^5.0", 1946 | "symfony/yaml": "^4.4|^5.0" 1947 | }, 1948 | "suggest": { 1949 | "doctrine/annotations": "For using the annotation loader", 1950 | "symfony/config": "For using the all-in-one router or any loader", 1951 | "symfony/expression-language": "For using expression matching", 1952 | "symfony/http-foundation": "For using a Symfony Request object", 1953 | "symfony/yaml": "For using the YAML loader" 1954 | }, 1955 | "type": "library", 1956 | "extra": { 1957 | "branch-alias": { 1958 | "dev-master": "5.1-dev" 1959 | } 1960 | }, 1961 | "autoload": { 1962 | "psr-4": { 1963 | "Symfony\\Component\\Routing\\": "" 1964 | }, 1965 | "exclude-from-classmap": [ 1966 | "/Tests/" 1967 | ] 1968 | }, 1969 | "notification-url": "https://packagist.org/downloads/", 1970 | "license": [ 1971 | "MIT" 1972 | ], 1973 | "authors": [ 1974 | { 1975 | "name": "Fabien Potencier", 1976 | "email": "fabien@symfony.com" 1977 | }, 1978 | { 1979 | "name": "Symfony Community", 1980 | "homepage": "https://symfony.com/contributors" 1981 | } 1982 | ], 1983 | "description": "Symfony Routing Component", 1984 | "homepage": "https://symfony.com", 1985 | "keywords": [ 1986 | "router", 1987 | "routing", 1988 | "uri", 1989 | "url" 1990 | ], 1991 | "funding": [ 1992 | { 1993 | "url": "https://symfony.com/sponsor", 1994 | "type": "custom" 1995 | }, 1996 | { 1997 | "url": "https://github.com/fabpot", 1998 | "type": "github" 1999 | }, 2000 | { 2001 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2002 | "type": "tidelift" 2003 | } 2004 | ], 2005 | "time": "2020-06-10T11:49:58+00:00" 2006 | }, 2007 | { 2008 | "name": "symfony/service-contracts", 2009 | "version": "v2.1.3", 2010 | "source": { 2011 | "type": "git", 2012 | "url": "https://github.com/symfony/service-contracts.git", 2013 | "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442" 2014 | }, 2015 | "dist": { 2016 | "type": "zip", 2017 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/58c7475e5457c5492c26cc740cc0ad7464be9442", 2018 | "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442", 2019 | "shasum": "" 2020 | }, 2021 | "require": { 2022 | "php": ">=7.2.5", 2023 | "psr/container": "^1.0" 2024 | }, 2025 | "suggest": { 2026 | "symfony/service-implementation": "" 2027 | }, 2028 | "type": "library", 2029 | "extra": { 2030 | "branch-alias": { 2031 | "dev-master": "2.1-dev" 2032 | }, 2033 | "thanks": { 2034 | "name": "symfony/contracts", 2035 | "url": "https://github.com/symfony/contracts" 2036 | } 2037 | }, 2038 | "autoload": { 2039 | "psr-4": { 2040 | "Symfony\\Contracts\\Service\\": "" 2041 | } 2042 | }, 2043 | "notification-url": "https://packagist.org/downloads/", 2044 | "license": [ 2045 | "MIT" 2046 | ], 2047 | "authors": [ 2048 | { 2049 | "name": "Nicolas Grekas", 2050 | "email": "p@tchwork.com" 2051 | }, 2052 | { 2053 | "name": "Symfony Community", 2054 | "homepage": "https://symfony.com/contributors" 2055 | } 2056 | ], 2057 | "description": "Generic abstractions related to writing services", 2058 | "homepage": "https://symfony.com", 2059 | "keywords": [ 2060 | "abstractions", 2061 | "contracts", 2062 | "decoupling", 2063 | "interfaces", 2064 | "interoperability", 2065 | "standards" 2066 | ], 2067 | "funding": [ 2068 | { 2069 | "url": "https://symfony.com/sponsor", 2070 | "type": "custom" 2071 | }, 2072 | { 2073 | "url": "https://github.com/fabpot", 2074 | "type": "github" 2075 | }, 2076 | { 2077 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2078 | "type": "tidelift" 2079 | } 2080 | ], 2081 | "time": "2020-07-06T13:23:11+00:00" 2082 | }, 2083 | { 2084 | "name": "symfony/string", 2085 | "version": "v5.1.2", 2086 | "source": { 2087 | "type": "git", 2088 | "url": "https://github.com/symfony/string.git", 2089 | "reference": "ac70459db781108db7c6d8981dd31ce0e29e3298" 2090 | }, 2091 | "dist": { 2092 | "type": "zip", 2093 | "url": "https://api.github.com/repos/symfony/string/zipball/ac70459db781108db7c6d8981dd31ce0e29e3298", 2094 | "reference": "ac70459db781108db7c6d8981dd31ce0e29e3298", 2095 | "shasum": "" 2096 | }, 2097 | "require": { 2098 | "php": ">=7.2.5", 2099 | "symfony/polyfill-ctype": "~1.8", 2100 | "symfony/polyfill-intl-grapheme": "~1.0", 2101 | "symfony/polyfill-intl-normalizer": "~1.0", 2102 | "symfony/polyfill-mbstring": "~1.0", 2103 | "symfony/polyfill-php80": "~1.15" 2104 | }, 2105 | "require-dev": { 2106 | "symfony/error-handler": "^4.4|^5.0", 2107 | "symfony/http-client": "^4.4|^5.0", 2108 | "symfony/translation-contracts": "^1.1|^2", 2109 | "symfony/var-exporter": "^4.4|^5.0" 2110 | }, 2111 | "type": "library", 2112 | "extra": { 2113 | "branch-alias": { 2114 | "dev-master": "5.1-dev" 2115 | } 2116 | }, 2117 | "autoload": { 2118 | "psr-4": { 2119 | "Symfony\\Component\\String\\": "" 2120 | }, 2121 | "files": [ 2122 | "Resources/functions.php" 2123 | ], 2124 | "exclude-from-classmap": [ 2125 | "/Tests/" 2126 | ] 2127 | }, 2128 | "notification-url": "https://packagist.org/downloads/", 2129 | "license": [ 2130 | "MIT" 2131 | ], 2132 | "authors": [ 2133 | { 2134 | "name": "Nicolas Grekas", 2135 | "email": "p@tchwork.com" 2136 | }, 2137 | { 2138 | "name": "Symfony Community", 2139 | "homepage": "https://symfony.com/contributors" 2140 | } 2141 | ], 2142 | "description": "Symfony String component", 2143 | "homepage": "https://symfony.com", 2144 | "keywords": [ 2145 | "grapheme", 2146 | "i18n", 2147 | "string", 2148 | "unicode", 2149 | "utf-8", 2150 | "utf8" 2151 | ], 2152 | "funding": [ 2153 | { 2154 | "url": "https://symfony.com/sponsor", 2155 | "type": "custom" 2156 | }, 2157 | { 2158 | "url": "https://github.com/fabpot", 2159 | "type": "github" 2160 | }, 2161 | { 2162 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2163 | "type": "tidelift" 2164 | } 2165 | ], 2166 | "time": "2020-06-11T12:16:36+00:00" 2167 | }, 2168 | { 2169 | "name": "symfony/var-dumper", 2170 | "version": "v5.1.2", 2171 | "source": { 2172 | "type": "git", 2173 | "url": "https://github.com/symfony/var-dumper.git", 2174 | "reference": "46a942903059b0b05e601f00eb64179e05578c0f" 2175 | }, 2176 | "dist": { 2177 | "type": "zip", 2178 | "url": "https://api.github.com/repos/symfony/var-dumper/zipball/46a942903059b0b05e601f00eb64179e05578c0f", 2179 | "reference": "46a942903059b0b05e601f00eb64179e05578c0f", 2180 | "shasum": "" 2181 | }, 2182 | "require": { 2183 | "php": ">=7.2.5", 2184 | "symfony/polyfill-mbstring": "~1.0", 2185 | "symfony/polyfill-php80": "^1.15" 2186 | }, 2187 | "conflict": { 2188 | "phpunit/phpunit": "<5.4.3", 2189 | "symfony/console": "<4.4" 2190 | }, 2191 | "require-dev": { 2192 | "ext-iconv": "*", 2193 | "symfony/console": "^4.4|^5.0", 2194 | "symfony/process": "^4.4|^5.0", 2195 | "twig/twig": "^2.4|^3.0" 2196 | }, 2197 | "suggest": { 2198 | "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", 2199 | "ext-intl": "To show region name in time zone dump", 2200 | "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" 2201 | }, 2202 | "bin": [ 2203 | "Resources/bin/var-dump-server" 2204 | ], 2205 | "type": "library", 2206 | "extra": { 2207 | "branch-alias": { 2208 | "dev-master": "5.1-dev" 2209 | } 2210 | }, 2211 | "autoload": { 2212 | "files": [ 2213 | "Resources/functions/dump.php" 2214 | ], 2215 | "psr-4": { 2216 | "Symfony\\Component\\VarDumper\\": "" 2217 | }, 2218 | "exclude-from-classmap": [ 2219 | "/Tests/" 2220 | ] 2221 | }, 2222 | "notification-url": "https://packagist.org/downloads/", 2223 | "license": [ 2224 | "MIT" 2225 | ], 2226 | "authors": [ 2227 | { 2228 | "name": "Nicolas Grekas", 2229 | "email": "p@tchwork.com" 2230 | }, 2231 | { 2232 | "name": "Symfony Community", 2233 | "homepage": "https://symfony.com/contributors" 2234 | } 2235 | ], 2236 | "description": "Symfony mechanism for exploring and dumping PHP variables", 2237 | "homepage": "https://symfony.com", 2238 | "keywords": [ 2239 | "debug", 2240 | "dump" 2241 | ], 2242 | "funding": [ 2243 | { 2244 | "url": "https://symfony.com/sponsor", 2245 | "type": "custom" 2246 | }, 2247 | { 2248 | "url": "https://github.com/fabpot", 2249 | "type": "github" 2250 | }, 2251 | { 2252 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2253 | "type": "tidelift" 2254 | } 2255 | ], 2256 | "time": "2020-05-30T20:35:19+00:00" 2257 | }, 2258 | { 2259 | "name": "symfony/var-exporter", 2260 | "version": "v5.1.2", 2261 | "source": { 2262 | "type": "git", 2263 | "url": "https://github.com/symfony/var-exporter.git", 2264 | "reference": "eabaabfe1485ca955c5b53307eade15ccda57a15" 2265 | }, 2266 | "dist": { 2267 | "type": "zip", 2268 | "url": "https://api.github.com/repos/symfony/var-exporter/zipball/eabaabfe1485ca955c5b53307eade15ccda57a15", 2269 | "reference": "eabaabfe1485ca955c5b53307eade15ccda57a15", 2270 | "shasum": "" 2271 | }, 2272 | "require": { 2273 | "php": ">=7.2.5", 2274 | "symfony/polyfill-php80": "^1.15" 2275 | }, 2276 | "require-dev": { 2277 | "symfony/var-dumper": "^4.4.9|^5.0.9" 2278 | }, 2279 | "type": "library", 2280 | "extra": { 2281 | "branch-alias": { 2282 | "dev-master": "5.1-dev" 2283 | } 2284 | }, 2285 | "autoload": { 2286 | "psr-4": { 2287 | "Symfony\\Component\\VarExporter\\": "" 2288 | }, 2289 | "exclude-from-classmap": [ 2290 | "/Tests/" 2291 | ] 2292 | }, 2293 | "notification-url": "https://packagist.org/downloads/", 2294 | "license": [ 2295 | "MIT" 2296 | ], 2297 | "authors": [ 2298 | { 2299 | "name": "Nicolas Grekas", 2300 | "email": "p@tchwork.com" 2301 | }, 2302 | { 2303 | "name": "Symfony Community", 2304 | "homepage": "https://symfony.com/contributors" 2305 | } 2306 | ], 2307 | "description": "A blend of var_export() + serialize() to turn any serializable data structure to plain PHP code", 2308 | "homepage": "https://symfony.com", 2309 | "keywords": [ 2310 | "clone", 2311 | "construct", 2312 | "export", 2313 | "hydrate", 2314 | "instantiate", 2315 | "serialize" 2316 | ], 2317 | "funding": [ 2318 | { 2319 | "url": "https://symfony.com/sponsor", 2320 | "type": "custom" 2321 | }, 2322 | { 2323 | "url": "https://github.com/fabpot", 2324 | "type": "github" 2325 | }, 2326 | { 2327 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2328 | "type": "tidelift" 2329 | } 2330 | ], 2331 | "time": "2020-06-07T15:42:22+00:00" 2332 | }, 2333 | { 2334 | "name": "symfony/yaml", 2335 | "version": "v5.1.2", 2336 | "source": { 2337 | "type": "git", 2338 | "url": "https://github.com/symfony/yaml.git", 2339 | "reference": "ea342353a3ef4f453809acc4ebc55382231d4d23" 2340 | }, 2341 | "dist": { 2342 | "type": "zip", 2343 | "url": "https://api.github.com/repos/symfony/yaml/zipball/ea342353a3ef4f453809acc4ebc55382231d4d23", 2344 | "reference": "ea342353a3ef4f453809acc4ebc55382231d4d23", 2345 | "shasum": "" 2346 | }, 2347 | "require": { 2348 | "php": ">=7.2.5", 2349 | "symfony/deprecation-contracts": "^2.1", 2350 | "symfony/polyfill-ctype": "~1.8" 2351 | }, 2352 | "conflict": { 2353 | "symfony/console": "<4.4" 2354 | }, 2355 | "require-dev": { 2356 | "symfony/console": "^4.4|^5.0" 2357 | }, 2358 | "suggest": { 2359 | "symfony/console": "For validating YAML files using the lint command" 2360 | }, 2361 | "bin": [ 2362 | "Resources/bin/yaml-lint" 2363 | ], 2364 | "type": "library", 2365 | "extra": { 2366 | "branch-alias": { 2367 | "dev-master": "5.1-dev" 2368 | } 2369 | }, 2370 | "autoload": { 2371 | "psr-4": { 2372 | "Symfony\\Component\\Yaml\\": "" 2373 | }, 2374 | "exclude-from-classmap": [ 2375 | "/Tests/" 2376 | ] 2377 | }, 2378 | "notification-url": "https://packagist.org/downloads/", 2379 | "license": [ 2380 | "MIT" 2381 | ], 2382 | "authors": [ 2383 | { 2384 | "name": "Fabien Potencier", 2385 | "email": "fabien@symfony.com" 2386 | }, 2387 | { 2388 | "name": "Symfony Community", 2389 | "homepage": "https://symfony.com/contributors" 2390 | } 2391 | ], 2392 | "description": "Symfony Yaml Component", 2393 | "homepage": "https://symfony.com", 2394 | "funding": [ 2395 | { 2396 | "url": "https://symfony.com/sponsor", 2397 | "type": "custom" 2398 | }, 2399 | { 2400 | "url": "https://github.com/fabpot", 2401 | "type": "github" 2402 | }, 2403 | { 2404 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2405 | "type": "tidelift" 2406 | } 2407 | ], 2408 | "time": "2020-05-20T17:43:50+00:00" 2409 | } 2410 | ], 2411 | "packages-dev": [ 2412 | 2413 | ], 2414 | "aliases": [ 2415 | 2416 | ], 2417 | "minimum-stability": "stable", 2418 | "stability-flags": [ 2419 | 2420 | ], 2421 | "prefer-stable": false, 2422 | "prefer-lowest": false, 2423 | "platform": { 2424 | "php": "^7.2.5", 2425 | "ext-ctype": "*", 2426 | "ext-iconv": "*" 2427 | }, 2428 | "platform-dev": [ 2429 | 2430 | ], 2431 | "plugin-api-version": "1.1.0" 2432 | } -------------------------------------------------------------------------------- /config/bundles.php: -------------------------------------------------------------------------------- 1 | ['all' => true], 5 | ]; 6 | -------------------------------------------------------------------------------- /config/packages/cache.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | cache: 3 | # Unique name of your app: used to compute stable namespaces for cache keys. 4 | #prefix_seed: your_vendor_name/app_name 5 | 6 | # The "app" cache stores to the filesystem by default. 7 | # The data in this cache should persist between deploys. 8 | # Other options include: 9 | 10 | # Redis 11 | #app: cache.adapter.redis 12 | #default_redis_provider: redis://localhost 13 | 14 | # APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues) 15 | #app: cache.adapter.apcu 16 | 17 | # Namespaced pools use the above "app" backend by default 18 | #pools: 19 | #my.dedicated.cache: null 20 | -------------------------------------------------------------------------------- /config/packages/framework.yaml: -------------------------------------------------------------------------------- 1 | # see https://symfony.com/doc/current/reference/configuration/framework.html 2 | framework: 3 | secret: '%env(APP_SECRET)%' 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: null 11 | cookie_secure: auto 12 | cookie_samesite: lax 13 | 14 | #esi: true 15 | #fragments: true 16 | php_errors: 17 | log: true 18 | -------------------------------------------------------------------------------- /config/packages/prod/routing.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | router: 3 | strict_requirements: null 4 | -------------------------------------------------------------------------------- /config/packages/routing.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | router: 3 | utf8: true 4 | 5 | # Configure how to generate URLs in non-HTTP contexts, such as CLI commands. 6 | # See https://symfony.com/doc/current/routing.html#generating-urls-in-commands 7 | #default_uri: http://localhost 8 | -------------------------------------------------------------------------------- /config/packages/test/framework.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | test: true 3 | session: 4 | storage_id: session.storage.mock_file 5 | -------------------------------------------------------------------------------- /config/routes.yaml: -------------------------------------------------------------------------------- 1 | #index: 2 | # path: / 3 | # controller: App\Controller\DefaultController::index 4 | -------------------------------------------------------------------------------- /config/routes/dev/framework.yaml: -------------------------------------------------------------------------------- 1 | _errors: 2 | resource: '@FrameworkBundle/Resources/config/routing/errors.xml' 3 | prefix: /_error 4 | -------------------------------------------------------------------------------- /config/services.yaml: -------------------------------------------------------------------------------- 1 | # This file is the entry point to configure your own services. 2 | # Files in the packages/ subdirectory configure your dependencies. 3 | 4 | # Put parameters here that don't need to change on each machine where the app is deployed 5 | # https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration 6 | parameters: 7 | 8 | services: 9 | # default configuration for services in *this* file 10 | _defaults: 11 | autowire: true # Automatically injects dependencies in your services. 12 | autoconfigure: true # Automatically registers your services as commands, event subscribers, etc. 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/{DependencyInjection,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 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.5' 2 | 3 | services: 4 | docker-symfony-web: 5 | container_name: docker-symfony-web 6 | build: 7 | context: ./docker/nginx 8 | args: 9 | UID: $U_ID 10 | ports: 11 | - 300:80 12 | volumes: 13 | - ./public:/appdata/www/public 14 | networks: 15 | - docker-symfony-network 16 | depends_on: 17 | - docker-symfony-be 18 | 19 | docker-symfony-be: 20 | container_name: docker-symfony-be 21 | build: 22 | context: ./docker/php 23 | args: 24 | UID: $U_ID 25 | environment: 26 | PHP_IDE_CONFIG: serverName=Docker 27 | PHP_XDEBUG_ENABLED: 1 28 | XDEBUG_CONFIG: remote_host=172.17.0.1 remote_port=9005 # Linux users 29 | # XDEBUG_CONFIG: remote_host=host.docker.internal remote_port=9005 # MacOS users 30 | volumes: 31 | - ./:/appdata/www 32 | - ./docker/php/xdebug-linux.ini:/usr/local/etc/php/conf.d/xdebug.ini # Linux users 33 | # - ./docker/php/xdebug-macos.ini:/usr/local/etc/php/conf.d/xdebug.ini # MacOS users 34 | - ~/.ssh/id_rsa:/home/appuser/.ssh/id_rsa 35 | networks: 36 | - docker-symfony-network 37 | depends_on: 38 | - docker-symfony-db 39 | 40 | docker-symfony-db: 41 | container_name: docker-symfony-db 42 | image: mysql:8.0 43 | ports: 44 | - 40000:3306 45 | environment: 46 | MYSQL_DATABASE: docker_symfony_database 47 | MYSQL_USER: user 48 | MYSQL_PASSWORD: password 49 | MYSQL_ROOT_PASSWORD: root 50 | command: mysqld --sql_mode="STRICT_ALL_TABLES,NO_ENGINE_SUBSTITUTION" 51 | volumes: 52 | - docker-symfony-database-data:/var/lib/mysql 53 | networks: 54 | - docker-symfony-network 55 | 56 | volumes: 57 | docker-symfony-database-data: 58 | 59 | networks: 60 | docker-symfony-network: 61 | external: true 62 | -------------------------------------------------------------------------------- /docker/nginx/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx:1.19 2 | 3 | ARG UID 4 | EXPOSE $UID 5 | 6 | RUN adduser -u ${UID} --disabled-password --gecos "" appuser 7 | 8 | COPY default.conf /etc/nginx/conf.d/ 9 | -------------------------------------------------------------------------------- /docker/nginx/default.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name localhost; 4 | root /appdata/www/public; 5 | 6 | location / { 7 | try_files $uri @rewriteapp; 8 | } 9 | 10 | location @rewriteapp { 11 | rewrite ^(.*)$ /index.php/$1 last; 12 | } 13 | 14 | location ~ ^/index\.php(/|$) { 15 | fastcgi_pass docker-symfony-be:9000; 16 | fastcgi_split_path_info ^(.+\.php)(/.*)$; 17 | include fastcgi_params; 18 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 19 | fastcgi_param HTTPS off; 20 | } 21 | 22 | error_log /var/log/nginx/symfony_error.log; 23 | access_log /var/log/nginx/symfony_access.log; 24 | } 25 | -------------------------------------------------------------------------------- /docker/php/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:7.4.6-fpm 2 | 3 | ARG UID 4 | EXPOSE $UID 5 | 6 | RUN adduser -u ${UID} --disabled-password --gecos "" appuser 7 | RUN mkdir /home/appuser/.ssh 8 | RUN chown -R appuser:appuser /home/appuser/ 9 | RUN echo "StrictHostKeyChecking no" >> /home/appuser/.ssh/config 10 | RUN echo "export COLUMNS=300" >> /home/appuser/.bashrc 11 | RUN echo "alias sf=/appdata/www/bin/console" >> /home/appuser/.bashrc 12 | 13 | COPY ./php.ini /usr/local/etc/php/php.ini 14 | 15 | RUN apt-get update \ 16 | && apt-get install -y git acl openssl openssh-client wget zip vim libssh-dev \ 17 | && apt-get install -y libpng-dev zlib1g-dev libzip-dev libxml2-dev libicu-dev \ 18 | && docker-php-ext-install intl pdo pdo_mysql zip gd soap bcmath sockets \ 19 | && pecl install xdebug \ 20 | && docker-php-ext-enable --ini-name 05-opcache.ini opcache xdebug 21 | 22 | RUN curl https://getcomposer.org/composer.phar -o /usr/bin/composer && chmod +x /usr/bin/composer 23 | RUN composer self-update 24 | 25 | RUN wget https://cs.symfony.com/download/php-cs-fixer-v2.phar -O php-cs-fixer 26 | RUN chmod a+x php-cs-fixer 27 | RUN mv php-cs-fixer /usr/local/bin/php-cs-fixer 28 | 29 | RUN mkdir -p /appdata/www 30 | 31 | WORKDIR /appdata/www 32 | -------------------------------------------------------------------------------- /docker/php/php.ini: -------------------------------------------------------------------------------- 1 | date.timezone = UTC 2 | session.auto_start = Off 3 | short_open_tag = Off 4 | memory_limit = 512M 5 | 6 | opcache.max_accelerated_files = 20000 7 | realpath_cache_size = 4096K 8 | realpath_cache_ttl = 600 9 | 10 | upload_max_filesize = 7M 11 | post_max_size = 40M 12 | -------------------------------------------------------------------------------- /docker/php/xdebug-linux.ini: -------------------------------------------------------------------------------- 1 | xdebug.remote_enable=1 2 | xdebug.remote_host=172.17.0.1 3 | xdebug.remote_port=9005 4 | xdebug.remote_connect_back=0 5 | xdebug.idekey="PHPSTORM" 6 | -------------------------------------------------------------------------------- /docker/php/xdebug-macos.ini: -------------------------------------------------------------------------------- 1 | xdebug.remote_enable=1 2 | xdebug.remote_host=host.docker.internal 3 | xdebug.remote_port=9005 4 | xdebug.remote_connect_back=0 5 | xdebug.idekey="PHPSTORM" 6 | -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | bootEnv(dirname(__DIR__).'/.env'); 11 | 12 | if ($_SERVER['APP_DEBUG']) { 13 | umask(0000); 14 | 15 | Debug::enable(); 16 | } 17 | 18 | if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? false) { 19 | Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST); 20 | } 21 | 22 | if ($trustedHosts = $_SERVER['TRUSTED_HOSTS'] ?? false) { 23 | Request::setTrustedHosts([$trustedHosts]); 24 | } 25 | 26 | $kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); 27 | $request = Request::createFromGlobals(); 28 | $response = $kernel->handle($request); 29 | $response->send(); 30 | $kernel->terminate($request, $response); 31 | -------------------------------------------------------------------------------- /src/Controller/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/juanwilde/docker-symfony/b1f55eb5b9a3cd02ffc4185a8ed95c6f2b214707/src/Controller/.gitignore -------------------------------------------------------------------------------- /src/Kernel.php: -------------------------------------------------------------------------------- 1 | import('../config/{packages}/*.yaml'); 17 | $container->import('../config/{packages}/'.$this->environment.'/*.yaml'); 18 | 19 | if (is_file(\dirname(__DIR__).'/config/services.yaml')) { 20 | $container->import('../config/{services}.yaml'); 21 | $container->import('../config/{services}_'.$this->environment.'.yaml'); 22 | } elseif (is_file($path = \dirname(__DIR__).'/config/services.php')) { 23 | (require $path)($container->withPath($path), $this); 24 | } 25 | } 26 | 27 | protected function configureRoutes(RoutingConfigurator $routes): void 28 | { 29 | $routes->import('../config/{routes}/'.$this->environment.'/*.yaml'); 30 | $routes->import('../config/{routes}/*.yaml'); 31 | 32 | if (is_file(\dirname(__DIR__).'/config/routes.yaml')) { 33 | $routes->import('../config/{routes}.yaml'); 34 | } elseif (is_file($path = \dirname(__DIR__).'/config/routes.php')) { 35 | (require $path)($routes->withPath($path), $this); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /symfony.lock: -------------------------------------------------------------------------------- 1 | { 2 | "php": { 3 | "version": "7.4" 4 | }, 5 | "psr/cache": { 6 | "version": "1.0.1" 7 | }, 8 | "psr/container": { 9 | "version": "1.0.0" 10 | }, 11 | "psr/event-dispatcher": { 12 | "version": "1.0.0" 13 | }, 14 | "psr/log": { 15 | "version": "1.1.3" 16 | }, 17 | "symfony/cache": { 18 | "version": "v5.1.2" 19 | }, 20 | "symfony/cache-contracts": { 21 | "version": "v2.1.3" 22 | }, 23 | "symfony/config": { 24 | "version": "v5.1.2" 25 | }, 26 | "symfony/console": { 27 | "version": "5.1", 28 | "recipe": { 29 | "repo": "github.com/symfony/recipes", 30 | "branch": "master", 31 | "version": "5.1", 32 | "ref": "c6d02bdfba9da13c22157520e32a602dbee8a75c" 33 | }, 34 | "files": [ 35 | "bin/console" 36 | ] 37 | }, 38 | "symfony/dependency-injection": { 39 | "version": "v5.1.2" 40 | }, 41 | "symfony/deprecation-contracts": { 42 | "version": "v2.1.3" 43 | }, 44 | "symfony/dotenv": { 45 | "version": "v5.1.2" 46 | }, 47 | "symfony/error-handler": { 48 | "version": "v5.1.2" 49 | }, 50 | "symfony/event-dispatcher": { 51 | "version": "v5.1.2" 52 | }, 53 | "symfony/event-dispatcher-contracts": { 54 | "version": "v2.1.3" 55 | }, 56 | "symfony/filesystem": { 57 | "version": "v5.1.2" 58 | }, 59 | "symfony/finder": { 60 | "version": "v5.1.2" 61 | }, 62 | "symfony/flex": { 63 | "version": "1.0", 64 | "recipe": { 65 | "repo": "github.com/symfony/recipes", 66 | "branch": "master", 67 | "version": "1.0", 68 | "ref": "c0eeb50665f0f77226616b6038a9b06c03752d8e" 69 | }, 70 | "files": [ 71 | ".env" 72 | ] 73 | }, 74 | "symfony/framework-bundle": { 75 | "version": "5.1", 76 | "recipe": { 77 | "repo": "github.com/symfony/recipes", 78 | "branch": "master", 79 | "version": "5.1", 80 | "ref": "ffcb76bab779154c0a7d8cddb9f448c2c45a4e50" 81 | }, 82 | "files": [ 83 | "config/packages/cache.yaml", 84 | "config/packages/framework.yaml", 85 | "config/packages/test/framework.yaml", 86 | "config/routes/dev/framework.yaml", 87 | "config/services.yaml", 88 | "public/index.php", 89 | "src/Controller/.gitignore", 90 | "src/Kernel.php" 91 | ] 92 | }, 93 | "symfony/http-foundation": { 94 | "version": "v5.1.2" 95 | }, 96 | "symfony/http-kernel": { 97 | "version": "v5.1.2" 98 | }, 99 | "symfony/polyfill-intl-grapheme": { 100 | "version": "v1.17.1" 101 | }, 102 | "symfony/polyfill-intl-normalizer": { 103 | "version": "v1.17.1" 104 | }, 105 | "symfony/polyfill-mbstring": { 106 | "version": "v1.17.1" 107 | }, 108 | "symfony/polyfill-php73": { 109 | "version": "v1.17.1" 110 | }, 111 | "symfony/polyfill-php80": { 112 | "version": "v1.17.1" 113 | }, 114 | "symfony/routing": { 115 | "version": "5.1", 116 | "recipe": { 117 | "repo": "github.com/symfony/recipes", 118 | "branch": "master", 119 | "version": "5.1", 120 | "ref": "b4f3e7c95e38b606eef467e8a42a8408fc460c43" 121 | }, 122 | "files": [ 123 | "config/packages/prod/routing.yaml", 124 | "config/packages/routing.yaml", 125 | "config/routes.yaml" 126 | ] 127 | }, 128 | "symfony/service-contracts": { 129 | "version": "v2.1.3" 130 | }, 131 | "symfony/string": { 132 | "version": "v5.1.2" 133 | }, 134 | "symfony/var-dumper": { 135 | "version": "v5.1.2" 136 | }, 137 | "symfony/var-exporter": { 138 | "version": "v5.1.2" 139 | }, 140 | "symfony/yaml": { 141 | "version": "v5.1.2" 142 | } 143 | } --------------------------------------------------------------------------------