From 0b7d89a030e2b3d53724d77a31306ed5a1d01271 Mon Sep 17 00:00:00 2001 From: Oleksandr Kurakin Date: Wed, 13 May 2020 22:03:43 +0200 Subject: [PATCH 1/8] init --- .env | 33 + .env.test | 5 + .gitignore | 16 + .idea/.gitignore | 8 + .idea/inspectionProfiles/Project_Default.xml | 1156 +++ .idea/misc.xml | 6 + .idea/modules.xml | 9 + .idea/php.xml | 116 + .idea/symfony2.xml | 9 + .idea/symfony_forms_api.iml | 122 + .idea/vcs.xml | 7 + Dockerfile | 110 + bin/console | 42 + bin/phpunit | 13 + composer.json | 84 + composer.lock | 7766 ++++++++++++++++++ config/bootstrap.php | 23 + config/bundles.php | 15 + config/packages/cache.yaml | 19 + config/packages/dev/debug.yaml | 4 + config/packages/dev/monolog.yaml | 19 + config/packages/dev/web_profiler.yaml | 6 + config/packages/doctrine.yaml | 17 + config/packages/doctrine_migrations.yaml | 5 + config/packages/framework.yaml | 16 + config/packages/mailer.yaml | 3 + config/packages/notifier.yaml | 16 + config/packages/prod/doctrine.yaml | 20 + config/packages/prod/monolog.yaml | 26 + config/packages/prod/routing.yaml | 3 + config/packages/routing.yaml | 3 + config/packages/security.yaml | 23 + config/packages/sensio_framework_extra.yaml | 3 + config/packages/test/framework.yaml | 4 + config/packages/test/monolog.yaml | 12 + config/packages/test/twig.yaml | 2 + config/packages/test/validator.yaml | 3 + config/packages/test/web_profiler.yaml | 6 + config/packages/translation.yaml | 6 + config/packages/twig.yaml | 2 + config/packages/validator.yaml | 8 + config/routes.yaml | 3 + config/routes/annotations.yaml | 7 + config/routes/dev/framework.yaml | 3 + config/routes/dev/web_profiler.yaml | 7 + config/services.yaml | 27 + docker-compose.yml | 53 + docker.sh | 22 + docker/nginx/conf.d/default.conf | 60 + docker/php/docker-entrypoint.sh | 29 + docker/php/php-cli.ini | 16 + docker/php/php.ini | 15 + docker/php/xdebug.ini | 8 + phpunit.xml.dist | 33 + public/index.php | 27 + src/Controller/.gitignore | 0 src/Entity/.gitignore | 0 src/Kernel.php | 54 + src/Migrations/.gitignore | 0 src/Repository/.gitignore | 0 symfony.lock | 520 ++ templates/base.html.twig | 12 + tests/bootstrap.php | 11 + translations/.gitignore | 0 64 files changed, 10673 insertions(+) create mode 100644 .env create mode 100644 .env.test create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/php.xml create mode 100644 .idea/symfony2.xml create mode 100644 .idea/symfony_forms_api.iml create mode 100644 .idea/vcs.xml create mode 100644 Dockerfile create mode 100755 bin/console create mode 100755 bin/phpunit create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 config/bootstrap.php create mode 100644 config/bundles.php create mode 100644 config/packages/cache.yaml create mode 100644 config/packages/dev/debug.yaml create mode 100644 config/packages/dev/monolog.yaml create mode 100644 config/packages/dev/web_profiler.yaml create mode 100644 config/packages/doctrine.yaml create mode 100644 config/packages/doctrine_migrations.yaml create mode 100644 config/packages/framework.yaml create mode 100644 config/packages/mailer.yaml create mode 100644 config/packages/notifier.yaml create mode 100644 config/packages/prod/doctrine.yaml create mode 100644 config/packages/prod/monolog.yaml create mode 100644 config/packages/prod/routing.yaml create mode 100644 config/packages/routing.yaml create mode 100644 config/packages/security.yaml create mode 100644 config/packages/sensio_framework_extra.yaml create mode 100644 config/packages/test/framework.yaml create mode 100644 config/packages/test/monolog.yaml create mode 100644 config/packages/test/twig.yaml create mode 100644 config/packages/test/validator.yaml create mode 100644 config/packages/test/web_profiler.yaml create mode 100644 config/packages/translation.yaml create mode 100644 config/packages/twig.yaml create mode 100644 config/packages/validator.yaml create mode 100644 config/routes.yaml create mode 100644 config/routes/annotations.yaml create mode 100644 config/routes/dev/framework.yaml create mode 100644 config/routes/dev/web_profiler.yaml create mode 100644 config/services.yaml create mode 100644 docker-compose.yml create mode 100755 docker.sh create mode 100644 docker/nginx/conf.d/default.conf create mode 100755 docker/php/docker-entrypoint.sh create mode 100644 docker/php/php-cli.ini create mode 100644 docker/php/php.ini create mode 100644 docker/php/xdebug.ini create mode 100644 phpunit.xml.dist create mode 100644 public/index.php create mode 100644 src/Controller/.gitignore create mode 100644 src/Entity/.gitignore create mode 100644 src/Kernel.php create mode 100644 src/Migrations/.gitignore create mode 100644 src/Repository/.gitignore create mode 100644 symfony.lock create mode 100644 templates/base.html.twig create mode 100644 tests/bootstrap.php create mode 100644 translations/.gitignore diff --git a/.env b/.env new file mode 100644 index 0000000..37fe954 --- /dev/null +++ b/.env @@ -0,0 +1,33 @@ +# In all environments, the following files are loaded if they exist, +# the latter taking precedence over the former: +# +# * .env contains default values for the environment variables needed by the app +# * .env.local uncommitted file with local overrides +# * .env.$APP_ENV committed environment-specific defaults +# * .env.$APP_ENV.local uncommitted environment-specific overrides +# +# Real environment variables win over .env files. +# +# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES. +# +# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2). +# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration + +###> symfony/framework-bundle ### +APP_ENV=dev +APP_SECRET=50373636bdd097439dc76657d212924c +#TRUSTED_PROXIES=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 +#TRUSTED_HOSTS='^(localhost|example\.com)$' +###< symfony/framework-bundle ### + +###> symfony/mailer ### +# MAILER_DSN=smtp://localhost +###< symfony/mailer ### + +###> doctrine/doctrine-bundle ### +# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url +# For an SQLite database, use: "sqlite:///%kernel.project_dir%/var/data.db" +# For a PostgreSQL database, use: "postgresql://db_user:db_password@127.0.0.1:5432/db_name?serverVersion=11&charset=utf8" +# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml +DATABASE_URL='postgres://pr_user:nopassword@postgres/test' +###< doctrine/doctrine-bundle ### diff --git a/.env.test b/.env.test new file mode 100644 index 0000000..d048686 --- /dev/null +++ b/.env.test @@ -0,0 +1,5 @@ +# define your env variables for the test env here +KERNEL_CLASS='App\Kernel' +APP_SECRET='$ecretf0rt3st' +SYMFONY_DEPRECATIONS_HELPER=999999 +PANTHER_APP_ENV=panther diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eaa3cd3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ + +###> symfony/framework-bundle ### +/.env.local +/.env.local.php +/.env.*.local +/config/secrets/prod/prod.decrypt.private.php +/public/bundles/ +/var/ +/vendor/ +###< symfony/framework-bundle ### + +###> symfony/phpunit-bridge ### +.phpunit +.phpunit.result.cache +/phpunit.xml +###< symfony/phpunit-bridge ### diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..73f69e0 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..2b1a086 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,1156 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..28a804d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..d274976 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml new file mode 100644 index 0000000..3254980 --- /dev/null +++ b/.idea/php.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/symfony2.xml b/.idea/symfony2.xml new file mode 100644 index 0000000..d742223 --- /dev/null +++ b/.idea/symfony2.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/.idea/symfony_forms_api.iml b/.idea/symfony_forms_api.iml new file mode 100644 index 0000000..1711b1e --- /dev/null +++ b/.idea/symfony_forms_api.iml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9b1da94 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..453be8f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,110 @@ +ARG PHP_VERSION=7.4.5 +ARG NGINX_VERSION=1.17 + +FROM php:${PHP_VERSION}-fpm-alpine AS app_php + +RUN apk add --no-cache \ + acl \ + file \ + gettext \ + git \ + ; + +ARG APCU_VERSION=5.1.18 +ARG XDEBUG_VERSION=2.9.4 +RUN set -eux; \ + apk add --no-cache --virtual .build-deps \ + $PHPIZE_DEPS \ + coreutils \ + freetype-dev \ + icu-dev \ + libjpeg-turbo-dev \ + libpng-dev \ + libtool \ + libwebp-dev \ + libzip-dev \ + zlib-dev \ + postgresql-libs \ + postgresql-dev \ + zip \ + ; \ + \ + docker-php-ext-configure gd --with-freetype --with-jpeg; \ + docker-php-ext-install -j$(nproc) \ + exif \ + gd \ + intl \ + pdo_pgsql \ + zip \ + ; \ + pecl install \ + apcu-${APCU_VERSION} \ + xdebug-${XDEBUG_VERSION} \ + ; \ + pecl clear-cache; \ + docker-php-ext-enable \ + apcu \ + opcache \ + ; \ + \ + runDeps="$( \ + scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \ + | tr ',' '\n' \ + | sort -u \ + | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ + )"; \ + apk add --no-cache --virtual .app-phpexts-rundeps $runDeps; \ + \ + apk del .build-deps + +COPY --from=composer:latest /usr/bin/composer /usr/bin/composer +COPY docker/php/php.ini /usr/local/etc/php/php.ini +COPY docker/php/php-cli.ini /usr/local/etc/php/php-cli.ini +COPY docker/php/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini + +# https://getcomposer.org/doc/03-cli.md#composer-allow-superuser +ENV COMPOSER_ALLOW_SUPERUSER=1 +RUN set -eux; \ + composer global require "hirak/prestissimo:^0.3" --prefer-dist --no-progress --no-suggest --classmap-authoritative; \ + composer clear-cache +ENV PATH="${PATH}:/root/.composer/vendor/bin" + +WORKDIR /srv/app + +ARG APP_ENV=prod + +# prevent the reinstallation of vendors at every changes in the source code +COPY composer.json composer.lock symfony.lock ./ +RUN set -eux; \ + composer install --prefer-dist --no-autoloader --no-scripts --no-progress --no-suggest; \ + composer clear-cache + +# copy only specifically what we need +COPY .env .env.prod .env.test ./ +COPY bin bin/ +COPY config config/ +COPY public public/ +COPY src src/ +COPY infra infra/ + +RUN set -eux; \ + mkdir -p var/cache var/log; \ + composer dump-autoload --classmap-authoritative; \ + APP_SECRET='' composer run-script post-install-cmd; \ + chmod +x bin/console; sync; +VOLUME /srv/app/var + +COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint +RUN chmod +x /usr/local/bin/docker-entrypoint + +ENTRYPOINT ["docker-entrypoint"] +CMD ["php-fpm"] + + +FROM nginx:${NGINX_VERSION}-alpine AS app_nginx + +COPY docker/nginx/conf.d/default.conf /etc/nginx/conf.d/ + +WORKDIR /srv/app + +COPY --from=app_php /srv/app/public public/ diff --git a/bin/console b/bin/console new file mode 100755 index 0000000..5de0e1c --- /dev/null +++ b/bin/console @@ -0,0 +1,42 @@ +#!/usr/bin/env php +getParameterOption(['--env', '-e'], null, true)) { + putenv('APP_ENV='.$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = $env); +} + +if ($input->hasParameterOption('--no-debug', true)) { + putenv('APP_DEBUG='.$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = '0'); +} + +require dirname(__DIR__).'/config/bootstrap.php'; + +if ($_SERVER['APP_DEBUG']) { + umask(0000); + + if (class_exists(Debug::class)) { + Debug::enable(); + } +} + +$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); +$application = new Application($kernel); +$application->run($input); diff --git a/bin/phpunit b/bin/phpunit new file mode 100755 index 0000000..4d1ed05 --- /dev/null +++ b/bin/phpunit @@ -0,0 +1,13 @@ +#!/usr/bin/env php +2.2,<2.4" + }, + "require-dev": { + "alcaeus/mongo-php-adapter": "^1.1", + "doctrine/coding-standard": "^6.0", + "mongodb/mongodb": "^1.1", + "phpunit/phpunit": "^7.0", + "predis/predis": "~1.0" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", + "homepage": "https://www.doctrine-project.org/projects/cache.html", + "keywords": [ + "abstraction", + "apcu", + "cache", + "caching", + "couchdb", + "memcached", + "php", + "redis", + "xcache" + ], + "time": "2019-11-29T15:36:20+00:00" + }, + { + "name": "doctrine/collections", + "version": "1.6.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7", + "reference": "6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan-shim": "^0.9.2", + "phpunit/phpunit": "^7.0", + "vimeo/psalm": "^3.2.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.", + "homepage": "https://www.doctrine-project.org/projects/collections.html", + "keywords": [ + "array", + "collections", + "iterators", + "php" + ], + "time": "2019-11-13T13:07:11+00:00" + }, + { + "name": "doctrine/common", + "version": "2.12.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/common.git", + "reference": "2053eafdf60c2172ee1373d1b9289ba1db7f1fc6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/common/zipball/2053eafdf60c2172ee1373d1b9289ba1db7f1fc6", + "reference": "2053eafdf60c2172ee1373d1b9289ba1db7f1fc6", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0", + "doctrine/cache": "^1.0", + "doctrine/collections": "^1.0", + "doctrine/event-manager": "^1.0", + "doctrine/inflector": "^1.0", + "doctrine/lexer": "^1.0", + "doctrine/persistence": "^1.1", + "doctrine/reflection": "^1.0", + "php": "^7.1" + }, + "require-dev": { + "doctrine/coding-standard": "^1.0", + "phpstan/phpstan": "^0.11", + "phpstan/phpstan-phpunit": "^0.11", + "phpunit/phpunit": "^7.0", + "squizlabs/php_codesniffer": "^3.0", + "symfony/phpunit-bridge": "^4.0.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.11.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, persistence interfaces, proxies, event system and much more.", + "homepage": "https://www.doctrine-project.org/projects/common.html", + "keywords": [ + "common", + "doctrine", + "php" + ], + "time": "2020-01-10T15:49:25+00:00" + }, + { + "name": "doctrine/dbal", + "version": "2.10.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/aab745e7b6b2de3b47019da81e7225e14dcfdac8", + "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8", + "shasum": "" + }, + "require": { + "doctrine/cache": "^1.0", + "doctrine/event-manager": "^1.0", + "ext-pdo": "*", + "php": "^7.2" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "jetbrains/phpstorm-stubs": "^2019.1", + "nikic/php-parser": "^4.4", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^8.4.1", + "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", + "vimeo/psalm": "^3.11" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.10.x-dev", + "dev-develop": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlanywhere", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", + "type": "tidelift" + } + ], + "time": "2020-04-20T17:19:26+00:00" + }, + { + "name": "doctrine/doctrine-bundle", + "version": "2.0.8", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineBundle.git", + "reference": "b0e0deb6e700438401ede433a15a6372d2285202" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/b0e0deb6e700438401ede433a15a6372d2285202", + "reference": "b0e0deb6e700438401ede433a15a6372d2285202", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^2.9.0", + "doctrine/persistence": "^1.3.3", + "jdorn/sql-formatter": "^1.2.16", + "php": "^7.1", + "symfony/cache": "^4.3.3|^5.0", + "symfony/config": "^4.3.3|^5.0", + "symfony/console": "^3.4.30|^4.3.3|^5.0", + "symfony/dependency-injection": "^4.3.3|^5.0", + "symfony/doctrine-bridge": "^4.3.7|^5.0", + "symfony/framework-bundle": "^3.4.30|^4.3.3|^5.0", + "symfony/service-contracts": "^1.1.1|^2.0" + }, + "conflict": { + "doctrine/orm": "<2.6", + "twig/twig": "<1.34|>=2.0,<2.4" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "doctrine/orm": "^2.6", + "ocramius/proxy-manager": "^2.1", + "phpunit/phpunit": "^7.5", + "symfony/phpunit-bridge": "^4.2", + "symfony/property-info": "^4.3.3|^5.0", + "symfony/proxy-manager-bridge": "^3.4|^4.3.3|^5.0", + "symfony/twig-bridge": "^3.4.30|^4.3.3|^5.0", + "symfony/validator": "^3.4.30|^4.3.3|^5.0", + "symfony/web-profiler-bundle": "^3.4.30|^4.3.3|^5.0", + "symfony/yaml": "^3.4.30|^4.3.3|^5.0", + "twig/twig": "^1.34|^2.12" + }, + "suggest": { + "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", + "symfony/web-profiler-bundle": "To use the data collector." + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\DoctrineBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Doctrine Project", + "homepage": "http://www.doctrine-project.org/" + } + ], + "description": "Symfony DoctrineBundle", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database", + "dbal", + "orm", + "persistence" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-bundle", + "type": "tidelift" + } + ], + "time": "2020-04-23T10:52:09+00:00" + }, + { + "name": "doctrine/doctrine-migrations-bundle", + "version": "2.1.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", + "reference": "856437e8de96a70233e1f0cc2352fc8dd15a899d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/856437e8de96a70233e1f0cc2352fc8dd15a899d", + "reference": "856437e8de96a70233e1f0cc2352fc8dd15a899d", + "shasum": "" + }, + "require": { + "doctrine/doctrine-bundle": "~1.0|~2.0", + "doctrine/migrations": "^2.2", + "php": "^7.1", + "symfony/framework-bundle": "~3.4|~4.0|~5.0" + }, + "require-dev": { + "doctrine/coding-standard": "^5.0", + "mikey179/vfsstream": "^1.6", + "phpstan/phpstan": "^0.9.2", + "phpstan/phpstan-strict-rules": "^0.9", + "phpunit/phpunit": "^6.4|^7.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\MigrationsBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Doctrine Project", + "homepage": "http://www.doctrine-project.org" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony DoctrineMigrationsBundle", + "homepage": "https://www.doctrine-project.org", + "keywords": [ + "dbal", + "migrations", + "schema" + ], + "time": "2019-11-13T12:57:41+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "629572819973f13486371cb611386eb17851e85c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/629572819973f13486371cb611386eb17851e85c", + "reference": "629572819973f13486371cb611386eb17851e85c", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "conflict": { + "doctrine/common": "<2.9@dev" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "time": "2019-11-10T09:48:07+00:00" + }, + { + "name": "doctrine/inflector", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "ab5de36233a1995f9c776c741b803eb8207aebef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/ab5de36233a1995f9c776c741b803eb8207aebef", + "reference": "ab5de36233a1995f9c776c741b803eb8207aebef", + "shasum": "" + }, + "require": { + "php": "^7.2" + }, + "require-dev": { + "doctrine/coding-standard": "^7.0", + "phpstan/phpstan": "^0.11", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-strict-rules": "^0.11", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector", + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2020-05-06T11:01:57+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", + "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2019-10-21T16:45:58+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", + "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", + "shasum": "" + }, + "require": { + "php": "^7.2" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11.8", + "phpunit/phpunit": "^8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "time": "2019-10-30T14:39:59+00:00" + }, + { + "name": "doctrine/migrations", + "version": "2.2.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/migrations.git", + "reference": "a3987131febeb0e9acb3c47ab0df0af004588934" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/a3987131febeb0e9acb3c47ab0df0af004588934", + "reference": "a3987131febeb0e9acb3c47ab0df0af004588934", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^2.9", + "ocramius/package-versions": "^1.3", + "ocramius/proxy-manager": "^2.0.2", + "php": "^7.1", + "symfony/console": "^3.4||^4.0||^5.0", + "symfony/stopwatch": "^3.4||^4.0||^5.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "doctrine/orm": "^2.6", + "ext-pdo_sqlite": "*", + "jdorn/sql-formatter": "^1.1", + "mikey179/vfsstream": "^1.6", + "phpstan/phpstan": "^0.10", + "phpstan/phpstan-deprecation-rules": "^0.10", + "phpstan/phpstan-phpunit": "^0.10", + "phpstan/phpstan-strict-rules": "^0.10", + "phpunit/phpunit": "^7.0", + "symfony/process": "^3.4||^4.0||^5.0", + "symfony/yaml": "^3.4||^4.0||^5.0" + }, + "suggest": { + "jdorn/sql-formatter": "Allows to generate formatted SQL with the diff command.", + "symfony/yaml": "Allows the use of yaml for migration configuration files." + }, + "bin": [ + "bin/doctrine-migrations" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Migrations\\": "lib/Doctrine/Migrations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Michael Simonson", + "email": "contact@mikesimonson.com" + } + ], + "description": "PHP Doctrine Migrations project offer additional functionality on top of the database abstraction layer (DBAL) for versioning your database schema and easily deploying changes to it. It is a very easy to use and a powerful tool.", + "homepage": "https://www.doctrine-project.org/projects/migrations.html", + "keywords": [ + "database", + "dbal", + "migrations", + "php" + ], + "time": "2019-12-04T06:09:14+00:00" + }, + { + "name": "doctrine/orm", + "version": "v2.7.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/orm.git", + "reference": "dafe298ce5d0b995ebe1746670704c0a35868a6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/orm/zipball/dafe298ce5d0b995ebe1746670704c0a35868a6a", + "reference": "dafe298ce5d0b995ebe1746670704c0a35868a6a", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.8", + "doctrine/cache": "^1.9.1", + "doctrine/collections": "^1.5", + "doctrine/common": "^2.11", + "doctrine/dbal": "^2.9.3", + "doctrine/event-manager": "^1.1", + "doctrine/instantiator": "^1.3", + "doctrine/persistence": "^1.2", + "ext-pdo": "*", + "ocramius/package-versions": "^1.2", + "php": "^7.1", + "symfony/console": "^3.0|^4.0|^5.0" + }, + "require-dev": { + "doctrine/coding-standard": "^5.0", + "phpunit/phpunit": "^7.5", + "symfony/yaml": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" + }, + "bin": [ + "bin/doctrine" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\ORM\\": "lib/Doctrine/ORM" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "Object-Relational-Mapper for PHP", + "homepage": "https://www.doctrine-project.org/projects/orm.html", + "keywords": [ + "database", + "orm" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine/orm", + "type": "tidelift" + } + ], + "time": "2020-03-19T06:41:02+00:00" + }, + { + "name": "doctrine/persistence", + "version": "1.3.7", + "source": { + "type": "git", + "url": "https://github.com/doctrine/persistence.git", + "reference": "0af483f91bada1c9ded6c2cfd26ab7d5ab2094e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/0af483f91bada1c9ded6c2cfd26ab7d5ab2094e0", + "reference": "0af483f91bada1c9ded6c2cfd26ab7d5ab2094e0", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0", + "doctrine/cache": "^1.0", + "doctrine/collections": "^1.0", + "doctrine/event-manager": "^1.0", + "doctrine/reflection": "^1.2", + "php": "^7.1" + }, + "conflict": { + "doctrine/common": "<2.10@dev" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common", + "Doctrine\\Persistence\\": "lib/Doctrine/Persistence" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", + "homepage": "https://doctrine-project.org/projects/persistence.html", + "keywords": [ + "mapper", + "object", + "odm", + "orm", + "persistence" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fpersistence", + "type": "tidelift" + } + ], + "time": "2020-03-21T15:13:52+00:00" + }, + { + "name": "doctrine/reflection", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/reflection.git", + "reference": "55e71912dfcd824b2fdd16f2d9afe15684cfce79" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/reflection/zipball/55e71912dfcd824b2fdd16f2d9afe15684cfce79", + "reference": "55e71912dfcd824b2fdd16f2d9afe15684cfce79", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0", + "ext-tokenizer": "*", + "php": "^7.1" + }, + "conflict": { + "doctrine/common": "<2.9" + }, + "require-dev": { + "doctrine/coding-standard": "^5.0", + "doctrine/common": "^2.10", + "phpstan/phpstan": "^0.11.0", + "phpstan/phpstan-phpunit": "^0.11.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Reflection project is a simple library used by the various Doctrine projects which adds some additional functionality on top of the reflection functionality that comes with PHP. It allows you to get the reflection information about classes, methods and properties statically.", + "homepage": "https://www.doctrine-project.org/projects/reflection.html", + "keywords": [ + "reflection", + "static" + ], + "time": "2020-03-27T11:06:43+00:00" + }, + { + "name": "egulias/email-validator", + "version": "2.1.17", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "ade6887fd9bd74177769645ab5c474824f8a418a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ade6887fd9bd74177769645ab5c474824f8a418a", + "reference": "ade6887fd9bd74177769645ab5c474824f8a418a", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.10" + }, + "require-dev": { + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "EmailValidator" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "time": "2020-02-13T22:36:52+00:00" + }, + { + "name": "jdorn/sql-formatter", + "version": "v1.2.17", + "source": { + "type": "git", + "url": "https://github.com/jdorn/sql-formatter.git", + "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc", + "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc", + "shasum": "" + }, + "require": { + "php": ">=5.2.4" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "lib" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Dorn", + "email": "jeremy@jeremydorn.com", + "homepage": "http://jeremydorn.com/" + } + ], + "description": "a PHP SQL highlighting library", + "homepage": "https://github.com/jdorn/sql-formatter/", + "keywords": [ + "highlight", + "sql" + ], + "time": "2014-01-12T16:20:24+00:00" + }, + { + "name": "laminas/laminas-code", + "version": "3.4.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-code.git", + "reference": "1cb8f203389ab1482bf89c0e70a04849bacd7766" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/1cb8f203389ab1482bf89c0e70a04849bacd7766", + "reference": "1cb8f203389ab1482bf89c0e70a04849bacd7766", + "shasum": "" + }, + "require": { + "laminas/laminas-eventmanager": "^2.6 || ^3.0", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.1" + }, + "conflict": { + "phpspec/prophecy": "<1.9.0" + }, + "replace": { + "zendframework/zend-code": "self.version" + }, + "require-dev": { + "doctrine/annotations": "^1.7", + "ext-phar": "*", + "laminas/laminas-coding-standard": "^1.0", + "laminas/laminas-stdlib": "^2.7 || ^3.0", + "phpunit/phpunit": "^7.5.16 || ^8.4" + }, + "suggest": { + "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", + "laminas/laminas-stdlib": "Laminas\\Stdlib component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4.x-dev", + "dev-develop": "3.5.x-dev", + "dev-dev-4.0": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laminas\\Code\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Extensions to the PHP Reflection API, static code scanning, and code generation", + "homepage": "https://laminas.dev", + "keywords": [ + "code", + "laminas" + ], + "time": "2019-12-31T16:28:24+00:00" + }, + { + "name": "laminas/laminas-eventmanager", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-eventmanager.git", + "reference": "ce4dc0bdf3b14b7f9815775af9dfee80a63b4748" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/ce4dc0bdf3b14b7f9815775af9dfee80a63b4748", + "reference": "ce4dc0bdf3b14b7f9815775af9dfee80a63b4748", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0" + }, + "replace": { + "zendframework/zend-eventmanager": "self.version" + }, + "require-dev": { + "athletic/athletic": "^0.1", + "container-interop/container-interop": "^1.1.0", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-stdlib": "^2.7.3 || ^3.0", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2" + }, + "suggest": { + "container-interop/container-interop": "^1.1.0, to use the lazy listeners feature", + "laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev", + "dev-develop": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Laminas\\EventManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Trigger and listen to events within a PHP application", + "homepage": "https://laminas.dev", + "keywords": [ + "event", + "eventmanager", + "events", + "laminas" + ], + "time": "2019-12-31T16:44:52+00:00" + }, + { + "name": "laminas/laminas-zendframework-bridge", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-zendframework-bridge.git", + "reference": "bfbbdb6c998d50dbf69d2187cb78a5f1fa36e1e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/bfbbdb6c998d50dbf69d2187cb78a5f1fa36e1e9", + "reference": "bfbbdb6c998d50dbf69d2187cb78a5f1fa36e1e9", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev", + "dev-develop": "1.1.x-dev" + }, + "laminas": { + "module": "Laminas\\ZendFrameworkBridge" + } + }, + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Laminas\\ZendFrameworkBridge\\": "src//" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Alias legacy ZF class names to Laminas Project equivalents.", + "keywords": [ + "ZendFramework", + "autoloading", + "laminas", + "zf" + ], + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-04-03T16:01:00+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c861fcba2ca29404dc9e617eedd9eff4616986b8", + "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8", + "shasum": "" + }, + "require": { + "php": "^7.2", + "psr/log": "^1.0.1" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^6.0", + "graylog2/gelf-php": "^1.4.2", + "jakub-onderka/php-parallel-lint": "^0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpspec/prophecy": "^1.6.1", + "phpunit/phpunit": "^8.3", + "predis/predis": "^1.1", + "rollbar/rollbar": "^1.3", + "ruflin/elastica": ">=0.90 <3.0", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2019-12-20T14:22:59+00:00" + }, + { + "name": "ocramius/package-versions", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/Ocramius/PackageVersions.git", + "reference": "421679846270a5772534828013a93be709fb13df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/421679846270a5772534828013a93be709fb13df", + "reference": "421679846270a5772534828013a93be709fb13df", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0 || ^2.0", + "php": "^7.4.0" + }, + "require-dev": { + "composer/composer": "^1.9.3 || ^2.0@dev", + "doctrine/coding-standard": "^7.0.2", + "ext-zip": "^1.15.0", + "infection/infection": "^0.15.3", + "phpunit/phpunit": "^9.0.1", + "vimeo/psalm": "^3.9.3" + }, + "type": "composer-plugin", + "extra": { + "class": "PackageVersions\\Installer", + "branch-alias": { + "dev-master": "1.99.x-dev" + } + }, + "autoload": { + "psr-4": { + "PackageVersions\\": "src/PackageVersions" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ocramius/package-versions", + "type": "tidelift" + } + ], + "time": "2020-04-06T17:43:35+00:00" + }, + { + "name": "ocramius/proxy-manager", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/Ocramius/ProxyManager.git", + "reference": "ac1dd414fd114cfc0da9930e0ab46063c2f5e62a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/ac1dd414fd114cfc0da9930e0ab46063c2f5e62a", + "reference": "ac1dd414fd114cfc0da9930e0ab46063c2f5e62a", + "shasum": "" + }, + "require": { + "laminas/laminas-code": "^3.4.1", + "ocramius/package-versions": "^1.8.0", + "php": "~7.4.1", + "webimpress/safe-writer": "^2.0.1" + }, + "conflict": { + "doctrine/annotations": "<1.6.1", + "laminas/laminas-stdlib": "<3.2.1", + "zendframework/zend-stdlib": "<3.2.1" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0.0", + "ext-phar": "*", + "infection/infection": "^0.16.2", + "nikic/php-parser": "^4.4.0", + "phpbench/phpbench": "^0.17.0", + "phpunit/phpunit": "^9.1.1", + "slevomat/coding-standard": "^5.0.4", + "squizlabs/php_codesniffer": "^3.5.4", + "vimeo/psalm": "^3.11.1" + }, + "suggest": { + "laminas/laminas-json": "To have the JsonRpc adapter (Remote Object feature)", + "laminas/laminas-soap": "To have the Soap adapter (Remote Object feature)", + "laminas/laminas-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)", + "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "ProxyManager\\": "src/ProxyManager" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.io/" + } + ], + "description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies", + "homepage": "https://github.com/Ocramius/ProxyManager", + "keywords": [ + "aop", + "lazy loading", + "proxy", + "proxy pattern", + "service proxies" + ], + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager", + "type": "tidelift" + } + ], + "time": "2020-04-13T14:42:16+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2020-04-27T09:25:28+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "shasum": "" + }, + "require": { + "ext-filter": "^7.1", + "php": "^7.2", + "phpdocumentor/reflection-common": "^2.0", + "phpdocumentor/type-resolver": "^1.0", + "webmozart/assert": "^1" + }, + "require-dev": { + "doctrine/instantiator": "^1", + "mockery/mockery": "^1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2020-02-22T12:28:44+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "7462d5f123dfc080dfdf26897032a6513644fc95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95", + "reference": "7462d5f123dfc080dfdf26897032a6513644fc95", + "shasum": "" + }, + "require": { + "php": "^7.2", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "^7.2", + "mockery/mockery": "~1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "time": "2020-02-18T18:59:58+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/link", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/link.git", + "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562", + "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Link\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for HTTP links", + "keywords": [ + "http", + "http-link", + "link", + "psr", + "psr-13", + "rest" + ], + "time": "2016-10-28T16:06:13+00:00" + }, + { + "name": "psr/log", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2020-03-23T09:12:05+00:00" + }, + { + "name": "sensio/framework-extra-bundle", + "version": "v5.5.5", + "source": { + "type": "git", + "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", + "reference": "c76bb1c5c67840ecb6d9be8e9d8d7036e375e317" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/c76bb1c5c67840ecb6d9be8e9d8d7036e375e317", + "reference": "c76bb1c5c67840ecb6d9be8e9d8d7036e375e317", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0", + "php": ">=7.1.3", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/framework-bundle": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0" + }, + "conflict": { + "doctrine/doctrine-cache-bundle": "<1.3.1" + }, + "require-dev": { + "doctrine/doctrine-bundle": "^1.11|^2.0", + "doctrine/orm": "^2.5", + "nyholm/psr7": "^1.1", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/monolog-bridge": "^4.0|^5.0", + "symfony/monolog-bundle": "^3.2", + "symfony/phpunit-bridge": "^4.3.5|^5.0", + "symfony/psr-http-message-bridge": "^1.1", + "symfony/security-bundle": "^4.4|^5.0", + "symfony/twig-bundle": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0", + "twig/twig": "^1.34|^2.4|^3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "5.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "Sensio\\Bundle\\FrameworkExtraBundle\\": "src/" + }, + "exclude-from-classmap": [ + "/tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "This bundle provides a way to configure your controllers with annotations", + "keywords": [ + "annotations", + "controllers" + ], + "time": "2020-05-06T12:12:33+00:00" + }, + { + "name": "symfony/asset", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/asset.git", + "reference": "be35f49cf2cf1c54de30bc31d2c5ff3c1d880be8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/asset/zipball/be35f49cf2cf1c54de30bc31d2c5ff3c1d880be8", + "reference": "be35f49cf2cf1c54de30bc31d2c5ff3c1d880be8", + "shasum": "" + }, + "require": { + "php": "^7.2.5" + }, + "require-dev": { + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0" + }, + "suggest": { + "symfony/http-foundation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Asset\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Asset Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-12T14:40:17+00:00" + }, + { + "name": "symfony/cache", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "0c5f5b1882dc82b255a4bdead4ed3c7738cddc04" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/0c5f5b1882dc82b255a4bdead4ed3c7738cddc04", + "reference": "0c5f5b1882dc82b255a4bdead4ed3c7738cddc04", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "psr/cache": "~1.0", + "psr/log": "~1.0", + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/service-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "conflict": { + "doctrine/dbal": "<2.5", + "symfony/dependency-injection": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/var-dumper": "<4.4" + }, + "provide": { + "psr/cache-implementation": "1.0", + "psr/simple-cache-implementation": "1.0", + "symfony/cache-implementation": "1.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/cache": "~1.6", + "doctrine/dbal": "~2.5", + "predis/predis": "~1.1", + "psr/simple-cache": "^1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Cache component with PSR-6, PSR-16, and tags", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-28T17:58:55+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "23ed8bfc1a4115feca942cb5f1aacdf3dcdf3c16" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/23ed8bfc1a4115feca942cb5f1aacdf3dcdf3c16", + "reference": "23ed8bfc1a4115feca942cb5f1aacdf3dcdf3c16", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "psr/cache": "^1.0" + }, + "suggest": { + "symfony/cache-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-11-18T17:27:11+00:00" + }, + { + "name": "symfony/config", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "db1674e1a261148429f123871f30d211992294e7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/db1674e1a261148429f123871f30d211992294e7", + "reference": "db1674e1a261148429f123871f30d211992294e7", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/filesystem": "^4.4|^5.0", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<4.4" + }, + "require-dev": { + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-15T15:59:10+00:00" + }, + { + "name": "symfony/console", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/5fa1caadc8cdaa17bcfb25219f3b53fe294a9935", + "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "symfony/dependency-injection": "<4.4", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-30T11:42:42+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "92d8b3bd896a87cdd8aba0a3dd041bc072e8cfba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/92d8b3bd896a87cdd8aba0a3dd041bc072e8cfba", + "reference": "92d8b3bd896a87cdd8aba0a3dd041bc072e8cfba", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "psr/container": "^1.0", + "symfony/service-contracts": "^1.1.6|^2" + }, + "conflict": { + "symfony/config": "<5.0", + "symfony/finder": "<4.4", + "symfony/proxy-manager-bridge": "<4.4", + "symfony/yaml": "<4.4" + }, + "provide": { + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0" + }, + "require-dev": { + "symfony/config": "^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DependencyInjection Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-28T17:58:55+00:00" + }, + { + "name": "symfony/doctrine-bridge", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-bridge.git", + "reference": "013f4ce1a10c6aad81c4ad14466e49d802417f4f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/013f4ce1a10c6aad81c4ad14466e49d802417f4f", + "reference": "013f4ce1a10c6aad81c4ad14466e49d802417f4f", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "~1.0", + "doctrine/persistence": "^1.3", + "php": "^7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/dependency-injection": "<4.4", + "symfony/form": "<5", + "symfony/http-kernel": "<5", + "symfony/messenger": "<4.4", + "symfony/property-info": "<5", + "symfony/security-bundle": "<5", + "symfony/security-core": "<5", + "symfony/validator": "<5.0.2" + }, + "require-dev": { + "doctrine/annotations": "~1.7", + "doctrine/cache": "~1.6", + "doctrine/collections": "~1.0", + "doctrine/data-fixtures": "1.0.*", + "doctrine/dbal": "~2.4", + "doctrine/orm": "^2.6.3", + "doctrine/reflection": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/form": "^5.0", + "symfony/http-kernel": "^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.0", + "symfony/property-info": "^5.0", + "symfony/proxy-manager-bridge": "^4.4|^5.0", + "symfony/security-core": "^5.0", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/validator": "^5.0.2", + "symfony/var-dumper": "^4.4|^5.0" + }, + "suggest": { + "doctrine/data-fixtures": "", + "doctrine/dbal": "", + "doctrine/orm": "", + "symfony/form": "", + "symfony/property-info": "", + "symfony/validator": "" + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Doctrine\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Doctrine Bridge", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-12T16:45:47+00:00" + }, + { + "name": "symfony/dotenv", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/dotenv.git", + "reference": "28658ee990ea643c8111bac242d6ee5f3a15ef72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/28658ee990ea643c8111bac242d6ee5f3a15ef72", + "reference": "28658ee990ea643c8111bac242d6ee5f3a15ef72", + "shasum": "" + }, + "require": { + "php": "^7.2.5" + }, + "require-dev": { + "symfony/process": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Dotenv\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Registers environment variables from a .env file", + "homepage": "https://symfony.com", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-27T16:56:45+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "949ffc17c3ac3a9f8e6232220e2da33913c04ea4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/949ffc17c3ac3a9f8e6232220e2da33913c04ea4", + "reference": "949ffc17c3ac3a9f8e6232220e2da33913c04ea4", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "psr/log": "^1.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "require-dev": { + "symfony/http-kernel": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony ErrorHandler Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-30T14:14:32+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/24f40d95385774ed5c71dbf014edd047e2f2f3dc", + "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/event-dispatcher-contracts": "^2" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^4.4|^5.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-27T16:56:45+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "af23c2584d4577d54661c434446fb8fbed6025dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/af23c2584d4577d54661c434446fb8fbed6025dd", + "reference": "af23c2584d4577d54661c434446fb8fbed6025dd", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-11-18T17:27:11+00:00" + }, + { + "name": "symfony/expression-language", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/expression-language.git", + "reference": "b93755750b9e2a8d240bdf014de5b545105c5178" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/b93755750b9e2a8d240bdf014de5b545105c5178", + "reference": "b93755750b9e2a8d240bdf014de5b545105c5178", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/cache": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\ExpressionLanguage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony ExpressionLanguage Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-15T15:59:10+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "7cd0dafc4353a0f62e307df90b48466379c8cc91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/7cd0dafc4353a0f62e307df90b48466379c8cc91", + "reference": "7cd0dafc4353a0f62e307df90b48466379c8cc91", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-12T14:40:17+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/600a52c29afc0d1caa74acbec8d3095ca7e9910d", + "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d", + "shasum": "" + }, + "require": { + "php": "^7.2.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-27T16:56:45+00:00" + }, + { + "name": "symfony/flex", + "version": "v1.6.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/flex.git", + "reference": "89999fdaad52cab14637709f2d2ce25835a051e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/flex/zipball/89999fdaad52cab14637709f2d2ce25835a051e6", + "reference": "89999fdaad52cab14637709f2d2ce25835a051e6", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0", + "php": "^7.0" + }, + "require-dev": { + "composer/composer": "^1.0.2", + "symfony/dotenv": "^3.4|^4.0|^5.0", + "symfony/phpunit-bridge": "^3.4.19|^4.1.8|^5.0", + "symfony/process": "^2.7|^3.0|^4.0|^5.0" + }, + "type": "composer-plugin", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + }, + "class": "Symfony\\Flex\\Flex" + }, + "autoload": { + "psr-4": { + "Symfony\\Flex\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien.potencier@gmail.com" + } + ], + "description": "Composer plugin for Symfony", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-09T12:10:32+00:00" + }, + { + "name": "symfony/form", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/form.git", + "reference": "a3ec37026c13851565599522f7c1d26cdcdbf7dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/form/zipball/a3ec37026c13851565599522f7c1d26cdcdbf7dd", + "reference": "a3ec37026c13851565599522f7c1d26cdcdbf7dd", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/options-resolver": "^5.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/property-access": "^5.0", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<4.4", + "symfony/doctrine-bridge": "<4.4", + "symfony/framework-bundle": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/intl": "<4.4", + "symfony/translation": "<4.4", + "symfony/twig-bridge": "<4.4" + }, + "require-dev": { + "doctrine/collections": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/security-csrf": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/validator": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "suggest": { + "symfony/security-csrf": "For protecting forms against CSRF attacks.", + "symfony/twig-bridge": "For templating with Twig.", + "symfony/validator": "For form validation." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Form\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Form Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-28T17:58:55+00:00" + }, + { + "name": "symfony/framework-bundle", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "3fd5aec4bc84750752ba1f039829362fa071e037" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/3fd5aec4bc84750752ba1f039829362fa071e037", + "reference": "3fd5aec4bc84750752ba1f039829362fa071e037", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": "^7.2.5", + "symfony/cache": "^4.4|^5.0", + "symfony/config": "^5.0", + "symfony/dependency-injection": "^5.0.1", + "symfony/error-handler": "^4.4.1|^5.0.1", + "symfony/filesystem": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^5.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/routing": "^5.0" + }, + "conflict": { + "doctrine/persistence": "<1.3", + "phpdocumentor/reflection-docblock": "<3.0", + "phpdocumentor/type-resolver": "<0.2.1", + "phpunit/phpunit": "<5.4.3", + "symfony/asset": "<4.4", + "symfony/browser-kit": "<4.4", + "symfony/console": "<4.4", + "symfony/dom-crawler": "<4.4", + "symfony/dotenv": "<4.4", + "symfony/form": "<4.4", + "symfony/http-client": "<4.4", + "symfony/lock": "<4.4", + "symfony/mailer": "<4.4", + "symfony/messenger": "<4.4", + "symfony/mime": "<4.4", + "symfony/property-info": "<4.4", + "symfony/serializer": "<4.4", + "symfony/stopwatch": "<4.4", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<4.4", + "symfony/twig-bundle": "<4.4", + "symfony/validator": "<4.4", + "symfony/web-profiler-bundle": "<4.4", + "symfony/workflow": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "~1.7", + "doctrine/cache": "~1.0", + "paragonie/sodium_compat": "^1.8", + "phpdocumentor/reflection-docblock": "^3.0|^4.0", + "symfony/asset": "^4.4|^5.0", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/dotenv": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/form": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/mailer": "^4.4|^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/process": "^4.4|^5.0", + "symfony/property-info": "^4.4|^5.0", + "symfony/security-csrf": "^4.4|^5.0", + "symfony/security-http": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/string": "~5.0.0", + "symfony/translation": "^5.0", + "symfony/twig-bundle": "^4.4|^5.0", + "symfony/validator": "^4.4|^5.0", + "symfony/web-link": "^4.4|^5.0", + "symfony/workflow": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0", + "twig/twig": "^2.10|^3.0" + }, + "suggest": { + "ext-apcu": "For best performance of the system caches", + "symfony/console": "For using the console commands", + "symfony/form": "For using forms", + "symfony/property-info": "For using the property_info service", + "symfony/serializer": "For using the serializer service", + "symfony/validator": "For using validation", + "symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering", + "symfony/yaml": "For using the debug:config and lint:yaml commands" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\FrameworkBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony FrameworkBundle", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-28T17:58:55+00:00" + }, + { + "name": "symfony/http-client", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client.git", + "reference": "93b41572fbb3b8dd11d4f6f0434bbbbacd8619ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client/zipball/93b41572fbb3b8dd11d4f6f0434bbbbacd8619ab", + "reference": "93b41572fbb3b8dd11d4f6f0434bbbbacd8619ab", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "psr/log": "^1.0", + "symfony/http-client-contracts": "^1.1.8|^2", + "symfony/polyfill-php73": "^1.11", + "symfony/service-contracts": "^1.0|^2" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "1.0", + "symfony/http-client-implementation": "1.1" + }, + "require-dev": { + "guzzlehttp/promises": "^1.3.1", + "nyholm/psr7": "^1.0", + "php-http/httplug": "^1.0|^2.0", + "psr/http-client": "^1.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony HttpClient component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-12T16:45:47+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "378868b61b85c5cac6822d4f84e26999c9f2e881" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/378868b61b85c5cac6822d4f84e26999c9f2e881", + "reference": "378868b61b85c5cac6822d4f84e26999c9f2e881", + "shasum": "" + }, + "require": { + "php": "^7.2.5" + }, + "suggest": { + "symfony/http-client-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-11-26T23:25:11+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "e47fdf8b24edc12022ba52923150ec6484d7f57d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e47fdf8b24edc12022ba52923150ec6484d7f57d", + "reference": "e47fdf8b24edc12022ba52923150ec6484d7f57d", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/mime": "^4.4|^5.0", + "symfony/polyfill-mbstring": "~1.1" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/expression-language": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony HttpFoundation Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-18T20:50:06+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "3565e51eecd06106304baba5ccb7ba89db2d7d2b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3565e51eecd06106304baba5ccb7ba89db2d7d2b", + "reference": "3565e51eecd06106304baba5ccb7ba89db2d7d2b", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "psr/log": "~1.0", + "symfony/error-handler": "^4.4|^5.0", + "symfony/event-dispatcher": "^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9" + }, + "conflict": { + "symfony/browser-kit": "<4.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<4.4", + "symfony/doctrine-bridge": "<5.0", + "symfony/form": "<5.0", + "symfony/http-client": "<5.0", + "symfony/mailer": "<5.0", + "symfony/messenger": "<5.0", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<5.0", + "symfony/validator": "<5.0", + "twig/twig": "<2.4" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/cache": "~1.0", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/config": "^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/routing": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^2.4|^3.0" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony HttpKernel Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-28T18:53:25+00:00" + }, + { + "name": "symfony/inflector", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/inflector.git", + "reference": "70c25c66427e2bb6ba0827d668366d60b0a90cbf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/inflector/zipball/70c25c66427e2bb6ba0827d668366d60b0a90cbf", + "reference": "70c25c66427e2bb6ba0827d668366d60b0a90cbf", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Inflector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Inflector Component", + "homepage": "https://symfony.com", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string", + "symfony", + "words" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-27T16:56:45+00:00" + }, + { + "name": "symfony/intl", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/intl.git", + "reference": "dc50ad5039ac685ca87306a346dc119cacdfea25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/intl/zipball/dc50ad5039ac685ca87306a346dc119cacdfea25", + "reference": "dc50ad5039ac685ca87306a346dc119cacdfea25", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-intl-icu": "~1.0" + }, + "require-dev": { + "symfony/filesystem": "^4.4|^5.0" + }, + "suggest": { + "ext-intl": "to use the component with locales other than \"en\"" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Intl\\": "" + }, + "classmap": [ + "Resources/stubs" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Eriksen Costa", + "email": "eriksen.costa@infranology.com.br" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A PHP replacement layer for the C intl extension that includes additional data from the ICU library.", + "homepage": "https://symfony.com", + "keywords": [ + "i18n", + "icu", + "internationalization", + "intl", + "l10n", + "localization" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-12T14:40:17+00:00" + }, + { + "name": "symfony/mailer", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "b473af272a4375d832d060b2bc9aac185536443d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/b473af272a4375d832d060b2bc9aac185536443d", + "reference": "b473af272a4375d832d060b2bc9aac185536443d", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10", + "php": "^7.2.5", + "psr/log": "~1.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "symfony/http-kernel": "<4.4" + }, + "require-dev": { + "symfony/amazon-mailer": "^4.4|^5.0", + "symfony/google-mailer": "^4.4|^5.0", + "symfony/http-client-contracts": "^1.1|^2", + "symfony/mailchimp-mailer": "^4.4|^5.0", + "symfony/mailgun-mailer": "^4.4|^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/postmark-mailer": "^4.4|^5.0", + "symfony/sendgrid-mailer": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Mailer Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-28T17:58:55+00:00" + }, + { + "name": "symfony/mime", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "5d6c81c39225a750f3f43bee15f03093fb9aaa0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/5d6c81c39225a750f3f43bee15f03093fb9aaa0b", + "reference": "5d6c81c39225a750f3f43bee15f03093fb9aaa0b", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "symfony/mailer": "<4.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10", + "symfony/dependency-injection": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A library to manipulate MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-17T03:29:44+00:00" + }, + { + "name": "symfony/monolog-bridge", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bridge.git", + "reference": "5f1bdaba25858fe22be47ddcf5e8f78e1b72a248" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/5f1bdaba25858fe22be47ddcf5e8f78e1b72a248", + "reference": "5f1bdaba25858fe22be47ddcf5e8f78e1b72a248", + "shasum": "" + }, + "require": { + "monolog/monolog": "^1.25.1|^2", + "php": "^7.2.5", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "symfony/console": "<4.4", + "symfony/http-foundation": "<4.4" + }, + "require-dev": { + "symfony/console": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/security-core": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "suggest": { + "symfony/console": "For the possibility to show log messages in console commands depending on verbosity settings.", + "symfony/http-kernel": "For using the debugging handlers together with the response life cycle of the HTTP kernel.", + "symfony/var-dumper": "For using the debugging handlers like the console handler or the log server handler." + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Monolog\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Monolog Bridge", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-12T16:45:47+00:00" + }, + { + "name": "symfony/monolog-bundle", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bundle.git", + "reference": "dd80460fcfe1fa2050a7103ad818e9d0686ce6fd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/dd80460fcfe1fa2050a7103ad818e9d0686ce6fd", + "reference": "dd80460fcfe1fa2050a7103ad818e9d0686ce6fd", + "shasum": "" + }, + "require": { + "monolog/monolog": "~1.22 || ~2.0", + "php": ">=5.6", + "symfony/config": "~3.4 || ~4.0 || ^5.0", + "symfony/dependency-injection": "~3.4.10 || ^4.0.10 || ^5.0", + "symfony/http-kernel": "~3.4 || ~4.0 || ^5.0", + "symfony/monolog-bridge": "~3.4 || ~4.0 || ^5.0" + }, + "require-dev": { + "symfony/console": "~3.4 || ~4.0 || ^5.0", + "symfony/phpunit-bridge": "^3.4.19 || ^4.0 || ^5.0", + "symfony/yaml": "~3.4 || ~4.0 || ^5.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MonologBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony MonologBundle", + "homepage": "http://symfony.com", + "keywords": [ + "log", + "logging" + ], + "time": "2019-11-13T13:11:14+00:00" + }, + { + "name": "symfony/notifier", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/notifier.git", + "reference": "0de60e9cd04eeb60ed73153518887d20402a6b5a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/notifier/zipball/0de60e9cd04eeb60ed73153518887d20402a6b5a", + "reference": "0de60e9cd04eeb60ed73153518887d20402a6b5a", + "shasum": "" + }, + "require": { + "php": "^7.2.5" + }, + "conflict": { + "symfony/http-kernel": "<4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Notifier\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A library to notify messages", + "homepage": "https://symfony.com", + "keywords": [ + "notification", + "notifier" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-27T16:56:45+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "3707e3caeff2b797c0bfaadd5eba723dd44e6bf1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/3707e3caeff2b797c0bfaadd5eba723dd44e6bf1", + "reference": "3707e3caeff2b797c0bfaadd5eba723dd44e6bf1", + "shasum": "" + }, + "require": { + "php": "^7.2.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-06T10:40:56+00:00" + }, + { + "name": "symfony/orm-pack", + "version": "v1.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/orm-pack.git", + "reference": "c9bcc08102061f406dc908192c0f33524a675666" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/orm-pack/zipball/c9bcc08102061f406dc908192c0f33524a675666", + "reference": "c9bcc08102061f406dc908192c0f33524a675666", + "shasum": "" + }, + "require": { + "doctrine/doctrine-bundle": "*", + "doctrine/doctrine-migrations-bundle": "*", + "doctrine/orm": "*" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A pack for the Doctrine ORM", + "time": "2020-02-10T18:03:48+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.16.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "81f5385a0237989ec43a5ed2d94176c5c9616cc8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81f5385a0237989ec43a5ed2d94176c5c9616cc8", + "reference": "81f5385a0237989ec43a5ed2d94176c5c9616cc8", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.16-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-08T16:50:20+00:00" + }, + { + "name": "symfony/polyfill-intl-icu", + "version": "v1.16.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-icu.git", + "reference": "0913a9ab67d6042966287c8ad996927b6c710330" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/0913a9ab67d6042966287c8ad996927b6c710330", + "reference": "0913a9ab67d6042966287c8ad996927b6c710330", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/intl": "~2.3|~3.0|~4.0|~5.0" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.16-dev" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's ICU-related data and classes", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "icu", + "intl", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-08T16:50:20+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.16.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "ab0af41deab94ec8dceb3d1fb408bdd038eba4dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ab0af41deab94ec8dceb3d1fb408bdd038eba4dc", + "reference": "ab0af41deab94ec8dceb3d1fb408bdd038eba4dc", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.16-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-08T16:50:20+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.16.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "cc65fba80f49c547e16f1afcc6fd26a1b101556e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/cc65fba80f49c547e16f1afcc6fd26a1b101556e", + "reference": "cc65fba80f49c547e16f1afcc6fd26a1b101556e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.16-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-08T16:50:20+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.16.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "a54881ec0ab3b2005c406aed0023c062879031e7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a54881ec0ab3b2005c406aed0023c062879031e7", + "reference": "a54881ec0ab3b2005c406aed0023c062879031e7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.16-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-08T16:50:20+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.16.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "7e95fe59d12169fcf4041487e4bf34fca37ee0ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/7e95fe59d12169fcf4041487e4bf34fca37ee0ed", + "reference": "7e95fe59d12169fcf4041487e4bf34fca37ee0ed", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.16-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-02T14:56:09+00:00" + }, + { + "name": "symfony/process", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "3179f68dff5bad14d38c4114a1dab98030801fd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/3179f68dff5bad14d38c4114a1dab98030801fd7", + "reference": "3179f68dff5bad14d38c4114a1dab98030801fd7", + "shasum": "" + }, + "require": { + "php": "^7.2.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-15T15:59:10+00:00" + }, + { + "name": "symfony/property-access", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "259f26529231ab653fc96fb358e5e41dbb438aed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/259f26529231ab653fc96fb358e5e41dbb438aed", + "reference": "259f26529231ab653fc96fb358e5e41dbb438aed", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/inflector": "^4.4|^5.0" + }, + "require-dev": { + "symfony/cache": "^4.4|^5.0" + }, + "suggest": { + "psr/cache-implementation": "To cache access methods." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony PropertyAccess Component", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property path", + "reflection" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-15T15:59:10+00:00" + }, + { + "name": "symfony/property-info", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-info.git", + "reference": "e9e40f14a2d2d163fb603f8646a76a6ff4b9426e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-info/zipball/e9e40f14a2d2d163fb603f8646a76a6ff4b9426e", + "reference": "e9e40f14a2d2d163fb603f8646a76a6ff4b9426e", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/inflector": "^4.4|^5.0" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<0.3.0", + "symfony/dependency-injection": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "~1.7", + "phpdocumentor/reflection-docblock": "^3.0|^4.0", + "symfony/cache": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" + }, + "suggest": { + "phpdocumentor/reflection-docblock": "To use the PHPDoc", + "psr/cache-implementation": "To cache results", + "symfony/doctrine-bridge": "To use Doctrine metadata", + "symfony/serializer": "To use Serializer metadata" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Property Info Component", + "homepage": "https://symfony.com", + "keywords": [ + "doctrine", + "phpdoc", + "property", + "symfony", + "type", + "validator" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-06T10:40:56+00:00" + }, + { + "name": "symfony/routing", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "9b18480a6e101f8d9ab7c483ace7c19441be5111" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/9b18480a6e101f8d9ab7c483ace7c19441be5111", + "reference": "9b18480a6e101f8d9ab7c483ace7c19441be5111", + "shasum": "" + }, + "require": { + "php": "^7.2.5" + }, + "conflict": { + "symfony/config": "<5.0", + "symfony/dependency-injection": "<4.4", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "~1.2", + "psr/log": "~1.0", + "symfony/config": "^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation loader", + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Routing Component", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-21T21:02:50+00:00" + }, + { + "name": "symfony/security-bundle", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-bundle.git", + "reference": "b26fa15f2f748430112731f51f2c3c70fc6bbe1a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/b26fa15f2f748430112731f51f2c3c70fc6bbe1a", + "reference": "b26fa15f2f748430112731f51f2c3c70fc6bbe1a", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": "^7.2.5", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/http-kernel": "^5.0", + "symfony/security-core": "^4.4|^5.0", + "symfony/security-csrf": "^4.4|^5.0", + "symfony/security-guard": "^4.4|^5.0", + "symfony/security-http": "^4.4.5|^5.0.5" + }, + "conflict": { + "symfony/browser-kit": "<4.4", + "symfony/console": "<4.4", + "symfony/framework-bundle": "<4.4", + "symfony/ldap": "<4.4", + "symfony/twig-bundle": "<4.4" + }, + "require-dev": { + "doctrine/doctrine-bundle": "^2.0", + "symfony/asset": "^4.4|^5.0", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/form": "^4.4|^5.0", + "symfony/framework-bundle": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/twig-bridge": "^4.4|^5.0", + "symfony/twig-bundle": "^4.4|^5.0", + "symfony/validator": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0", + "twig/twig": "^2.10|^3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\SecurityBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony SecurityBundle", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-22T00:36:07+00:00" + }, + { + "name": "symfony/security-core", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-core.git", + "reference": "5945abf1e64df5fdfb6aae9753c04f130fe96010" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-core/zipball/5945abf1e64df5fdfb6aae9753c04f130fe96010", + "reference": "5945abf1e64df5fdfb6aae9753c04f130fe96010", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/event-dispatcher-contracts": "^1.1|^2", + "symfony/service-contracts": "^1.1.6|^2" + }, + "conflict": { + "symfony/event-dispatcher": "<4.4", + "symfony/ldap": "<4.4", + "symfony/security-guard": "<4.4" + }, + "require-dev": { + "psr/container": "^1.0", + "psr/log": "~1.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/ldap": "^4.4|^5.0", + "symfony/validator": "^4.4|^5.0" + }, + "suggest": { + "psr/container-implementation": "To instantiate the Security class", + "symfony/event-dispatcher": "", + "symfony/expression-language": "For using the expression voter", + "symfony/http-foundation": "", + "symfony/ldap": "For using LDAP integration", + "symfony/validator": "For using the user password constraint" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Core\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - Core Library", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-21T21:19:41+00:00" + }, + { + "name": "symfony/security-csrf", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-csrf.git", + "reference": "c3ceba9a0a85326af509f418d178a993c31d6d4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/c3ceba9a0a85326af509f418d178a993c31d6d4d", + "reference": "c3ceba9a0a85326af509f418d178a993c31d6d4d", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/security-core": "^4.4|^5.0" + }, + "conflict": { + "symfony/http-foundation": "<4.4" + }, + "require-dev": { + "symfony/http-foundation": "^4.4|^5.0" + }, + "suggest": { + "symfony/http-foundation": "For using the class SessionTokenStorage." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Csrf\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - CSRF Library", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-27T16:56:45+00:00" + }, + { + "name": "symfony/security-guard", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-guard.git", + "reference": "9e9ebbd005ca5af051e57a47d46394357cdff1d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-guard/zipball/9e9ebbd005ca5af051e57a47d46394357cdff1d8", + "reference": "9e9ebbd005ca5af051e57a47d46394357cdff1d8", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/security-core": "^5.0", + "symfony/security-http": "^4.4.1|^5.0.1" + }, + "require-dev": { + "psr/log": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Guard\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - Guard", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-15T15:59:10+00:00" + }, + { + "name": "symfony/security-http", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-http.git", + "reference": "052d81213d007c07e61c9c4407cfd34e67b9ed17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-http/zipball/052d81213d007c07e61c9c4407cfd34e67b9ed17", + "reference": "052d81213d007c07e61c9c4407cfd34e67b9ed17", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/http-foundation": "^4.4.7|^5.0.7", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.0", + "symfony/security-core": "^4.4.8|^5.0.8" + }, + "conflict": { + "symfony/security-csrf": "<4.4" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/routing": "^4.4|^5.0", + "symfony/security-csrf": "^4.4|^5.0" + }, + "suggest": { + "symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs", + "symfony/security-csrf": "For using tokens to protect authentication/logout attempts" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Http\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - HTTP Integration", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-06T10:40:56+00:00" + }, + { + "name": "symfony/serializer", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/serializer.git", + "reference": "aa5d99bb179b5166cfe15d79dc067f516f3f4343" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/serializer/zipball/aa5d99bb179b5166cfe15d79dc067f516f3f4343", + "reference": "aa5d99bb179b5166cfe15d79dc067f516f3f4343", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "phpdocumentor/type-resolver": "<0.2.1", + "symfony/dependency-injection": "<4.4", + "symfony/property-access": "<4.4", + "symfony/property-info": "<4.4", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "doctrine/cache": "~1.0", + "phpdocumentor/reflection-docblock": "^3.2|^4.0", + "symfony/cache": "^4.4|^5.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.0", + "symfony/property-info": "^4.4|^5.0", + "symfony/validator": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", + "doctrine/cache": "For using the default cached annotation reader and metadata cache.", + "psr/cache-implementation": "For using the metadata cache.", + "symfony/config": "For using the XML mapping loader.", + "symfony/mime": "For using a MIME type guesser within the DataUriNormalizer.", + "symfony/property-access": "For using the ObjectNormalizer.", + "symfony/property-info": "To deserialize relations.", + "symfony/yaml": "For using the default YAML mapping loader." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Serializer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Serializer Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-12T16:45:47+00:00" + }, + { + "name": "symfony/serializer-pack", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/serializer-pack.git", + "reference": "9bbce72dcad0cca797b678d3bfb764cf923ab28a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/serializer-pack/zipball/9bbce72dcad0cca797b678d3bfb764cf923ab28a", + "reference": "9bbce72dcad0cca797b678d3bfb764cf923ab28a", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0", + "php": "^7.0", + "phpdocumentor/reflection-docblock": "*", + "symfony/property-access": "*", + "symfony/property-info": "*", + "symfony/serializer": "*" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A pack for the Symfony serializer", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-28T16:26:24+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "144c5e51266b281231e947b51223ba14acf1a749" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749", + "reference": "144c5e51266b281231e947b51223ba14acf1a749", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-11-18T17:27:11+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "a1d86d30d4522423afc998f32404efa34fcf5a73" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/a1d86d30d4522423afc998f32404efa34fcf5a73", + "reference": "a1d86d30d4522423afc998f32404efa34fcf5a73", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/service-contracts": "^1.0|^2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-27T16:56:45+00:00" + }, + { + "name": "symfony/string", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "48a2f4b3597514e6c885c0ddb22d3bbdb60517d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/48a2f4b3597514e6c885c0ddb22d3bbdb60517d0", + "reference": "48a2f4b3597514e6c885c0ddb22d3bbdb60517d0", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^1.1|^2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony String component", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-16T13:02:39+00:00" + }, + { + "name": "symfony/translation", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "c3879db7a68fe3e12b41263b05879412c87b27fd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/c3879db7a68fe3e12b41263b05879412c87b27fd", + "reference": "c3879db7a68fe3e12b41263b05879412c87b27fd", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" + }, + "provide": { + "symfony/translation-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/http-kernel": "^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/service-contracts": "^1.1.2|^2", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Translation Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-12T16:45:47+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/8cc682ac458d75557203b2f2f14b0b92e1c744ed", + "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed", + "shasum": "" + }, + "require": { + "php": "^7.2.5" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-11-18T17:27:11+00:00" + }, + { + "name": "symfony/twig-bridge", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "5962eb3be6591cc985f32be1632e7b096d0979e3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/5962eb3be6591cc985f32be1632e7b096d0979e3", + "reference": "5962eb3be6591cc985f32be1632e7b096d0979e3", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^2.10|^3.0" + }, + "conflict": { + "symfony/console": "<4.4", + "symfony/form": "<5.0", + "symfony/http-foundation": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/translation": "<5.0", + "symfony/workflow": "<4.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10", + "symfony/asset": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/form": "^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/routing": "^4.4|^5.0", + "symfony/security-acl": "^2.8|^3.0", + "symfony/security-core": "^4.4|^5.0", + "symfony/security-csrf": "^4.4|^5.0", + "symfony/security-http": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^5.0", + "symfony/web-link": "^4.4|^5.0", + "symfony/workflow": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0", + "twig/cssinliner-extra": "^2.12", + "twig/inky-extra": "^2.12", + "twig/markdown-extra": "^2.12" + }, + "suggest": { + "symfony/asset": "For using the AssetExtension", + "symfony/expression-language": "For using the ExpressionExtension", + "symfony/finder": "", + "symfony/form": "For using the FormExtension", + "symfony/http-kernel": "For using the HttpKernelExtension", + "symfony/routing": "For using the RoutingExtension", + "symfony/security-core": "For using the SecurityExtension", + "symfony/security-csrf": "For using the CsrfExtension", + "symfony/security-http": "For using the LogoutUrlExtension", + "symfony/stopwatch": "For using the StopwatchExtension", + "symfony/translation": "For using the TranslationExtension", + "symfony/var-dumper": "For using the DumpExtension", + "symfony/web-link": "For using the WebLinkExtension", + "symfony/yaml": "For using the YamlExtension" + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Twig\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Twig Bridge", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-15T15:59:10+00:00" + }, + { + "name": "symfony/twig-bundle", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bundle.git", + "reference": "6167dbac6f32961b7d19112a7531602f511bf500" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/6167dbac6f32961b7d19112a7531602f511bf500", + "reference": "6167dbac6f32961b7d19112a7531602f511bf500", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/config": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^5.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/twig-bridge": "^5.0", + "twig/twig": "^2.10|^3.0" + }, + "conflict": { + "symfony/dependency-injection": "<4.4", + "symfony/framework-bundle": "<5.0", + "symfony/translation": "<5.0" + }, + "require-dev": { + "doctrine/annotations": "~1.7", + "doctrine/cache": "~1.0", + "symfony/asset": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/form": "^4.4|^5.0", + "symfony/framework-bundle": "^5.0", + "symfony/routing": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^5.0", + "symfony/web-link": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\TwigBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony TwigBundle", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-27T16:56:45+00:00" + }, + { + "name": "symfony/twig-pack", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-pack.git", + "reference": "8b278ea4b61fba7c051f172aacae6d87ef4be0e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-pack/zipball/8b278ea4b61fba7c051f172aacae6d87ef4be0e0", + "reference": "8b278ea4b61fba7c051f172aacae6d87ef4be0e0", + "shasum": "" + }, + "require": { + "php": "^7.0", + "symfony/twig-bundle": "*", + "twig/extra-bundle": "^2.12|^3.0", + "twig/twig": "^2.12|^3.0" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A Twig pack for Symfony projects", + "time": "2019-10-17T05:44:22+00:00" + }, + { + "name": "symfony/validator", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "909c45839d32f9e4c09d4f155a7d761201e7e47e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/909c45839d32f9e4c09d4f155a7d761201e7e47e", + "reference": "909c45839d32f9e4c09d4f155a7d761201e7e47e", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^1.1|^2" + }, + "conflict": { + "doctrine/lexer": "<1.0.2", + "phpunit/phpunit": "<5.4.3", + "symfony/dependency-injection": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/intl": "<4.4", + "symfony/translation": "<4.4", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "~1.7", + "doctrine/cache": "~1.0", + "egulias/email-validator": "^2.1.10", + "symfony/cache": "^4.4|^5.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.0", + "symfony/property-info": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", + "doctrine/cache": "For using the default cached annotation reader.", + "egulias/email-validator": "Strict (RFC compliant) email validation", + "psr/cache-implementation": "For using the mapping cache.", + "symfony/config": "", + "symfony/expression-language": "For using the Expression validator", + "symfony/http-foundation": "", + "symfony/intl": "", + "symfony/property-access": "For accessing properties within comparison constraints", + "symfony/property-info": "To automatically add NotNull and Type constraints", + "symfony/translation": "For translating validation errors.", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Validator\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Validator Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-28T18:26:18+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "09de28632f16f81058a85fcf318397218272a07b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/09de28632f16f81058a85fcf318397218272a07b", + "reference": "09de28632f16f81058a85fcf318397218272a07b", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^2.4|^3.0" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony mechanism for exploring and dumping PHP variables", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-12T16:45:47+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "5d18811da9e1ae2bb86b0a97fb2d784e27ffd59f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/5d18811da9e1ae2bb86b0a97fb2d784e27ffd59f", + "reference": "5d18811da9e1ae2bb86b0a97fb2d784e27ffd59f", + "shasum": "" + }, + "require": { + "php": "^7.2.5" + }, + "require-dev": { + "symfony/var-dumper": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A blend of var_export() + serialize() to turn any serializable data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-15T15:59:10+00:00" + }, + { + "name": "symfony/web-link", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/web-link.git", + "reference": "b62309b9f69ae6a8eb3cbd39241a5688bc5f1228" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/web-link/zipball/b62309b9f69ae6a8eb3cbd39241a5688bc5f1228", + "reference": "b62309b9f69ae6a8eb3cbd39241a5688bc5f1228", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "psr/link": "^1.0" + }, + "conflict": { + "symfony/http-kernel": "<4.4" + }, + "provide": { + "psr/link-implementation": "1.0" + }, + "require-dev": { + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0" + }, + "suggest": { + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\WebLink\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony WebLink Component", + "homepage": "https://symfony.com", + "keywords": [ + "dns-prefetch", + "http", + "http2", + "link", + "performance", + "prefetch", + "preload", + "prerender", + "psr13", + "push" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-27T16:56:45+00:00" + }, + { + "name": "symfony/yaml", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "482fb4e710e5af3e0e78015f19aa716ad953392f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/482fb4e710e5af3e0e78015f19aa716ad953392f", + "reference": "482fb4e710e5af3e0e78015f19aa716ad953392f", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<4.4" + }, + "require-dev": { + "symfony/console": "^4.4|^5.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-28T17:58:55+00:00" + }, + { + "name": "twig/extra-bundle", + "version": "v3.0.3", + "source": { + "type": "git", + "url": "https://github.com/twigphp/twig-extra-bundle.git", + "reference": "6eaf1637abe6b68518e7e0949ebb84e55770d5c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/6eaf1637abe6b68518e7e0949ebb84e55770d5c6", + "reference": "6eaf1637abe6b68518e7e0949ebb84e55770d5c6", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/framework-bundle": "^4.3|^5.0", + "symfony/twig-bundle": "^4.3|^5.0", + "twig/twig": "^2.4|^3.0" + }, + "require-dev": { + "twig/cssinliner-extra": "^2.12|^3.0", + "twig/html-extra": "^2.12|^3.0", + "twig/inky-extra": "^2.12|^3.0", + "twig/intl-extra": "^2.12|^3.0", + "twig/markdown-extra": "^2.12|^3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Twig\\Extra\\TwigExtraBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + } + ], + "description": "A Symfony bundle for extra Twig extensions", + "homepage": "https://twig.symfony.com", + "keywords": [ + "bundle", + "extra", + "twig" + ], + "time": "2020-01-01T17:11:09+00:00" + }, + { + "name": "twig/twig", + "version": "v3.0.3", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "3b88ccd180a6b61ebb517aea3b1a8906762a1dc2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/3b88ccd180a6b61ebb517aea3b1a8906762a1dc2", + "reference": "3b88ccd180a6b61ebb517aea3b1a8906762a1dc2", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" + }, + "require-dev": { + "psr/container": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "time": "2020-02-11T15:33:47+00:00" + }, + { + "name": "webimpress/safe-writer", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/webimpress/safe-writer.git", + "reference": "d6e879960febb307c112538997316371f1e95b12" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webimpress/safe-writer/zipball/d6e879960febb307c112538997316371f1e95b12", + "reference": "d6e879960febb307c112538997316371f1e95b12", + "shasum": "" + }, + "require": { + "php": "^7.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.2 || ^9.0.1", + "webimpress/coding-standard": "^1.1.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev", + "dev-develop": "2.1.x-dev", + "dev-release-1.0": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Webimpress\\SafeWriter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "description": "Tool to write files safely, to avoid race conditions", + "keywords": [ + "concurrent write", + "file writer", + "race condition", + "safe writer", + "webimpress" + ], + "funding": [ + { + "url": "https://github.com/michalbundyra", + "type": "github" + } + ], + "time": "2020-03-21T15:49:08+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6", + "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "vimeo/psalm": "<3.9.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "type": "library", + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2020-04-18T12:12:48+00:00" + } + ], + "packages-dev": [ + { + "name": "nikic/php-parser", + "version": "v4.4.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120", + "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "0.0.5", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2020-04-10T16:34:50+00:00" + }, + { + "name": "symfony/browser-kit", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/browser-kit.git", + "reference": "0fa03cfaf1155eedbef871eef1a64c427e624c56" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/0fa03cfaf1155eedbef871eef1a64c427e624c56", + "reference": "0fa03cfaf1155eedbef871eef1a64c427e624c56", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/dom-crawler": "^4.4|^5.0" + }, + "require-dev": { + "symfony/css-selector": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0" + }, + "suggest": { + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\BrowserKit\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony BrowserKit Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-30T11:42:42+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "5f8d5271303dad260692ba73dfa21777d38e124e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/5f8d5271303dad260692ba73dfa21777d38e124e", + "reference": "5f8d5271303dad260692ba73dfa21777d38e124e", + "shasum": "" + }, + "require": { + "php": "^7.2.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony CssSelector Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-27T16:56:45+00:00" + }, + { + "name": "symfony/debug-bundle", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug-bundle.git", + "reference": "3e11ad42d31b4d996c9715a69e988f6a52a70c9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/3e11ad42d31b4d996c9715a69e988f6a52a70c9d", + "reference": "3e11ad42d31b4d996c9715a69e988f6a52a70c9d", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": "^7.2.5", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/twig-bridge": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/dependency-injection": "<4.4" + }, + "require-dev": { + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/web-profiler-bundle": "^4.4|^5.0" + }, + "suggest": { + "symfony/config": "For service container configuration", + "symfony/dependency-injection": "For using as a service from the container" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\DebugBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DebugBundle", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-27T16:56:45+00:00" + }, + { + "name": "symfony/debug-pack", + "version": "v1.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug-pack.git", + "reference": "7310a66f9f81c9f292ff9089f0b0062386cb83fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug-pack/zipball/7310a66f9f81c9f292ff9089f0b0062386cb83fb", + "reference": "7310a66f9f81c9f292ff9089f0b0062386cb83fb", + "shasum": "" + }, + "require": { + "php": "^7.0", + "symfony/debug-bundle": "*", + "symfony/monolog-bundle": "^3.0", + "symfony/profiler-pack": "*", + "symfony/var-dumper": "*" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A debug pack for Symfony projects", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-07T10:08:51+00:00" + }, + { + "name": "symfony/dom-crawler", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "892311d23066844a267ac1a903d8a9d79968a1a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/892311d23066844a267ac1a903d8a9d79968a1a7", + "reference": "892311d23066844a267ac1a903d8a9d79968a1a7", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "masterminds/html5": "<2.6" + }, + "require-dev": { + "masterminds/html5": "^2.6", + "symfony/css-selector": "^4.4|^5.0" + }, + "suggest": { + "symfony/css-selector": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DomCrawler Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-03-30T11:42:42+00:00" + }, + { + "name": "symfony/maker-bundle", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/maker-bundle.git", + "reference": "0b5fd0e13eedc88727b47a11edbcf68bc6b797ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/0b5fd0e13eedc88727b47a11edbcf68bc6b797ed", + "reference": "0b5fd0e13eedc88727b47a11edbcf68bc6b797ed", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^1.2 || ^2.0", + "nikic/php-parser": "^4.0", + "php": "^7.1.3", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/filesystem": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/framework-bundle": "^3.4|^4.0|^5.0", + "symfony/http-kernel": "^3.4|^4.0|^5.0" + }, + "require-dev": { + "doctrine/doctrine-bundle": "^1.8|^2.0", + "doctrine/orm": "^2.3", + "friendsofphp/php-cs-fixer": "^2.8", + "friendsoftwig/twigcs": "^3.1.2", + "symfony/http-client": "^4.3|^5.0", + "symfony/phpunit-bridge": "^4.3|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/security-core": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MakerBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.", + "homepage": "https://symfony.com/doc/current/bundles/SymfonyMakerBundle/index.html", + "keywords": [ + "code generator", + "generator", + "scaffold", + "scaffolding" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-08T13:53:05+00:00" + }, + { + "name": "symfony/phpunit-bridge", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/phpunit-bridge.git", + "reference": "00b8da18a52fa842b7a39613fb0a63720a354e74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/00b8da18a52fa842b7a39613fb0a63720a354e74", + "reference": "00b8da18a52fa842b7a39613fb0a63720a354e74", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "conflict": { + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0|<6.4,>=6.0|9.1.2" + }, + "suggest": { + "symfony/error-handler": "For tracking deprecated interfaces usages at runtime with DebugClassLoader" + }, + "bin": [ + "bin/simple-phpunit" + ], + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + }, + "thanks": { + "name": "phpunit/phpunit", + "url": "https://github.com/sebastianbergmann/phpunit" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Bridge\\PhpUnit\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony PHPUnit Bridge", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-28T17:58:55+00:00" + }, + { + "name": "symfony/profiler-pack", + "version": "v1.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/profiler-pack.git", + "reference": "99c4370632c2a59bb0444852f92140074ef02209" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/profiler-pack/zipball/99c4370632c2a59bb0444852f92140074ef02209", + "reference": "99c4370632c2a59bb0444852f92140074ef02209", + "shasum": "" + }, + "require": { + "php": "^7.0", + "symfony/stopwatch": "*", + "symfony/twig-bundle": "*", + "symfony/web-profiler-bundle": "*" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A pack for the Symfony web profiler", + "time": "2018-12-10T12:11:44+00:00" + }, + { + "name": "symfony/test-pack", + "version": "v1.0.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/test-pack.git", + "reference": "ff87e800a67d06c423389f77b8209bc9dc469def" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/test-pack/zipball/ff87e800a67d06c423389f77b8209bc9dc469def", + "reference": "ff87e800a67d06c423389f77b8209bc9dc469def", + "shasum": "" + }, + "require": { + "php": "^7.0", + "symfony/browser-kit": "*", + "symfony/css-selector": "*", + "symfony/phpunit-bridge": "*" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A pack for functional and end-to-end testing within a Symfony app", + "time": "2019-06-21T06:27:32+00:00" + }, + { + "name": "symfony/web-profiler-bundle", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/web-profiler-bundle.git", + "reference": "67fc2302ba7ca3d917decea6d3accdbd055398d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/67fc2302ba7ca3d917decea6d3accdbd055398d1", + "reference": "67fc2302ba7ca3d917decea6d3accdbd055398d1", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/config": "^4.4|^5.0", + "symfony/framework-bundle": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/routing": "^4.4|^5.0", + "symfony/twig-bundle": "^4.4|^5.0", + "twig/twig": "^2.10|^3.0" + }, + "conflict": { + "symfony/form": "<4.4", + "symfony/messenger": "<4.4" + }, + "require-dev": { + "symfony/browser-kit": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\WebProfilerBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony WebProfilerBundle", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-28T17:58:55+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "^7.2.5", + "ext-ctype": "*", + "ext-iconv": "*" + }, + "platform-dev": [], + "plugin-api-version": "1.1.0" +} diff --git a/config/bootstrap.php b/config/bootstrap.php new file mode 100644 index 0000000..55560fb --- /dev/null +++ b/config/bootstrap.php @@ -0,0 +1,23 @@ +=1.2) +if (is_array($env = @include dirname(__DIR__).'/.env.local.php') && (!isset($env['APP_ENV']) || ($_SERVER['APP_ENV'] ?? $_ENV['APP_ENV'] ?? $env['APP_ENV']) === $env['APP_ENV'])) { + (new Dotenv(false))->populate($env); +} else { + // load all the .env files + (new Dotenv(false))->loadEnv(dirname(__DIR__).'/.env'); +} + +$_SERVER += $_ENV; +$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = ($_SERVER['APP_ENV'] ?? $_ENV['APP_ENV'] ?? null) ?: 'dev'; +$_SERVER['APP_DEBUG'] = $_SERVER['APP_DEBUG'] ?? $_ENV['APP_DEBUG'] ?? 'prod' !== $_SERVER['APP_ENV']; +$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = (int) $_SERVER['APP_DEBUG'] || filter_var($_SERVER['APP_DEBUG'], FILTER_VALIDATE_BOOLEAN) ? '1' : '0'; diff --git a/config/bundles.php b/config/bundles.php new file mode 100644 index 0000000..7745edb --- /dev/null +++ b/config/bundles.php @@ -0,0 +1,15 @@ + ['all' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], + Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], + Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], + Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], + Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], + Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], + Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], + Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true], + Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], +]; diff --git a/config/packages/cache.yaml b/config/packages/cache.yaml new file mode 100644 index 0000000..6899b72 --- /dev/null +++ b/config/packages/cache.yaml @@ -0,0 +1,19 @@ +framework: + cache: + # Unique name of your app: used to compute stable namespaces for cache keys. + #prefix_seed: your_vendor_name/app_name + + # The "app" cache stores to the filesystem by default. + # The data in this cache should persist between deploys. + # Other options include: + + # Redis + #app: cache.adapter.redis + #default_redis_provider: redis://localhost + + # APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues) + #app: cache.adapter.apcu + + # Namespaced pools use the above "app" backend by default + #pools: + #my.dedicated.cache: null diff --git a/config/packages/dev/debug.yaml b/config/packages/dev/debug.yaml new file mode 100644 index 0000000..26d4e53 --- /dev/null +++ b/config/packages/dev/debug.yaml @@ -0,0 +1,4 @@ +debug: + # Forwards VarDumper Data clones to a centralized server allowing to inspect dumps on CLI or in your browser. + # See the "server:dump" command to start a new server. + dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%" diff --git a/config/packages/dev/monolog.yaml b/config/packages/dev/monolog.yaml new file mode 100644 index 0000000..b1998da --- /dev/null +++ b/config/packages/dev/monolog.yaml @@ -0,0 +1,19 @@ +monolog: + handlers: + main: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + channels: ["!event"] + # uncomment to get logging in your browser + # you may have to allow bigger header sizes in your Web server configuration + #firephp: + # type: firephp + # level: info + #chromephp: + # type: chromephp + # level: info + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine", "!console"] diff --git a/config/packages/dev/web_profiler.yaml b/config/packages/dev/web_profiler.yaml new file mode 100644 index 0000000..e92166a --- /dev/null +++ b/config/packages/dev/web_profiler.yaml @@ -0,0 +1,6 @@ +web_profiler: + toolbar: true + intercept_redirects: false + +framework: + profiler: { only_exceptions: false } diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml new file mode 100644 index 0000000..df55815 --- /dev/null +++ b/config/packages/doctrine.yaml @@ -0,0 +1,17 @@ +doctrine: + dbal: + driver: 'pdo_pgsql' + server_version: '12.2' + charset: utf8 + url: '%env(resolve:DATABASE_URL)%' + orm: + auto_generate_proxy_classes: true + naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware + auto_mapping: true + mappings: + App: + is_bundle: false + type: annotation + dir: '%kernel.project_dir%/src/Entity' + prefix: 'App\Entity' + alias: App diff --git a/config/packages/doctrine_migrations.yaml b/config/packages/doctrine_migrations.yaml new file mode 100644 index 0000000..3bf0fbc --- /dev/null +++ b/config/packages/doctrine_migrations.yaml @@ -0,0 +1,5 @@ +doctrine_migrations: + dir_name: '%kernel.project_dir%/src/Migrations' + # namespace is arbitrary but should be different from App\Migrations + # as migrations classes should NOT be autoloaded + namespace: DoctrineMigrations diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml new file mode 100644 index 0000000..6089f4b --- /dev/null +++ b/config/packages/framework.yaml @@ -0,0 +1,16 @@ +framework: + secret: '%env(APP_SECRET)%' + #csrf_protection: true + #http_method_override: true + + # Enables session support. Note that the session will ONLY be started if you read or write from it. + # Remove or comment this section to explicitly disable session support. + session: + handler_id: null + cookie_secure: auto + cookie_samesite: lax + + #esi: true + #fragments: true + php_errors: + log: true diff --git a/config/packages/mailer.yaml b/config/packages/mailer.yaml new file mode 100644 index 0000000..56a650d --- /dev/null +++ b/config/packages/mailer.yaml @@ -0,0 +1,3 @@ +framework: + mailer: + dsn: '%env(MAILER_DSN)%' diff --git a/config/packages/notifier.yaml b/config/packages/notifier.yaml new file mode 100644 index 0000000..3984a48 --- /dev/null +++ b/config/packages/notifier.yaml @@ -0,0 +1,16 @@ +framework: + notifier: + #chatter_transports: + # slack: '%env(SLACK_DSN)%' + # telegram: '%env(TELEGRAM_DSN)%' + #texter_transports: + # twilio: '%env(TWILIO_DSN)%' + # nexmo: '%env(NEXMO_DSN)%' + channel_policy: + # use chat/slack, chat/telegram, sms/twilio or sms/nexmo + urgent: ['email'] + high: ['email'] + medium: ['email'] + low: ['email'] + admin_recipients: + - { email: admin@example.com } diff --git a/config/packages/prod/doctrine.yaml b/config/packages/prod/doctrine.yaml new file mode 100644 index 0000000..084f59a --- /dev/null +++ b/config/packages/prod/doctrine.yaml @@ -0,0 +1,20 @@ +doctrine: + orm: + auto_generate_proxy_classes: false + metadata_cache_driver: + type: pool + pool: doctrine.system_cache_pool + query_cache_driver: + type: pool + pool: doctrine.system_cache_pool + result_cache_driver: + type: pool + pool: doctrine.result_cache_pool + +framework: + cache: + pools: + doctrine.result_cache_pool: + adapter: cache.app + doctrine.system_cache_pool: + adapter: cache.system diff --git a/config/packages/prod/monolog.yaml b/config/packages/prod/monolog.yaml new file mode 100644 index 0000000..c8a16ec --- /dev/null +++ b/config/packages/prod/monolog.yaml @@ -0,0 +1,26 @@ +monolog: + handlers: + main: + type: fingers_crossed + action_level: error + handler: nested + excluded_http_codes: [404, 405] + buffer_size: 50 # How many messages should be saved? Prevent memory leaks + nested: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine"] + + # Uncomment to log deprecations + #deprecation: + # type: stream + # path: "%kernel.logs_dir%/%kernel.environment%.deprecations.log" + #deprecation_filter: + # type: filter + # handler: deprecation + # max_level: info + # channels: ["php"] diff --git a/config/packages/prod/routing.yaml b/config/packages/prod/routing.yaml new file mode 100644 index 0000000..b3e6a0a --- /dev/null +++ b/config/packages/prod/routing.yaml @@ -0,0 +1,3 @@ +framework: + router: + strict_requirements: null diff --git a/config/packages/routing.yaml b/config/packages/routing.yaml new file mode 100644 index 0000000..7e97762 --- /dev/null +++ b/config/packages/routing.yaml @@ -0,0 +1,3 @@ +framework: + router: + utf8: true diff --git a/config/packages/security.yaml b/config/packages/security.yaml new file mode 100644 index 0000000..811681e --- /dev/null +++ b/config/packages/security.yaml @@ -0,0 +1,23 @@ +security: + # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers + providers: + users_in_memory: { memory: null } + firewalls: + dev: + pattern: ^/(_(profiler|wdt)|css|images|js)/ + security: false + main: + anonymous: lazy + provider: users_in_memory + + # activate different ways to authenticate + # https://symfony.com/doc/current/security.html#firewalls-authentication + + # https://symfony.com/doc/current/security/impersonating_user.html + # switch_user: true + + # Easy way to control access for large sections of your site + # Note: Only the *first* access control that matches will be used + access_control: + # - { path: ^/admin, roles: ROLE_ADMIN } + # - { path: ^/profile, roles: ROLE_USER } diff --git a/config/packages/sensio_framework_extra.yaml b/config/packages/sensio_framework_extra.yaml new file mode 100644 index 0000000..1821ccc --- /dev/null +++ b/config/packages/sensio_framework_extra.yaml @@ -0,0 +1,3 @@ +sensio_framework_extra: + router: + annotations: false diff --git a/config/packages/test/framework.yaml b/config/packages/test/framework.yaml new file mode 100644 index 0000000..d051c84 --- /dev/null +++ b/config/packages/test/framework.yaml @@ -0,0 +1,4 @@ +framework: + test: true + session: + storage_id: session.storage.mock_file diff --git a/config/packages/test/monolog.yaml b/config/packages/test/monolog.yaml new file mode 100644 index 0000000..fc40641 --- /dev/null +++ b/config/packages/test/monolog.yaml @@ -0,0 +1,12 @@ +monolog: + handlers: + main: + type: fingers_crossed + action_level: error + handler: nested + excluded_http_codes: [404, 405] + channels: ["!event"] + nested: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug diff --git a/config/packages/test/twig.yaml b/config/packages/test/twig.yaml new file mode 100644 index 0000000..8c6e0b4 --- /dev/null +++ b/config/packages/test/twig.yaml @@ -0,0 +1,2 @@ +twig: + strict_variables: true diff --git a/config/packages/test/validator.yaml b/config/packages/test/validator.yaml new file mode 100644 index 0000000..1e5ab78 --- /dev/null +++ b/config/packages/test/validator.yaml @@ -0,0 +1,3 @@ +framework: + validation: + not_compromised_password: false diff --git a/config/packages/test/web_profiler.yaml b/config/packages/test/web_profiler.yaml new file mode 100644 index 0000000..03752de --- /dev/null +++ b/config/packages/test/web_profiler.yaml @@ -0,0 +1,6 @@ +web_profiler: + toolbar: false + intercept_redirects: false + +framework: + profiler: { collect: false } diff --git a/config/packages/translation.yaml b/config/packages/translation.yaml new file mode 100644 index 0000000..05a2b3d --- /dev/null +++ b/config/packages/translation.yaml @@ -0,0 +1,6 @@ +framework: + default_locale: en + translator: + default_path: '%kernel.project_dir%/translations' + fallbacks: + - en diff --git a/config/packages/twig.yaml b/config/packages/twig.yaml new file mode 100644 index 0000000..b3cdf30 --- /dev/null +++ b/config/packages/twig.yaml @@ -0,0 +1,2 @@ +twig: + default_path: '%kernel.project_dir%/templates' diff --git a/config/packages/validator.yaml b/config/packages/validator.yaml new file mode 100644 index 0000000..350786a --- /dev/null +++ b/config/packages/validator.yaml @@ -0,0 +1,8 @@ +framework: + validation: + email_validation_mode: html5 + + # Enables validator auto-mapping support. + # For instance, basic validation constraints will be inferred from Doctrine's metadata. + #auto_mapping: + # App\Entity\: [] diff --git a/config/routes.yaml b/config/routes.yaml new file mode 100644 index 0000000..c3283aa --- /dev/null +++ b/config/routes.yaml @@ -0,0 +1,3 @@ +#index: +# path: / +# controller: App\Controller\DefaultController::index diff --git a/config/routes/annotations.yaml b/config/routes/annotations.yaml new file mode 100644 index 0000000..e92efc5 --- /dev/null +++ b/config/routes/annotations.yaml @@ -0,0 +1,7 @@ +controllers: + resource: ../../src/Controller/ + type: annotation + +kernel: + resource: ../../src/Kernel.php + type: annotation diff --git a/config/routes/dev/framework.yaml b/config/routes/dev/framework.yaml new file mode 100644 index 0000000..bcbbf13 --- /dev/null +++ b/config/routes/dev/framework.yaml @@ -0,0 +1,3 @@ +_errors: + resource: '@FrameworkBundle/Resources/config/routing/errors.xml' + prefix: /_error diff --git a/config/routes/dev/web_profiler.yaml b/config/routes/dev/web_profiler.yaml new file mode 100644 index 0000000..c82beff --- /dev/null +++ b/config/routes/dev/web_profiler.yaml @@ -0,0 +1,7 @@ +web_profiler_wdt: + resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml' + prefix: /_wdt + +web_profiler_profiler: + resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml' + prefix: /_profiler diff --git a/config/services.yaml b/config/services.yaml new file mode 100644 index 0000000..5c4b417 --- /dev/null +++ b/config/services.yaml @@ -0,0 +1,27 @@ +# This file is the entry point to configure your own services. +# Files in the packages/ subdirectory configure your dependencies. + +# Put parameters here that don't need to change on each machine where the app is deployed +# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration +parameters: + +services: + # default configuration for services in *this* file + _defaults: + autowire: true # Automatically injects dependencies in your services. + autoconfigure: true # Automatically registers your services as commands, event subscribers, etc. + + # makes classes in src/ available to be used as services + # this creates a service per class whose id is the fully-qualified class name + App\: + resource: '../src/*' + exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}' + + # controllers are imported separately to make sure services can be injected + # as action arguments even if you don't extend any base controller class + App\Controller\: + resource: '../src/Controller' + tags: ['controller.service_arguments'] + + # add more service definitions when explicit configuration is needed + # please note that last definitions always *replace* previous ones diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..8de777f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,53 @@ +version: '3.7' + +services: + php: + build: + context: . + target: app_php + cache_from: + - sf.forms/app/php:dev + - sf.forms/app/nginx:dev + image: sf.forms/app/php:dev + depends_on: + - postgres + environment: + - APP_ENV=dev + - APP_DEBUG=1 + - PHP_DATE_TIMEZONE=${PHP_DATE_TIMEZONE:-UTC} + - XDEBUG_CONFIG=remote_host=docker.for.mac.localhost + - PHP_IDE_CONFIG=serverName=localhost + volumes: + - .:/srv/app:rw,cached + - ./var:/srv/app/var:rw + - ./public:/srv/app/public:rw,delegated + + postgres: + image: postgres:12.2-alpine + environment: + - POSTGRES_DB=test + - POSTGRES_USER=sf_user + - POSTGRES_PASSWORD=nopassword + - PGDATA=/var/lib/postgresql/data + volumes: + - db-data:/var/lib/postgresql/data:rw + ports: + - "5432:5432" + + nginx: + build: + context: . + target: app_nginx + cache_from: + - sf.forms/app/php:dev + - sf.forms/app/nginx:dev + image: sf.forms/app/nginx:dev + depends_on: + - php + volumes: + - ./public:/srv/app/public:ro + ports: + - "8080:80" + +volumes: + db-data: diff --git a/docker.sh b/docker.sh new file mode 100755 index 0000000..fa40ed5 --- /dev/null +++ b/docker.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +set -e + +if [[ $1 == "prod" ]] +then + printf "Running prod...\n" + docker-compose -f docker-compose_prod.yml up -d + sudo service google-fluentd restart + sudo service stackdriver-agent restart +elif [[ $1 == "build" ]] +then + printf "Building prod...\n" + docker-compose -f docker-compose_prod.yml build +elif [[ $1 == "refresh-database" ]] +then + printf "Refreshing database...\n" + docker-compose exec php bin/console --env=dev app:database:empty --force + docker-compose exec php bin/console --env=dev doctrine:migrations:migrate -n +else + printf "Running dev...\n" + docker-compose up --build --remove-orphans +fi; diff --git a/docker/nginx/conf.d/default.conf b/docker/nginx/conf.d/default.conf new file mode 100644 index 0000000..26d2abe --- /dev/null +++ b/docker/nginx/conf.d/default.conf @@ -0,0 +1,60 @@ +server { + root /srv/app/public; + + location / { + root /srv/app/public/assets; + + index index.html index.php; + + try_files $uri $uri/ /index.html =404; + } + +# location / { + # try to serve file directly, fallback to index.php +# try_files $uri /index.php$is_args$args; +# } + + location ~ ^/api/ { + try_files $uri @rewriteapp; + } + + location ~ ^/_profiler/ { + try_files $uri @rewriteapp; + } + + location @rewriteapp { + rewrite ^(.*)$ /index.php/$1 last; + } + + location ~ ^/index\.php(/|$) { + # Comment the next line and uncomment the next to enable dynamic resolution (incompatible with Kubernetes) + fastcgi_pass php:9000; + #resolver 127.0.0.11; + #set $upstream_host php; + #fastcgi_pass $upstream_host:9000; + + fastcgi_split_path_info ^(.+\.php)(/.*)$; + include fastcgi_params; + # When you are using symlinks to link the document root to the + # current version of your application, you should pass the real + # application path instead of the path to the symlink to PHP + # FPM. + # Otherwise, PHP's OPcache may not properly detect changes to + # your PHP files (see https://github.com/zendtech/ZendOptimizerPlus/issues/126 + # for more information). + fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; + fastcgi_param DOCUMENT_ROOT $realpath_root; + # Prevents URIs that include the front controller. This will 404: + # http://domain.tld/index.php/some-path + # Remove the internal directive to allow URIs like this + internal; + } + + # return 404 for all other php files not matching the front controller + # this prevents access to other php files you don't want to be accessible. + location ~ \.php$ { + return 404; + } + + client_max_body_size 6m; +} diff --git a/docker/php/docker-entrypoint.sh b/docker/php/docker-entrypoint.sh new file mode 100755 index 0000000..3dba800 --- /dev/null +++ b/docker/php/docker-entrypoint.sh @@ -0,0 +1,29 @@ +#!/bin/sh +set -e + +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then + set -- php-fpm "$@" +fi + +if [ "$1" = 'php-fpm' ] || [ "$1" = 'bin/console' ]; then + mkdir -p var/cache var/log +# setfacl -R -m u:www-data:rwX -m u:"$(whoami)":rwX var public/media +# setfacl -dR -m u:www-data:rwX -m u:"$(whoami)":rwX var public/media + + if [ "$APP_ENV" != 'prod' ]; then + composer install --prefer-dist --no-progress --no-suggest --no-interaction +# bin/console assets:install --no-interaction + fi + + until bin/console doctrine:query:sql "select 1" >/dev/null 2>&1; do + (>&2 echo "Waiting for PostgreSql to be ready...") + sleep 1 + done + +# if [ "$(ls -A src/Migrations/*.php 2> /dev/null)" ]; then +# bin/console doctrine:migrations:migrate --no-interaction +# fi +fi + +exec docker-php-entrypoint "$@" diff --git a/docker/php/php-cli.ini b/docker/php/php-cli.ini new file mode 100644 index 0000000..ef77c73 --- /dev/null +++ b/docker/php/php-cli.ini @@ -0,0 +1,16 @@ +apc.enable_cli = 1 +date.timezone = ${PHP_DATE_TIMEZONE} +opcache.enable_cli = 1 +session.auto_start = Off +short_open_tag = Off + +# http://symfony.com/doc/current/performance.html +opcache.interned_strings_buffer = 16 +opcache.max_accelerated_files = 20000 +opcache.memory_consumption = 256 +realpath_cache_size = 4096K +realpath_cache_ttl = 600 + +memory_limit = 2G +post_max_size = 6M +upload_max_filesize = 5M diff --git a/docker/php/php.ini b/docker/php/php.ini new file mode 100644 index 0000000..dd08e3b --- /dev/null +++ b/docker/php/php.ini @@ -0,0 +1,15 @@ +apc.enable_cli = 1 +date.timezone = ${PHP_DATE_TIMEZONE} +opcache.enable_cli = 1 +session.auto_start = Off +short_open_tag = Off + +# http://symfony.com/doc/current/performance.html +opcache.interned_strings_buffer = 16 +opcache.max_accelerated_files = 20000 +opcache.memory_consumption = 256 +realpath_cache_size = 4096K +realpath_cache_ttl = 600 + +post_max_size = 6M +upload_max_filesize = 5M diff --git a/docker/php/xdebug.ini b/docker/php/xdebug.ini new file mode 100644 index 0000000..cdf66dc --- /dev/null +++ b/docker/php/xdebug.ini @@ -0,0 +1,8 @@ +zend_extension=xdebug.so +xdebug.remote_enable=1 +xdebug.remote_port=9002 +xdebug.remote_connect_back=0 +xdebug.profiler_enable_trigger=1 +xdebug.idekey=docker +xdebug.remote_host=docker.for.mac.localhost +xdebug.remote_autostart=1 diff --git a/phpunit.xml.dist b/phpunit.xml.dist new file mode 100644 index 0000000..d81f0c3 --- /dev/null +++ b/phpunit.xml.dist @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + tests + + + + + + src + + + + + + + diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..0e30370 --- /dev/null +++ b/public/index.php @@ -0,0 +1,27 @@ +handle($request); +$response->send(); +$kernel->terminate($request, $response); diff --git a/src/Controller/.gitignore b/src/Controller/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/src/Entity/.gitignore b/src/Entity/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/src/Kernel.php b/src/Kernel.php new file mode 100644 index 0000000..1cd0572 --- /dev/null +++ b/src/Kernel.php @@ -0,0 +1,54 @@ +getProjectDir().'/config/bundles.php'; + foreach ($contents as $class => $envs) { + if ($envs[$this->environment] ?? $envs['all'] ?? false) { + yield new $class(); + } + } + } + + public function getProjectDir(): string + { + return \dirname(__DIR__); + } + + protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void + { + $container->addResource(new FileResource($this->getProjectDir().'/config/bundles.php')); + $container->setParameter('container.dumper.inline_class_loader', \PHP_VERSION_ID < 70400 || $this->debug); + $container->setParameter('container.dumper.inline_factories', true); + $confDir = $this->getProjectDir().'/config'; + + $loader->load($confDir.'/{packages}/*'.self::CONFIG_EXTS, 'glob'); + $loader->load($confDir.'/{packages}/'.$this->environment.'/*'.self::CONFIG_EXTS, 'glob'); + $loader->load($confDir.'/{services}'.self::CONFIG_EXTS, 'glob'); + $loader->load($confDir.'/{services}_'.$this->environment.self::CONFIG_EXTS, 'glob'); + } + + protected function configureRoutes(RouteCollectionBuilder $routes): void + { + $confDir = $this->getProjectDir().'/config'; + + $routes->import($confDir.'/{routes}/'.$this->environment.'/*'.self::CONFIG_EXTS, '/', 'glob'); + $routes->import($confDir.'/{routes}/*'.self::CONFIG_EXTS, '/', 'glob'); + $routes->import($confDir.'/{routes}'.self::CONFIG_EXTS, '/', 'glob'); + } +} diff --git a/src/Migrations/.gitignore b/src/Migrations/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/src/Repository/.gitignore b/src/Repository/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/symfony.lock b/symfony.lock new file mode 100644 index 0000000..5e8d903 --- /dev/null +++ b/symfony.lock @@ -0,0 +1,520 @@ +{ + "doctrine/annotations": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "a2759dd6123694c8d901d0ec80006e044c2e6457" + }, + "files": [ + "config/routes/annotations.yaml" + ] + }, + "doctrine/cache": { + "version": "1.10.0" + }, + "doctrine/collections": { + "version": "1.6.4" + }, + "doctrine/common": { + "version": "2.12.0" + }, + "doctrine/dbal": { + "version": "2.10.2" + }, + "doctrine/doctrine-bundle": { + "version": "2.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "2.0", + "ref": "a9f2463b9f73efe74482f831f03a204a41328555" + }, + "files": [ + "config/packages/doctrine.yaml", + "config/packages/prod/doctrine.yaml", + "src/Entity/.gitignore", + "src/Repository/.gitignore" + ] + }, + "doctrine/doctrine-migrations-bundle": { + "version": "1.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.2", + "ref": "c1431086fec31f17fbcfe6d6d7e92059458facc1" + }, + "files": [ + "config/packages/doctrine_migrations.yaml", + "src/Migrations/.gitignore" + ] + }, + "doctrine/event-manager": { + "version": "1.1.0" + }, + "doctrine/inflector": { + "version": "1.4.0" + }, + "doctrine/instantiator": { + "version": "1.3.0" + }, + "doctrine/lexer": { + "version": "1.2.0" + }, + "doctrine/migrations": { + "version": "2.2.1" + }, + "doctrine/orm": { + "version": "v2.7.2" + }, + "doctrine/persistence": { + "version": "1.3.7" + }, + "doctrine/reflection": { + "version": "1.2.1" + }, + "egulias/email-validator": { + "version": "2.1.17" + }, + "jdorn/sql-formatter": { + "version": "v1.2.17" + }, + "laminas/laminas-code": { + "version": "3.4.1" + }, + "laminas/laminas-eventmanager": { + "version": "3.2.1" + }, + "laminas/laminas-zendframework-bridge": { + "version": "1.0.3" + }, + "monolog/monolog": { + "version": "2.0.2" + }, + "nikic/php-parser": { + "version": "v4.4.0" + }, + "ocramius/package-versions": { + "version": "1.8.0" + }, + "ocramius/proxy-manager": { + "version": "2.8.0" + }, + "php": { + "version": "7.4" + }, + "phpdocumentor/reflection-common": { + "version": "2.1.0" + }, + "phpdocumentor/reflection-docblock": { + "version": "5.1.0" + }, + "phpdocumentor/type-resolver": { + "version": "1.1.0" + }, + "psr/cache": { + "version": "1.0.1" + }, + "psr/container": { + "version": "1.0.0" + }, + "psr/event-dispatcher": { + "version": "1.0.0" + }, + "psr/link": { + "version": "1.0.0" + }, + "psr/log": { + "version": "1.1.3" + }, + "sensio/framework-extra-bundle": { + "version": "5.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.2", + "ref": "fb7e19da7f013d0d422fa9bce16f5c510e27609b" + }, + "files": [ + "config/packages/sensio_framework_extra.yaml" + ] + }, + "symfony/asset": { + "version": "v5.0.8" + }, + "symfony/browser-kit": { + "version": "v5.0.8" + }, + "symfony/cache": { + "version": "v5.0.8" + }, + "symfony/cache-contracts": { + "version": "v2.0.1" + }, + "symfony/config": { + "version": "v5.0.8" + }, + "symfony/console": { + "version": "4.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.4", + "ref": "ea8c0eda34fda57e7d5cd8cbd889e2a387e3472c" + }, + "files": [ + "bin/console", + "config/bootstrap.php" + ] + }, + "symfony/css-selector": { + "version": "v5.0.8" + }, + "symfony/debug-bundle": { + "version": "4.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.1", + "ref": "f8863cbad2f2e58c4b65fa1eac892ab189971bea" + }, + "files": [ + "config/packages/dev/debug.yaml" + ] + }, + "symfony/debug-pack": { + "version": "v1.0.8" + }, + "symfony/dependency-injection": { + "version": "v5.0.8" + }, + "symfony/doctrine-bridge": { + "version": "v5.0.8" + }, + "symfony/dom-crawler": { + "version": "v5.0.8" + }, + "symfony/dotenv": { + "version": "v5.0.8" + }, + "symfony/error-handler": { + "version": "v5.0.8" + }, + "symfony/event-dispatcher": { + "version": "v5.0.8" + }, + "symfony/event-dispatcher-contracts": { + "version": "v2.0.1" + }, + "symfony/expression-language": { + "version": "v5.0.8" + }, + "symfony/filesystem": { + "version": "v5.0.8" + }, + "symfony/finder": { + "version": "v5.0.8" + }, + "symfony/flex": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "c0eeb50665f0f77226616b6038a9b06c03752d8e" + }, + "files": [ + ".env" + ] + }, + "symfony/form": { + "version": "v5.0.8" + }, + "symfony/framework-bundle": { + "version": "4.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.4", + "ref": "36d3075b2b8e0c4de0e82356a86e4c4a4eb6681b" + }, + "files": [ + "config/bootstrap.php", + "config/packages/cache.yaml", + "config/packages/framework.yaml", + "config/packages/test/framework.yaml", + "config/routes/dev/framework.yaml", + "config/services.yaml", + "public/index.php", + "src/Controller/.gitignore", + "src/Kernel.php" + ] + }, + "symfony/http-client": { + "version": "v5.0.8" + }, + "symfony/http-client-contracts": { + "version": "v2.0.1" + }, + "symfony/http-foundation": { + "version": "v5.0.8" + }, + "symfony/http-kernel": { + "version": "v5.0.8" + }, + "symfony/inflector": { + "version": "v5.0.8" + }, + "symfony/intl": { + "version": "v5.0.8" + }, + "symfony/mailer": { + "version": "4.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.3", + "ref": "15658c2a0176cda2e7dba66276a2030b52bd81b2" + }, + "files": [ + "config/packages/mailer.yaml" + ] + }, + "symfony/maker-bundle": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "fadbfe33303a76e25cb63401050439aa9b1a9c7f" + } + }, + "symfony/mime": { + "version": "v5.0.8" + }, + "symfony/monolog-bridge": { + "version": "v5.0.8" + }, + "symfony/monolog-bundle": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "a89f4cd8a232563707418eea6c2da36acd36a917" + }, + "files": [ + "config/packages/dev/monolog.yaml", + "config/packages/prod/monolog.yaml", + "config/packages/test/monolog.yaml" + ] + }, + "symfony/notifier": { + "version": "5.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.0", + "ref": "c31585e252b32fe0e1f30b1f256af553f4a06eb9" + }, + "files": [ + "config/packages/notifier.yaml" + ] + }, + "symfony/options-resolver": { + "version": "v5.0.8" + }, + "symfony/orm-pack": { + "version": "v1.0.8" + }, + "symfony/phpunit-bridge": { + "version": "4.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.3", + "ref": "6d0e35f749d5f4bfe1f011762875275cd3f9874f" + }, + "files": [ + ".env.test", + "bin/phpunit", + "phpunit.xml.dist", + "tests/bootstrap.php" + ] + }, + "symfony/polyfill-intl-grapheme": { + "version": "v1.16.0" + }, + "symfony/polyfill-intl-icu": { + "version": "v1.16.0" + }, + "symfony/polyfill-intl-idn": { + "version": "v1.16.0" + }, + "symfony/polyfill-intl-normalizer": { + "version": "v1.16.0" + }, + "symfony/polyfill-mbstring": { + "version": "v1.16.0" + }, + "symfony/polyfill-php73": { + "version": "v1.16.0" + }, + "symfony/process": { + "version": "v5.0.8" + }, + "symfony/profiler-pack": { + "version": "v1.0.4" + }, + "symfony/property-access": { + "version": "v5.0.8" + }, + "symfony/property-info": { + "version": "v5.0.8" + }, + "symfony/routing": { + "version": "4.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.2", + "ref": "683dcb08707ba8d41b7e34adb0344bfd68d248a7" + }, + "files": [ + "config/packages/prod/routing.yaml", + "config/packages/routing.yaml", + "config/routes.yaml" + ] + }, + "symfony/security-bundle": { + "version": "4.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.4", + "ref": "7b4408dc203049666fe23fabed23cbadc6d8440f" + }, + "files": [ + "config/packages/security.yaml" + ] + }, + "symfony/security-core": { + "version": "v5.0.8" + }, + "symfony/security-csrf": { + "version": "v5.0.8" + }, + "symfony/security-guard": { + "version": "v5.0.8" + }, + "symfony/security-http": { + "version": "v5.0.8" + }, + "symfony/serializer": { + "version": "v5.0.8" + }, + "symfony/serializer-pack": { + "version": "v1.0.3" + }, + "symfony/service-contracts": { + "version": "v2.0.1" + }, + "symfony/stopwatch": { + "version": "v5.0.8" + }, + "symfony/string": { + "version": "v5.0.8" + }, + "symfony/test-pack": { + "version": "v1.0.6" + }, + "symfony/translation": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "2ad9d2545bce8ca1a863e50e92141f0b9d87ffcd" + }, + "files": [ + "config/packages/translation.yaml", + "translations/.gitignore" + ] + }, + "symfony/translation-contracts": { + "version": "v2.0.1" + }, + "symfony/twig-bridge": { + "version": "v5.0.8" + }, + "symfony/twig-bundle": { + "version": "5.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.0", + "ref": "fab9149bbaa4d5eca054ed93f9e1b66cc500895d" + }, + "files": [ + "config/packages/test/twig.yaml", + "config/packages/twig.yaml", + "templates/base.html.twig" + ] + }, + "symfony/twig-pack": { + "version": "v1.0.0" + }, + "symfony/validator": { + "version": "4.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.3", + "ref": "d902da3e4952f18d3bf05aab29512eb61cabd869" + }, + "files": [ + "config/packages/test/validator.yaml", + "config/packages/validator.yaml" + ] + }, + "symfony/var-dumper": { + "version": "v5.0.8" + }, + "symfony/var-exporter": { + "version": "v5.0.8" + }, + "symfony/web-link": { + "version": "v5.0.8" + }, + "symfony/web-profiler-bundle": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "6bdfa1a95f6b2e677ab985cd1af2eae35d62e0f6" + }, + "files": [ + "config/packages/dev/web_profiler.yaml", + "config/packages/test/web_profiler.yaml", + "config/routes/dev/web_profiler.yaml" + ] + }, + "symfony/yaml": { + "version": "v5.0.8" + }, + "twig/extra-bundle": { + "version": "v3.0.3" + }, + "twig/twig": { + "version": "v3.0.3" + }, + "webimpress/safe-writer": { + "version": "2.0.1" + }, + "webmozart/assert": { + "version": "1.8.0" + } +} diff --git a/templates/base.html.twig b/templates/base.html.twig new file mode 100644 index 0000000..043f42d --- /dev/null +++ b/templates/base.html.twig @@ -0,0 +1,12 @@ + + + + + {% block title %}Welcome!{% endblock %} + {% block stylesheets %}{% endblock %} + + + {% block body %}{% endblock %} + {% block javascripts %}{% endblock %} + + diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100644 index 0000000..469dcce --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,11 @@ +bootEnv(dirname(__DIR__).'/.env'); +} diff --git a/translations/.gitignore b/translations/.gitignore new file mode 100644 index 0000000..e69de29 From bf8ca4981d2f87f9de094ee6429a3f743b0fb4c5 Mon Sep 17 00:00:00 2001 From: Oleksandr Kurakin Date: Wed, 13 May 2020 22:38:37 +0200 Subject: [PATCH 2/8] preparation --- .dockerignore | 5 + .gitignore | 15 +-- Dockerfile | 3 +- composer.json | 2 +- config/routes.yaml | 17 +++- src/Controller/OrderController.php | 17 ++++ src/Controller/ProductController.php | 34 +++++++ src/Entity/Customer.php | 77 +++++++++++++++ src/Entity/Order.php | 134 +++++++++++++++++++++++++++ src/Entity/Product.php | 123 ++++++++++++++++++++++++ 10 files changed, 408 insertions(+), 19 deletions(-) create mode 100644 .dockerignore create mode 100644 src/Controller/OrderController.php create mode 100644 src/Controller/ProductController.php create mode 100644 src/Entity/Customer.php create mode 100644 src/Entity/Order.php create mode 100644 src/Entity/Product.php diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..4e9c0d0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +/var/ +/.git/ +.idea +/public/bundles/ +/public/assets/ diff --git a/.gitignore b/.gitignore index eaa3cd3..44fdf41 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,5 @@ - -###> symfony/framework-bundle ### -/.env.local -/.env.local.php -/.env.*.local -/config/secrets/prod/prod.decrypt.private.php /public/bundles/ +/public/assets/ /var/ /vendor/ -###< symfony/framework-bundle ### - -###> symfony/phpunit-bridge ### -.phpunit -.phpunit.result.cache -/phpunit.xml -###< symfony/phpunit-bridge ### +.idea diff --git a/Dockerfile b/Dockerfile index 453be8f..9d2cd71 100644 --- a/Dockerfile +++ b/Dockerfile @@ -80,12 +80,11 @@ RUN set -eux; \ composer clear-cache # copy only specifically what we need -COPY .env .env.prod .env.test ./ +COPY .env .env.test ./ COPY bin bin/ COPY config config/ COPY public public/ COPY src src/ -COPY infra infra/ RUN set -eux; \ mkdir -p var/cache var/log; \ diff --git a/composer.json b/composer.json index dc29e7a..ba1f3d1 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "type": "project", "license": "proprietary", "require": { - "php": "^7.2.5", + "php": "^7.4", "ext-ctype": "*", "ext-iconv": "*", "sensio/framework-extra-bundle": "^5.1", diff --git a/config/routes.yaml b/config/routes.yaml index c3283aa..9f88088 100644 --- a/config/routes.yaml +++ b/config/routes.yaml @@ -1,3 +1,14 @@ -#index: -# path: / -# controller: App\Controller\DefaultController::index +product_create: + path: /api/v1/products + controller: App\Controller\ProductController::createAction + methods: [POST] + +product_list: + path: /api/v1/products + controller: App\Controller\ProductController::indexAction + methods: [GET] + +order_create: + path: /api/v1/orders + controller: App\Controller\OrderController::createAction + methods: [POST] diff --git a/src/Controller/OrderController.php b/src/Controller/OrderController.php new file mode 100644 index 0000000..c4ca6a8 --- /dev/null +++ b/src/Controller/OrderController.php @@ -0,0 +1,17 @@ +entityManager = $entityManager; + } + + public function indexAction(Request $request): Response + { + $products = $this->entityManager->getRepository(Product::class)->findAll(); + + return new JsonResponse($products); + } + + public function createAction(Request $request): Response + { + return new Response(); + } +} diff --git a/src/Entity/Customer.php b/src/Entity/Customer.php new file mode 100644 index 0000000..f69b99e --- /dev/null +++ b/src/Entity/Customer.php @@ -0,0 +1,77 @@ +id; + } + + /** + * @return string + */ + public function getEmail(): string + { + return $this->email; + } + + /** + * @param string $email + */ + public function setEmail(string $email): void + { + $this->email = $email; + } + + /** + * @return string + */ + public function getPhoneNumber(): string + { + return $this->phoneNumber; + } + + /** + * @param string $phoneNumber + */ + public function setPhoneNumber(string $phoneNumber): void + { + $this->phoneNumber = $phoneNumber; + } +} diff --git a/src/Entity/Order.php b/src/Entity/Order.php new file mode 100644 index 0000000..00aa545 --- /dev/null +++ b/src/Entity/Order.php @@ -0,0 +1,134 @@ +products = new ArrayCollection(); + } + + /** + * @return int|null + */ + public function getId(): ?int + { + return $this->id; + } + + /** + * @return Customer + */ + public function getCustomer(): Customer + { + return $this->customer; + } + + /** + * @param Customer $customer + */ + public function setCustomer(Customer $customer): void + { + $this->customer = $customer; + } + + /** + * @return \DateTimeImmutable + */ + public function getDateTime(): \DateTimeImmutable + { + return $this->dateTime; + } + + /** + * @param \DateTimeImmutable $dateTime + */ + public function setDateTime(\DateTimeImmutable $dateTime): void + { + $this->dateTime = $dateTime; + } + + /** + * @return Collection + */ + public function getProducts(): Collection + { + return $this->products; + } + + /** + * @param Product $product + */ + public function addProduct(Product $product): void + { + if ($this->products->contains($product)) { + return; + } + + $this->products->add($product); + } + + /** + * @return string + */ + public function getComments(): string + { + return $this->comments; + } + + /** + * @param string $comments + */ + public function setComments(string $comments): void + { + $this->comments = $comments; + } +} diff --git a/src/Entity/Product.php b/src/Entity/Product.php new file mode 100644 index 0000000..a5668f1 --- /dev/null +++ b/src/Entity/Product.php @@ -0,0 +1,123 @@ +id; + } + + /** + * @return string + */ + public function getSku(): string + { + return $this->sku; + } + + /** + * @param string $sku + */ + public function setSku(string $sku): void + { + $this->sku = $sku; + } + + /** + * @return string + */ + public function getTitle(): string + { + return $this->title; + } + + /** + * @param string $title + */ + public function setTitle(string $title): void + { + $this->title = $title; + } + + /** + * @return string + */ + public function getDescription(): string + { + return $this->description; + } + + /** + * @param string $description + */ + public function setDescription(string $description): void + { + $this->description = $description; + } + + /** + * @return int + */ + public function getPrice(): int + { + return $this->price; + } + + /** + * @param int $price + */ + public function setPrice(int $price): void + { + $this->price = $price; + } +} From 5ac76144c21c38981541085b88913a6bcaa2206b Mon Sep 17 00:00:00 2001 From: Oleksandr Kurakin Date: Wed, 13 May 2020 22:38:52 +0200 Subject: [PATCH 3/8] remove IDE files --- .idea/.gitignore | 8 - .idea/inspectionProfiles/Project_Default.xml | 1156 ------------------ .idea/misc.xml | 6 - .idea/modules.xml | 9 - .idea/php.xml | 116 -- .idea/symfony2.xml | 9 - .idea/symfony_forms_api.iml | 122 -- .idea/vcs.xml | 7 - 8 files changed, 1433 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/inspectionProfiles/Project_Default.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/php.xml delete mode 100644 .idea/symfony2.xml delete mode 100644 .idea/symfony_forms_api.iml delete mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 73f69e0..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml -# Editor-based HTTP Client requests -/httpRequests/ diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 2b1a086..0000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,1156 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 28a804d..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index d274976..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml deleted file mode 100644 index 3254980..0000000 --- a/.idea/php.xml +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/symfony2.xml b/.idea/symfony2.xml deleted file mode 100644 index d742223..0000000 --- a/.idea/symfony2.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/symfony_forms_api.iml b/.idea/symfony_forms_api.iml deleted file mode 100644 index 1711b1e..0000000 --- a/.idea/symfony_forms_api.iml +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 9b1da94..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file From c2b81dad58975596724bee0c2f1623bdfac816ef Mon Sep 17 00:00:00 2001 From: Oleksandr Kurakin Date: Fri, 15 May 2020 10:12:52 +0200 Subject: [PATCH 4/8] add logic --- .env | 2 +- composer.lock | 946 +---------------------- config/routes.yaml | 15 + src/Controller/AbstractApiController.php | 11 + src/Controller/CustomerController.php | 24 + src/Controller/OrderController.php | 11 +- src/Controller/ProductController.php | 16 +- src/Entity/Order.php | 14 +- src/Entity/Product.php | 16 +- src/Form/Type/CustomerType.php | 30 + src/Form/Type/OrderType.php | 40 + src/Form/Type/ProductType.php | 32 + src/Migrations/Version20200514200056.php | 58 ++ src/Migrations/Version20200514200057.php | 34 + 14 files changed, 274 insertions(+), 975 deletions(-) create mode 100644 src/Controller/AbstractApiController.php create mode 100644 src/Controller/CustomerController.php create mode 100644 src/Form/Type/CustomerType.php create mode 100644 src/Form/Type/OrderType.php create mode 100644 src/Form/Type/ProductType.php create mode 100644 src/Migrations/Version20200514200056.php create mode 100644 src/Migrations/Version20200514200057.php diff --git a/.env b/.env index 37fe954..cca9c65 100644 --- a/.env +++ b/.env @@ -29,5 +29,5 @@ APP_SECRET=50373636bdd097439dc76657d212924c # For an SQLite database, use: "sqlite:///%kernel.project_dir%/var/data.db" # For a PostgreSQL database, use: "postgresql://db_user:db_password@127.0.0.1:5432/db_name?serverVersion=11&charset=utf8" # IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml -DATABASE_URL='postgres://pr_user:nopassword@postgres/test' +DATABASE_URL='postgres://sf_user:nopassword@postgres/test' ###< doctrine/doctrine-bundle ### diff --git a/composer.lock b/composer.lock index d5d390d..b492fa4 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f0aa134c748f7bb4398f0b93f0f19bb9", + "content-hash": "f38827ecf29b92cabde17a57e61db3ce", "packages": [ { "name": "doctrine/annotations", @@ -402,20 +402,6 @@ "sqlserver", "sqlsrv" ], - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", - "type": "tidelift" - } - ], "time": "2020-04-20T17:19:26+00:00" }, { @@ -508,20 +494,6 @@ "orm", "persistence" ], - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-bundle", - "type": "tidelift" - } - ], "time": "2020-04-23T10:52:09+00:00" }, { @@ -744,20 +716,6 @@ "uppercase", "words" ], - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", - "type": "tidelift" - } - ], "time": "2020-05-06T11:01:57+00:00" }, { @@ -1042,20 +1000,6 @@ "database", "orm" ], - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine/orm", - "type": "tidelift" - } - ], "time": "2020-03-19T06:41:02+00:00" }, { @@ -1139,20 +1083,6 @@ "orm", "persistence" ], - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fpersistence", - "type": "tidelift" - } - ], "time": "2020-03-21T15:13:52+00:00" }, { @@ -1510,12 +1440,6 @@ "laminas", "zf" ], - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], "time": "2020-04-03T16:01:00+00:00" }, { @@ -1648,16 +1572,6 @@ } ], "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", - "funding": [ - { - "url": "https://github.com/Ocramius", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ocramius/package-versions", - "type": "tidelift" - } - ], "time": "2020-04-06T17:43:35+00:00" }, { @@ -1733,16 +1647,6 @@ "proxy pattern", "service proxies" ], - "funding": [ - { - "url": "https://github.com/Ocramius", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager", - "type": "tidelift" - } - ], "time": "2020-04-13T14:42:16+00:00" }, { @@ -2257,20 +2161,6 @@ ], "description": "Symfony Asset Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-12T14:40:17+00:00" }, { @@ -2350,20 +2240,6 @@ "caching", "psr6" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-28T17:58:55+00:00" }, { @@ -2486,20 +2362,6 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-15T15:59:10+00:00" }, { @@ -2576,20 +2438,6 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-30T11:42:42+00:00" }, { @@ -2663,20 +2511,6 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-28T17:58:55+00:00" }, { @@ -2773,20 +2607,6 @@ ], "description": "Symfony Doctrine Bridge", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-12T16:45:47+00:00" }, { @@ -2844,20 +2664,6 @@ "env", "environment" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-27T16:56:45+00:00" }, { @@ -2913,20 +2719,6 @@ ], "description": "Symfony ErrorHandler Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-30T14:14:32+00:00" }, { @@ -2997,20 +2789,6 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-27T16:56:45+00:00" }, { @@ -3120,20 +2898,6 @@ ], "description": "Symfony ExpressionLanguage Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-15T15:59:10+00:00" }, { @@ -3184,20 +2948,6 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-12T14:40:17+00:00" }, { @@ -3247,20 +2997,6 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-27T16:56:45+00:00" }, { @@ -3310,20 +3046,6 @@ } ], "description": "Composer plugin for Symfony", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-05-09T12:10:32+00:00" }, { @@ -3408,20 +3130,6 @@ ], "description": "Symfony Form Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-28T17:58:55+00:00" }, { @@ -3552,20 +3260,6 @@ ], "description": "Symfony FrameworkBundle", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-28T17:58:55+00:00" }, { @@ -3634,20 +3328,6 @@ ], "description": "Symfony HttpClient component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-12T16:45:47+00:00" }, { @@ -3760,20 +3440,6 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-18T20:50:06+00:00" }, { @@ -3871,20 +3537,6 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-28T18:53:25+00:00" }, { @@ -3943,20 +3595,6 @@ "symfony", "words" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-27T16:56:45+00:00" }, { @@ -4032,20 +3670,6 @@ "l10n", "localization" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-12T14:40:17+00:00" }, { @@ -4113,20 +3737,6 @@ ], "description": "Symfony Mailer Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-28T17:58:55+00:00" }, { @@ -4189,20 +3799,6 @@ "mime", "mime-type" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-17T03:29:44+00:00" }, { @@ -4270,20 +3866,6 @@ ], "description": "Symfony Monolog Bridge", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-12T16:45:47+00:00" }, { @@ -4403,20 +3985,6 @@ "notification", "notifier" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-27T16:56:45+00:00" }, { @@ -4471,20 +4039,6 @@ "configuration", "options" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-06T10:40:56+00:00" }, { @@ -4572,20 +4126,6 @@ "portable", "shim" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-05-08T16:50:20+00:00" }, { @@ -4644,20 +4184,6 @@ "portable", "shim" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-05-08T16:50:20+00:00" }, { @@ -4720,20 +4246,6 @@ "portable", "shim" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-05-08T16:50:20+00:00" }, { @@ -4797,20 +4309,6 @@ "portable", "shim" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-05-08T16:50:20+00:00" }, { @@ -4870,20 +4368,6 @@ "portable", "shim" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-05-08T16:50:20+00:00" }, { @@ -4942,20 +4426,6 @@ "portable", "shim" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-05-02T14:56:09+00:00" }, { @@ -5005,20 +4475,6 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-15T15:59:10+00:00" }, { @@ -5086,20 +4542,6 @@ "property path", "reflection" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-15T15:59:10+00:00" }, { @@ -5176,20 +4618,6 @@ "type", "validator" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-06T10:40:56+00:00" }, { @@ -5266,20 +4694,6 @@ "uri", "url" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-21T21:02:50+00:00" }, { @@ -5363,20 +4777,6 @@ ], "description": "Symfony SecurityBundle", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-22T00:36:07+00:00" }, { @@ -5450,20 +4850,6 @@ ], "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-21T21:19:41+00:00" }, { @@ -5523,20 +4909,6 @@ ], "description": "Symfony Security Component - CSRF Library", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-27T16:56:45+00:00" }, { @@ -5591,20 +4963,6 @@ ], "description": "Symfony Security Component - Guard", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-15T15:59:10+00:00" }, { @@ -5670,20 +5028,6 @@ ], "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-06T10:40:56+00:00" }, { @@ -5766,20 +5110,6 @@ ], "description": "Symfony Serializer Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-12T16:45:47+00:00" }, { @@ -5810,20 +5140,6 @@ "MIT" ], "description": "A pack for the Symfony serializer", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-28T16:26:24+00:00" }, { @@ -5932,20 +5248,6 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-27T16:56:45+00:00" }, { @@ -6010,20 +5312,6 @@ "utf-8", "utf8" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-16T13:02:39+00:00" }, { @@ -6101,20 +5389,6 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-12T16:45:47+00:00" }, { @@ -6273,20 +5547,6 @@ ], "description": "Symfony Twig Bridge", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-15T15:59:10+00:00" }, { @@ -6362,20 +5622,6 @@ ], "description": "Symfony TwigBundle", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-27T16:56:45+00:00" }, { @@ -6497,20 +5743,6 @@ ], "description": "Symfony Validator Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-28T18:26:18+00:00" }, { @@ -6586,20 +5818,6 @@ "debug", "dump" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-12T16:45:47+00:00" }, { @@ -6660,20 +5878,6 @@ "instantiate", "serialize" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-15T15:59:10+00:00" }, { @@ -6749,20 +5953,6 @@ "psr13", "push" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-27T16:56:45+00:00" }, { @@ -6822,20 +6012,6 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-28T17:58:55+00:00" }, { @@ -7005,12 +6181,6 @@ "safe writer", "webimpress" ], - "funding": [ - { - "url": "https://github.com/michalbundyra", - "type": "github" - } - ], "time": "2020-03-21T15:49:08+00:00" }, { @@ -7172,20 +6342,6 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-30T11:42:42+00:00" }, { @@ -7239,20 +6395,6 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-27T16:56:45+00:00" }, { @@ -7319,20 +6461,6 @@ ], "description": "Symfony DebugBundle", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-27T16:56:45+00:00" }, { @@ -7362,20 +6490,6 @@ "MIT" ], "description": "A debug pack for Symfony projects", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-07T10:08:51+00:00" }, { @@ -7437,20 +6551,6 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-03-30T11:42:42+00:00" }, { @@ -7519,20 +6619,6 @@ "scaffold", "scaffolding" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-05-08T13:53:05+00:00" }, { @@ -7598,20 +6684,6 @@ ], "description": "Symfony PHPUnit Bridge", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-28T17:58:55+00:00" }, { @@ -7734,20 +6806,6 @@ ], "description": "Symfony WebProfilerBundle", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-04-28T17:58:55+00:00" } ], @@ -7757,7 +6815,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^7.2.5", + "php": "^7.4", "ext-ctype": "*", "ext-iconv": "*" }, diff --git a/config/routes.yaml b/config/routes.yaml index 9f88088..f82d735 100644 --- a/config/routes.yaml +++ b/config/routes.yaml @@ -12,3 +12,18 @@ order_create: path: /api/v1/orders controller: App\Controller\OrderController::createAction methods: [POST] + +order_list: + path: /api/v1/orders + controller: App\Controller\OrderController::indexAction + methods: [GET] + +customer_create: + path: /api/v1/customers + controller: App\Controller\CustomerController::createAction + methods: [POST] + +customer_list: + path: /api/v1/customers + controller: App\Controller\CustomerController::indexAction + methods: [GET] diff --git a/src/Controller/AbstractApiController.php b/src/Controller/AbstractApiController.php new file mode 100644 index 0000000..8f4acaf --- /dev/null +++ b/src/Controller/AbstractApiController.php @@ -0,0 +1,11 @@ +getDoctrine()->getRepository(Customer::class)->findAll(); + + return $this->json($customers); + } + + public function createAction(Request $request): Response + { + return new Response(); + } +} diff --git a/src/Controller/OrderController.php b/src/Controller/OrderController.php index c4ca6a8..169cc12 100644 --- a/src/Controller/OrderController.php +++ b/src/Controller/OrderController.php @@ -4,12 +4,19 @@ namespace App\Controller; -use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use App\Entity\Order; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -class OrderController extends AbstractController +class OrderController extends AbstractApiController { + public function indexAction(Request $request): Response + { + $orders = $this->getDoctrine()->getRepository(Order::class)->findAll(); + + return $this->json($orders); + } + public function createAction(Request $request): Response { return new Response(); diff --git a/src/Controller/ProductController.php b/src/Controller/ProductController.php index f65dbbb..c0bf493 100644 --- a/src/Controller/ProductController.php +++ b/src/Controller/ProductController.php @@ -5,26 +5,16 @@ namespace App\Controller; use App\Entity\Product; -use Doctrine\Persistence\ObjectManager; -use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; -use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -class ProductController extends AbstractController +class ProductController extends AbstractApiController { - private ObjectManager $entityManager; - - public function __construct(ObjectManager $entityManager) - { - $this->entityManager = $entityManager; - } - public function indexAction(Request $request): Response { - $products = $this->entityManager->getRepository(Product::class)->findAll(); + $products = $this->getDoctrine()->getRepository(Product::class)->findAll(); - return new JsonResponse($products); + return $this->json($products); } public function createAction(Request $request): Response diff --git a/src/Entity/Order.php b/src/Entity/Order.php index 00aa545..ce55072 100644 --- a/src/Entity/Order.php +++ b/src/Entity/Order.php @@ -38,11 +38,11 @@ class Order private Collection $products; /** - * @var \DateTimeImmutable + * @var \DateTime * - * @ORM\Column(name="date_time", type="datetime_immutable") + * @ORM\Column(name="date_time", type="datetime") */ - private \DateTimeImmutable $dateTime; + private \DateTime $dateTime; /** * @var string|null @@ -81,17 +81,17 @@ public function setCustomer(Customer $customer): void } /** - * @return \DateTimeImmutable + * @return \DateTime */ - public function getDateTime(): \DateTimeImmutable + public function getDateTime(): \DateTime { return $this->dateTime; } /** - * @param \DateTimeImmutable $dateTime + * @param \DateTime $dateTime */ - public function setDateTime(\DateTimeImmutable $dateTime): void + public function setDateTime(\DateTime $dateTime): void { $this->dateTime = $dateTime; } diff --git a/src/Entity/Product.php b/src/Entity/Product.php index a5668f1..dc1b5e3 100644 --- a/src/Entity/Product.php +++ b/src/Entity/Product.php @@ -24,9 +24,9 @@ class Product /** * @var string * - * @ORM\Column(name="sku", type="string", length=100) + * @ORM\Column(name="code", type="string", length=100) */ - private string $sku; + private string $code; /** * @var string @@ -38,7 +38,7 @@ class Product /** * @var string * - * @ORM\Column(name="title", type="string") + * @ORM\Column(name="description", type="string") */ private string $description; @@ -60,17 +60,17 @@ public function getId(): ?int /** * @return string */ - public function getSku(): string + public function getCode(): string { - return $this->sku; + return $this->code; } /** - * @param string $sku + * @param string $code */ - public function setSku(string $sku): void + public function setCode(string $code): void { - $this->sku = $sku; + $this->code = $code; } /** diff --git a/src/Form/Type/CustomerType.php b/src/Form/Type/CustomerType.php new file mode 100644 index 0000000..ed8a165 --- /dev/null +++ b/src/Form/Type/CustomerType.php @@ -0,0 +1,30 @@ +add('email', EmailType::class) + ->add('phoneNumber', TextType::class) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Customer::class, + ]); + } +} diff --git a/src/Form/Type/OrderType.php b/src/Form/Type/OrderType.php new file mode 100644 index 0000000..aba0e83 --- /dev/null +++ b/src/Form/Type/OrderType.php @@ -0,0 +1,40 @@ +add('customer', EntityType::class, [ + 'class' => Customer::class + ]) + ->add('comments', TextType::class) + ->add('dateTime', DateTimeType::class) + ->add('products', EntityType::class, [ + 'class' => Product::class, + 'multiple' => true, + ]) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Order::class, + ]); + } +} diff --git a/src/Form/Type/ProductType.php b/src/Form/Type/ProductType.php new file mode 100644 index 0000000..41d3cdd --- /dev/null +++ b/src/Form/Type/ProductType.php @@ -0,0 +1,32 @@ +add('code', TextType::class) + ->add('title', TextType::class) + ->add('description', TextType::class) + ->add('price', IntegerType::class) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Product::class, + ]); + } +} diff --git a/src/Migrations/Version20200514200056.php b/src/Migrations/Version20200514200056.php new file mode 100644 index 0000000..5bed673 --- /dev/null +++ b/src/Migrations/Version20200514200056.php @@ -0,0 +1,58 @@ +abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql', 'Migration can only be executed safely on \'postgresql\'.'); + + $this->addSql('CREATE SEQUENCE app_product_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE app_order_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE app_customer_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE TABLE app_product (id INT NOT NULL, code VARCHAR(100) NOT NULL, title VARCHAR(255) NOT NULL, description VARCHAR(255) NOT NULL, price INT NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE TABLE app_order (id INT NOT NULL, customer_id INT DEFAULT NULL, date_time TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, comments TEXT DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE UNIQUE INDEX UNIQ_23FA1E559395C3F3 ON app_order (customer_id)'); + $this->addSql('COMMENT ON COLUMN app_order.date_time IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('CREATE TABLE order_product (order_id INT NOT NULL, product_id INT NOT NULL, PRIMARY KEY(order_id, product_id))'); + $this->addSql('CREATE INDEX IDX_2530ADE68D9F6D38 ON order_product (order_id)'); + $this->addSql('CREATE INDEX IDX_2530ADE64584665A ON order_product (product_id)'); + $this->addSql('CREATE TABLE app_customer (id INT NOT NULL, email VARCHAR(255) NOT NULL, phone_number VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('ALTER TABLE app_order ADD CONSTRAINT FK_23FA1E559395C3F3 FOREIGN KEY (customer_id) REFERENCES app_customer (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE order_product ADD CONSTRAINT FK_2530ADE68D9F6D38 FOREIGN KEY (order_id) REFERENCES app_order (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE order_product ADD CONSTRAINT FK_2530ADE64584665A FOREIGN KEY (product_id) REFERENCES app_product (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + } + + public function down(Schema $schema) : void + { + // this down() migration is auto-generated, please modify it to your needs + $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql', 'Migration can only be executed safely on \'postgresql\'.'); + + $this->addSql('CREATE SCHEMA public'); + $this->addSql('ALTER TABLE order_product DROP CONSTRAINT FK_2530ADE64584665A'); + $this->addSql('ALTER TABLE order_product DROP CONSTRAINT FK_2530ADE68D9F6D38'); + $this->addSql('ALTER TABLE app_order DROP CONSTRAINT FK_23FA1E559395C3F3'); + $this->addSql('DROP SEQUENCE app_product_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE app_order_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE app_customer_id_seq CASCADE'); + $this->addSql('DROP TABLE app_product'); + $this->addSql('DROP TABLE app_order'); + $this->addSql('DROP TABLE order_product'); + $this->addSql('DROP TABLE app_customer'); + } +} diff --git a/src/Migrations/Version20200514200057.php b/src/Migrations/Version20200514200057.php new file mode 100644 index 0000000..4635fbb --- /dev/null +++ b/src/Migrations/Version20200514200057.php @@ -0,0 +1,34 @@ +abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql', 'Migration can only be executed safely on \'postgresql\'.'); + + $this->addSql("INSERT INTO app_customer VALUES (1, 'test@email.com', '+49123456789')"); + } + + public function down(Schema $schema) : void + { + // this down() migration is auto-generated, please modify it to your needs + $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql', 'Migration can only be executed safely on \'postgresql\'.'); + + } +} From 99133bf1cbbc4a9b7addb7fb7c61a0296248b68c Mon Sep 17 00:00:00 2001 From: Oleksandr Kurakin Date: Wed, 5 Aug 2020 21:41:08 +0200 Subject: [PATCH 5/8] response dto --- composer.json | 2 + composer.lock | 3026 +++++++++++++---- config/bundles.php | 2 + config/packages/dev/jms_serializer.yaml | 7 + config/packages/doctrine_migrations.yaml | 6 +- config/packages/fos_rest.yaml | 17 + config/packages/jms_serializer.yaml | 13 + config/packages/prod/jms_serializer.yaml | 6 + config/routes.yaml | 32 +- src/Controller/AbstractApiController.php | 41 +- src/Controller/CustomerController.php | 24 - .../CustomerStatisticController.php | 31 + src/Controller/OrderController.php | 19 +- src/Controller/ProductController.php | 24 - src/Dto/Response/CustomerResponseDto.php | 20 + .../Response/CustomerStatisticResponseDto.php | 57 + src/Dto/Response/OrderResponseDto.php | 30 + src/Dto/Response/ProductResponseDto.php | 30 + src/Dto/Response/ResponseDtoInterface.php | 9 + .../AbstractResponseDtoTransformer.php | 21 + .../CustomerResponseDtoTransformer.php | 26 + ...ustomerStatisticResponseDtoTransformer.php | 38 + .../OrderResponseDtoTransformer.php | 39 + .../ProductResponseDtoTransformer.php | 28 + .../ResponseDtoTransformerInterface.php | 14 + src/Entity/Order.php | 28 +- src/Form/Type/CustomerType.php | 30 - src/Form/Type/OrderType.php | 40 - src/Form/Type/ProductType.php | 32 - ...14200056.php => Version20200731121119.php} | 34 +- ...14200057.php => Version20200731200057.php} | 12 +- src/Repository/OrderRepository.php | 41 + symfony.lock | 45 +- 33 files changed, 2914 insertions(+), 910 deletions(-) create mode 100644 config/packages/dev/jms_serializer.yaml create mode 100644 config/packages/fos_rest.yaml create mode 100644 config/packages/jms_serializer.yaml create mode 100644 config/packages/prod/jms_serializer.yaml delete mode 100644 src/Controller/CustomerController.php create mode 100644 src/Controller/CustomerStatisticController.php delete mode 100644 src/Controller/ProductController.php create mode 100644 src/Dto/Response/CustomerResponseDto.php create mode 100644 src/Dto/Response/CustomerStatisticResponseDto.php create mode 100644 src/Dto/Response/OrderResponseDto.php create mode 100644 src/Dto/Response/ProductResponseDto.php create mode 100644 src/Dto/Response/ResponseDtoInterface.php create mode 100644 src/Dto/Response/Transformer/AbstractResponseDtoTransformer.php create mode 100644 src/Dto/Response/Transformer/CustomerResponseDtoTransformer.php create mode 100644 src/Dto/Response/Transformer/CustomerStatisticResponseDtoTransformer.php create mode 100644 src/Dto/Response/Transformer/OrderResponseDtoTransformer.php create mode 100644 src/Dto/Response/Transformer/ProductResponseDtoTransformer.php create mode 100644 src/Dto/Response/Transformer/ResponseDtoTransformerInterface.php delete mode 100644 src/Form/Type/CustomerType.php delete mode 100644 src/Form/Type/OrderType.php delete mode 100644 src/Form/Type/ProductType.php rename src/Migrations/{Version20200514200056.php => Version20200731121119.php} (74%) rename src/Migrations/{Version20200514200057.php => Version20200731200057.php} (51%) create mode 100644 src/Repository/OrderRepository.php diff --git a/composer.json b/composer.json index ba1f3d1..6ee7e53 100644 --- a/composer.json +++ b/composer.json @@ -5,6 +5,8 @@ "php": "^7.4", "ext-ctype": "*", "ext-iconv": "*", + "friendsofsymfony/rest-bundle": "^3.0", + "jms/serializer-bundle": "^3.7", "sensio/framework-extra-bundle": "^5.1", "symfony/asset": "5.0.*", "symfony/console": "5.0.*", diff --git a/composer.lock b/composer.lock index b492fa4..e397e58 100644 --- a/composer.lock +++ b/composer.lock @@ -4,26 +4,95 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f38827ecf29b92cabde17a57e61db3ce", + "content-hash": "cd920158d30d1f71277b935c5184bb51", "packages": [ + { + "name": "composer/package-versions-deprecated", + "version": "1.10.99", + "source": { + "type": "git", + "url": "https://github.com/composer/package-versions-deprecated.git", + "reference": "dd51b4443d58b34b6d9344cf4c288e621c9a826f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/dd51b4443d58b34b6d9344cf4c288e621c9a826f", + "reference": "dd51b4443d58b34b6d9344cf4c288e621c9a826f", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0 || ^2.0", + "php": "^7" + }, + "replace": { + "ocramius/package-versions": "1.10.99" + }, + "require-dev": { + "composer/composer": "^1.9.3 || ^2.0@dev", + "ext-zip": "^1.13", + "phpunit/phpunit": "^6.5 || ^7" + }, + "type": "composer-plugin", + "extra": { + "class": "PackageVersions\\Installer", + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "PackageVersions\\": "src/PackageVersions" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2020-07-15T08:39:18+00:00" + }, { "name": "doctrine/annotations", - "version": "1.10.2", + "version": "1.10.3", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "b9d758e831c70751155c698c2f7df4665314a1cb" + "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/b9d758e831c70751155c698c2f7df4665314a1cb", - "reference": "b9d758e831c70751155c698c2f7df4665314a1cb", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5db60a4969eba0e0c197a19c077780aadbc43c5d", + "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d", "shasum": "" }, "require": { "doctrine/lexer": "1.*", "ext-tokenizer": "*", - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/cache": "1.*", @@ -73,24 +142,24 @@ "docblock", "parser" ], - "time": "2020-04-20T09:18:32+00:00" + "time": "2020-05-25T17:24:27+00:00" }, { "name": "doctrine/cache", - "version": "1.10.0", + "version": "1.10.2", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "382e7f4db9a12dc6c19431743a2b096041bcdd62" + "reference": "13e3381b25847283a91948d04640543941309727" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/382e7f4db9a12dc6c19431743a2b096041bcdd62", - "reference": "382e7f4db9a12dc6c19431743a2b096041bcdd62", + "url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727", + "reference": "13e3381b25847283a91948d04640543941309727", "shasum": "" }, "require": { - "php": "~7.1" + "php": "~7.1 || ^8.0" }, "conflict": { "doctrine/common": ">2.2,<2.4" @@ -155,37 +224,46 @@ "redis", "xcache" ], - "time": "2019-11-29T15:36:20+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", + "type": "tidelift" + } + ], + "time": "2020-07-07T18:54:01+00:00" }, { "name": "doctrine/collections", - "version": "1.6.4", + "version": "1.6.7", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7" + "reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7", - "reference": "6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7", + "url": "https://api.github.com/repos/doctrine/collections/zipball/55f8b799269a1a472457bd1a41b4f379d4cfba4a", + "reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.1.3 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", "phpstan/phpstan-shim": "^0.9.2", "phpunit/phpunit": "^7.0", - "vimeo/psalm": "^3.2.2" + "vimeo/psalm": "^3.8.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" @@ -225,20 +303,20 @@ "iterators", "php" ], - "time": "2019-11-13T13:07:11+00:00" + "time": "2020-07-27T17:53:49+00:00" }, { "name": "doctrine/common", - "version": "2.12.0", + "version": "2.13.3", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "2053eafdf60c2172ee1373d1b9289ba1db7f1fc6" + "reference": "f3812c026e557892c34ef37f6ab808a6b567da7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/2053eafdf60c2172ee1373d1b9289ba1db7f1fc6", - "reference": "2053eafdf60c2172ee1373d1b9289ba1db7f1fc6", + "url": "https://api.github.com/repos/doctrine/common/zipball/f3812c026e557892c34ef37f6ab808a6b567da7f", + "reference": "f3812c026e557892c34ef37f6ab808a6b567da7f", "shasum": "" }, "require": { @@ -248,9 +326,9 @@ "doctrine/event-manager": "^1.0", "doctrine/inflector": "^1.0", "doctrine/lexer": "^1.0", - "doctrine/persistence": "^1.1", + "doctrine/persistence": "^1.3.3", "doctrine/reflection": "^1.0", - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^1.0", @@ -308,7 +386,21 @@ "doctrine", "php" ], - "time": "2020-01-10T15:49:25+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcommon", + "type": "tidelift" + } + ], + "time": "2020-06-05T16:46:05+00:00" }, { "name": "doctrine/dbal", @@ -406,23 +498,23 @@ }, { "name": "doctrine/doctrine-bundle", - "version": "2.0.8", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "b0e0deb6e700438401ede433a15a6372d2285202" + "reference": "0fb513842c78b43770597ef3c487cdf79d944db3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/b0e0deb6e700438401ede433a15a6372d2285202", - "reference": "b0e0deb6e700438401ede433a15a6372d2285202", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/0fb513842c78b43770597ef3c487cdf79d944db3", + "reference": "0fb513842c78b43770597ef3c487cdf79d944db3", "shasum": "" }, "require": { "doctrine/dbal": "^2.9.0", "doctrine/persistence": "^1.3.3", - "jdorn/sql-formatter": "^1.2.16", - "php": "^7.1", + "doctrine/sql-formatter": "^1.0.1", + "php": "^7.1 || ^8.0", "symfony/cache": "^4.3.3|^5.0", "symfony/config": "^4.3.3|^5.0", "symfony/console": "^3.4.30|^4.3.3|^5.0", @@ -456,7 +548,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.1.x-dev" } }, "autoload": { @@ -494,39 +586,55 @@ "orm", "persistence" ], - "time": "2020-04-23T10:52:09+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-bundle", + "type": "tidelift" + } + ], + "time": "2020-05-25T19:56:00+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", - "version": "2.1.2", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", - "reference": "856437e8de96a70233e1f0cc2352fc8dd15a899d" + "reference": "96e730b0ffa0bb39c0f913c1966213f1674bf249" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/856437e8de96a70233e1f0cc2352fc8dd15a899d", - "reference": "856437e8de96a70233e1f0cc2352fc8dd15a899d", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/96e730b0ffa0bb39c0f913c1966213f1674bf249", + "reference": "96e730b0ffa0bb39c0f913c1966213f1674bf249", "shasum": "" }, "require": { "doctrine/doctrine-bundle": "~1.0|~2.0", - "doctrine/migrations": "^2.2", - "php": "^7.1", + "doctrine/migrations": "~3.0", + "php": "^7.2", "symfony/framework-bundle": "~3.4|~4.0|~5.0" }, "require-dev": { "doctrine/coding-standard": "^5.0", - "mikey179/vfsstream": "^1.6", - "phpstan/phpstan": "^0.9.2", - "phpstan/phpstan-strict-rules": "^0.9", + "doctrine/orm": "^2.6", + "phpstan/phpstan": "^0.11", + "phpstan/phpstan-deprecation-rules": "^0.11", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-strict-rules": "^0.11", "phpunit/phpunit": "^6.4|^7.0" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -562,7 +670,21 @@ "migrations", "schema" ], - "time": "2019-11-13T12:57:41+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-migrations-bundle", + "type": "tidelift" + } + ], + "time": "2020-06-15T06:04:38+00:00" }, { "name": "doctrine/event-manager", @@ -642,20 +764,20 @@ }, { "name": "doctrine/inflector", - "version": "1.4.0", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "ab5de36233a1995f9c776c741b803eb8207aebef" + "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/ab5de36233a1995f9c776c741b803eb8207aebef", - "reference": "ab5de36233a1995f9c776c741b803eb8207aebef", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/4650c8b30c753a76bf44fb2ed00117d6f367490c", + "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c", "shasum": "" }, "require": { - "php": "^7.2" + "php": "^7.2 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^7.0", @@ -716,24 +838,38 @@ "uppercase", "words" ], - "time": "2020-05-06T11:01:57+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2020-05-29T07:19:59+00:00" }, { "name": "doctrine/instantiator", - "version": "1.3.0", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", - "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", @@ -772,24 +908,38 @@ "constructor", "instantiate" ], - "time": "2019-10-21T16:45:58+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-05-29T17:27:14+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6" + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", - "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", "shasum": "" }, "require": { - "php": "^7.2" + "php": "^7.2 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", @@ -834,46 +984,63 @@ "parser", "php" ], - "time": "2019-10-30T14:39:59+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2020-05-25T17:44:05+00:00" }, { "name": "doctrine/migrations", - "version": "2.2.1", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "a3987131febeb0e9acb3c47ab0df0af004588934" + "reference": "69eaf2ca5bc48357b43ddbdc31ccdffc0e2a0882" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/a3987131febeb0e9acb3c47ab0df0af004588934", - "reference": "a3987131febeb0e9acb3c47ab0df0af004588934", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/69eaf2ca5bc48357b43ddbdc31ccdffc0e2a0882", + "reference": "69eaf2ca5bc48357b43ddbdc31ccdffc0e2a0882", "shasum": "" }, "require": { - "doctrine/dbal": "^2.9", + "doctrine/dbal": "^2.10", + "doctrine/event-manager": "^1.0", "ocramius/package-versions": "^1.3", "ocramius/proxy-manager": "^2.0.2", - "php": "^7.1", + "php": "^7.2", + "psr/log": "^1.1.3", "symfony/console": "^3.4||^4.0||^5.0", "symfony/stopwatch": "^3.4||^4.0||^5.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0", + "doctrine/coding-standard": "^7.0", "doctrine/orm": "^2.6", + "doctrine/persistence": "^1.3||^2.0", + "doctrine/sql-formatter": "^1.0", "ext-pdo_sqlite": "*", - "jdorn/sql-formatter": "^1.1", - "mikey179/vfsstream": "^1.6", - "phpstan/phpstan": "^0.10", - "phpstan/phpstan-deprecation-rules": "^0.10", - "phpstan/phpstan-phpunit": "^0.10", - "phpstan/phpstan-strict-rules": "^0.10", - "phpunit/phpunit": "^7.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-deprecation-rules": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpstan/phpstan-symfony": "^0.12", + "phpunit/phpunit": "^8.4", "symfony/process": "^3.4||^4.0||^5.0", "symfony/yaml": "^3.4||^4.0||^5.0" }, "suggest": { - "jdorn/sql-formatter": "Allows to generate formatted SQL with the diff command.", + "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.", "symfony/yaml": "Allows the use of yaml for migration configuration files." }, "bin": [ @@ -882,7 +1049,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -916,31 +1083,47 @@ "migrations", "php" ], - "time": "2019-12-04T06:09:14+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fmigrations", + "type": "tidelift" + } + ], + "time": "2020-06-21T08:55:42+00:00" }, { "name": "doctrine/orm", - "version": "v2.7.2", + "version": "v2.7.3", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "dafe298ce5d0b995ebe1746670704c0a35868a6a" + "reference": "d95e03ba660d50d785a9925f41927fef0ee553cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/dafe298ce5d0b995ebe1746670704c0a35868a6a", - "reference": "dafe298ce5d0b995ebe1746670704c0a35868a6a", + "url": "https://api.github.com/repos/doctrine/orm/zipball/d95e03ba660d50d785a9925f41927fef0ee553cf", + "reference": "d95e03ba660d50d785a9925f41927fef0ee553cf", "shasum": "" }, "require": { "doctrine/annotations": "^1.8", "doctrine/cache": "^1.9.1", "doctrine/collections": "^1.5", - "doctrine/common": "^2.11", + "doctrine/common": "^2.11 || ^3.0", "doctrine/dbal": "^2.9.3", "doctrine/event-manager": "^1.1", + "doctrine/inflector": "^1.0", "doctrine/instantiator": "^1.3", - "doctrine/persistence": "^1.2", + "doctrine/lexer": "^1.0", + "doctrine/persistence": "^1.3.3 || ^2.0", "ext-pdo": "*", "ocramius/package-versions": "^1.2", "php": "^7.1", @@ -948,8 +1131,10 @@ }, "require-dev": { "doctrine/coding-standard": "^5.0", + "phpstan/phpstan": "^0.12.18", "phpunit/phpunit": "^7.5", - "symfony/yaml": "^3.4|^4.0|^5.0" + "symfony/yaml": "^3.4|^4.0|^5.0", + "vimeo/psalm": "^3.11" }, "suggest": { "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" @@ -1000,7 +1185,21 @@ "database", "orm" ], - "time": "2020-03-19T06:41:02+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine/orm", + "type": "tidelift" + } + ], + "time": "2020-05-26T16:03:49+00:00" }, { "name": "doctrine/persistence", @@ -1147,58 +1346,346 @@ "email": "jonwage@gmail.com" }, { - "name": "Johannes Schmitt", + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Reflection project is a simple library used by the various Doctrine projects which adds some additional functionality on top of the reflection functionality that comes with PHP. It allows you to get the reflection information about classes, methods and properties statically.", + "homepage": "https://www.doctrine-project.org/projects/reflection.html", + "keywords": [ + "reflection", + "static" + ], + "time": "2020-03-27T11:06:43+00:00" + }, + { + "name": "doctrine/sql-formatter", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/sql-formatter.git", + "reference": "5458bdcf176f6a53292e3f0cc73f292d6302fb0f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/5458bdcf176f6a53292e3f0cc73f292d6302fb0f", + "reference": "5458bdcf176f6a53292e3f0cc73f292d6302fb0f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4" + }, + "bin": [ + "bin/sql-formatter" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\SqlFormatter\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Dorn", + "email": "jeremy@jeremydorn.com", + "homepage": "http://jeremydorn.com/" + } + ], + "description": "a PHP SQL highlighting library", + "homepage": "https://github.com/doctrine/sql-formatter/", + "keywords": [ + "highlight", + "sql" + ], + "time": "2020-05-29T18:32:49+00:00" + }, + { + "name": "egulias/email-validator", + "version": "2.1.18", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "cfa3d44471c7f5bfb684ac2b0da7114283d78441" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/cfa3d44471c7f5bfb684ac2b0da7114283d78441", + "reference": "cfa3d44471c7f5bfb684ac2b0da7114283d78441", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.10" + }, + "require-dev": { + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "time": "2020-06-16T20:11:17+00:00" + }, + { + "name": "friendsofsymfony/rest-bundle", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfSymfony/FOSRestBundle.git", + "reference": "2a6f137d1b46559cdb5137d1204aa82517d0f1fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfSymfony/FOSRestBundle/zipball/2a6f137d1b46559cdb5137d1204aa82517d0f1fc", + "reference": "2a6f137d1b46559cdb5137d1204aa82517d0f1fc", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "psr/log": "^1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/framework-bundle": "^4.4.1|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/security-core": "^3.4|^4.3|^5.0", + "willdurand/jsonp-callback-validator": "^1.0", + "willdurand/negotiation": "^2.0" + }, + "conflict": { + "doctrine/inflector": "1.4.0", + "jms/serializer": "<1.13.0", + "jms/serializer-bundle": "<2.4.3|3.0.0", + "sensio/framework-extra-bundle": "<5.2.3", + "symfony/error-handler": "<4.4.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "jms/serializer": "^1.13|^2.0|^3.0", + "jms/serializer-bundle": "^2.4.3|^3.0.1", + "phpoption/phpoption": "^1.1", + "psr/http-message": "^1.0", + "sensio/framework-extra-bundle": "^5.2.3", + "symfony/asset": "^4.4|^5.0", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/form": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0", + "symfony/phpunit-bridge": "^4.1.8|^5.0", + "symfony/security-bundle": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0", + "symfony/twig-bundle": "^4.4|^5.0", + "symfony/validator": "^4.4|^5.0", + "symfony/web-profiler-bundle": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "jms/serializer-bundle": "Add support for advanced serialization capabilities, recommended, requires ^2.0|^3.0", + "sensio/framework-extra-bundle": "Add support for the request body converter and the view response listener, requires ^3.0", + "symfony/serializer": "Add support for basic serialization capabilities and xml decoding, requires ^2.7|^3.0", + "symfony/validator": "Add support for validation capabilities in the ParamFetcher, requires ^2.7|^3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "FOS\\RestBundle\\": "" + }, + "exclude-from-classmap": [ + "Resources/", + "Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lukas Kahwe Smith", + "email": "smith@pooteeweet.org" + }, + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com" + }, + { + "name": "FriendsOfSymfony Community", + "homepage": "https://github.com/friendsofsymfony/FOSRestBundle/contributors" + } + ], + "description": "This Bundle provides various tools to rapidly develop RESTful API's with Symfony", + "homepage": "http://friendsofsymfony.github.com", + "keywords": [ + "rest" + ], + "time": "2020-07-14T14:43:02+00:00" + }, + { + "name": "jms/metadata", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/metadata.git", + "reference": "6eb35fce7142234946d58d13e1aa829e9b78b095" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/6eb35fce7142234946d58d13e1aa829e9b78b095", + "reference": "6eb35fce7142234946d58d13e1aa829e9b78b095", + "shasum": "" + }, + "require": { + "php": "^7.2" + }, + "require-dev": { + "doctrine/cache": "^1.0", + "doctrine/coding-standard": "^4.0", + "phpunit/phpunit": "^7.0", + "symfony/cache": "^3.1|^4.0|^5.0", + "symfony/dependency-injection": "^3.1|^4.0|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Metadata\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", "email": "schmittjoh@gmail.com" }, { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" } ], - "description": "The Doctrine Reflection project is a simple library used by the various Doctrine projects which adds some additional functionality on top of the reflection functionality that comes with PHP. It allows you to get the reflection information about classes, methods and properties statically.", - "homepage": "https://www.doctrine-project.org/projects/reflection.html", + "description": "Class/method/property metadata management in PHP", "keywords": [ - "reflection", - "static" + "annotations", + "metadata", + "xml", + "yaml" ], - "time": "2020-03-27T11:06:43+00:00" + "time": "2020-06-06T16:52:59+00:00" }, { - "name": "egulias/email-validator", - "version": "2.1.17", + "name": "jms/serializer", + "version": "3.8.0", "source": { "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ade6887fd9bd74177769645ab5c474824f8a418a" + "url": "https://github.com/schmittjoh/serializer.git", + "reference": "13ead2c318da7965eafda9348bc70eadc872baac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ade6887fd9bd74177769645ab5c474824f8a418a", - "reference": "ade6887fd9bd74177769645ab5c474824f8a418a", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/13ead2c318da7965eafda9348bc70eadc872baac", + "reference": "13ead2c318da7965eafda9348bc70eadc872baac", "shasum": "" }, "require": { - "doctrine/lexer": "^1.0.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.10" + "doctrine/annotations": "^1.0", + "doctrine/instantiator": "^1.0.3", + "doctrine/lexer": "^1.1", + "jms/metadata": "^2.0", + "php": "^7.2" }, "require-dev": { - "dominicsayers/isemail": "^3.0.7", - "phpunit/phpunit": "^4.8.36|^7.5.15", - "satooshi/php-coveralls": "^1.0.1" + "doctrine/coding-standard": "^5.0", + "doctrine/orm": "~2.1", + "doctrine/persistence": "^1.3.3|^2.0|^3.0", + "doctrine/phpcr-odm": "^1.3|^2.0", + "ext-pdo_sqlite": "*", + "jackalope/jackalope-doctrine-dbal": "^1.1.5", + "ocramius/proxy-manager": "^1.0|^2.0", + "phpunit/phpunit": "^8.0||^9.0", + "psr/container": "^1.0", + "symfony/dependency-injection": "^3.0|^4.0|^5.0", + "symfony/expression-language": "^3.0|^4.0|^5.0", + "symfony/filesystem": "^3.0|^4.0|^5.0", + "symfony/form": "^3.0|^4.0|^5.0", + "symfony/translation": "^3.0|^4.0|^5.0", + "symfony/validator": "^3.1.9|^4.0|^5.0", + "symfony/yaml": "^3.3|^4.0|^5.0", + "twig/twig": "~1.34|~2.4|^3.0" }, "suggest": { - "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + "doctrine/cache": "Required if you like to use cache functionality.", + "doctrine/collections": "Required if you like to use doctrine collection types as ArrayCollection.", + "symfony/yaml": "Required if you'd like to use the YAML metadata format." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "3.8-dev" } }, "autoload": { "psr-4": { - "Egulias\\EmailValidator\\": "EmailValidator" + "JMS\\Serializer\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1207,49 +1694,79 @@ ], "authors": [ { - "name": "Eduardo Gulias Davis" + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" } ], - "description": "A library for validating emails against several RFCs", - "homepage": "https://github.com/egulias/EmailValidator", + "description": "Library for (de-)serializing data of any complexity; supports XML, JSON, and YAML.", + "homepage": "http://jmsyst.com/libs/serializer", "keywords": [ - "email", - "emailvalidation", - "emailvalidator", - "validation", - "validator" + "deserialization", + "jaxb", + "json", + "serialization", + "xml" + ], + "funding": [ + { + "url": "https://github.com/goetas", + "type": "github" + } ], - "time": "2020-02-13T22:36:52+00:00" + "time": "2020-06-28T11:22:30+00:00" }, { - "name": "jdorn/sql-formatter", - "version": "v1.2.17", + "name": "jms/serializer-bundle", + "version": "3.7.0", "source": { "type": "git", - "url": "https://github.com/jdorn/sql-formatter.git", - "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc" + "url": "https://github.com/schmittjoh/JMSSerializerBundle.git", + "reference": "0ee8b75bfc484a342aa0471e3c6d9ad96fb430cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc", - "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc", + "url": "https://api.github.com/repos/schmittjoh/JMSSerializerBundle/zipball/0ee8b75bfc484a342aa0471e3c6d9ad96fb430cf", + "reference": "0ee8b75bfc484a342aa0471e3c6d9ad96fb430cf", "shasum": "" }, "require": { - "php": ">=5.2.4" + "jms/metadata": "^2.3", + "jms/serializer": "^3.0", + "php": "^7.2", + "symfony/dependency-injection": "^3.3 || ^4.0 || ^5.0", + "symfony/framework-bundle": "^3.0 || ^4.0 || ^5.0" }, "require-dev": { - "phpunit/phpunit": "3.7.*" + "doctrine/orm": "^2.4", + "phpunit/phpunit": "^6.0|^7.0", + "symfony/expression-language": "^3.0 || ^4.0 || ^5.0", + "symfony/finder": "^3.0 || ^4.0 || ^5.0", + "symfony/form": "^3.0 || ^4.0 || ^5.0", + "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0", + "symfony/twig-bundle": "*", + "symfony/validator": "^3.0 || ^4.0 || ^5.0", + "symfony/yaml": "^3.0 || ^4.0 || ^5.0" }, - "type": "library", + "suggest": { + "jms/di-extra-bundle": "Required to get lazy loading (de)serialization visitors, ^1.3", + "symfony/finder": "Required for cache warmup, supported versions ^3.0|^4.0" + }, + "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "3.7-dev" } }, "autoload": { - "classmap": [ - "lib" + "psr-4": { + "JMS\\SerializerBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1258,18 +1775,29 @@ ], "authors": [ { - "name": "Jeremy Dorn", - "email": "jeremy@jeremydorn.com", - "homepage": "http://jeremydorn.com/" + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" } ], - "description": "a PHP SQL highlighting library", - "homepage": "https://github.com/jdorn/sql-formatter/", + "description": "Allows you to easily serialize, and deserialize data of any complexity", + "homepage": "http://jmsyst.com/bundles/JMSSerializerBundle", "keywords": [ - "highlight", - "sql" + "deserialization", + "json", + "serialization", + "xml" + ], + "funding": [ + { + "url": "https://github.com/goetas", + "type": "github" + } ], - "time": "2014-01-12T16:20:24+00:00" + "time": "2020-06-28T11:26:21+00:00" }, { "name": "laminas/laminas-code", @@ -1392,16 +1920,16 @@ }, { "name": "laminas/laminas-zendframework-bridge", - "version": "1.0.3", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/laminas/laminas-zendframework-bridge.git", - "reference": "bfbbdb6c998d50dbf69d2187cb78a5f1fa36e1e9" + "reference": "fcd87520e4943d968557803919523772475e8ea3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/bfbbdb6c998d50dbf69d2187cb78a5f1fa36e1e9", - "reference": "bfbbdb6c998d50dbf69d2187cb78a5f1fa36e1e9", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/fcd87520e4943d968557803919523772475e8ea3", + "reference": "fcd87520e4943d968557803919523772475e8ea3", "shasum": "" }, "require": { @@ -1440,24 +1968,30 @@ "laminas", "zf" ], - "time": "2020-04-03T16:01:00+00:00" + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-05-20T16:45:56+00:00" }, { "name": "monolog/monolog", - "version": "2.0.2", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8" + "reference": "f9eee5cec93dfb313a38b6b288741e84e53f02d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c861fcba2ca29404dc9e617eedd9eff4616986b8", - "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f9eee5cec93dfb313a38b6b288741e84e53f02d5", + "reference": "f9eee5cec93dfb313a38b6b288741e84e53f02d5", "shasum": "" }, "require": { - "php": "^7.2", + "php": ">=7.2", "psr/log": "^1.0.1" }, "provide": { @@ -1468,11 +2002,11 @@ "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^6.0", "graylog2/gelf-php": "^1.4.2", - "jakub-onderka/php-parallel-lint": "^0.9", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", + "php-parallel-lint/php-parallel-lint": "^1.0", "phpspec/prophecy": "^1.6.1", - "phpunit/phpunit": "^8.3", + "phpunit/phpunit": "^8.5", "predis/predis": "^1.1", "rollbar/rollbar": "^1.3", "ruflin/elastica": ">=0.90 <3.0", @@ -1521,58 +2055,17 @@ "logging", "psr-3" ], - "time": "2019-12-20T14:22:59+00:00" - }, - { - "name": "ocramius/package-versions", - "version": "1.8.0", - "source": { - "type": "git", - "url": "https://github.com/Ocramius/PackageVersions.git", - "reference": "421679846270a5772534828013a93be709fb13df" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/421679846270a5772534828013a93be709fb13df", - "reference": "421679846270a5772534828013a93be709fb13df", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.1.0 || ^2.0", - "php": "^7.4.0" - }, - "require-dev": { - "composer/composer": "^1.9.3 || ^2.0@dev", - "doctrine/coding-standard": "^7.0.2", - "ext-zip": "^1.15.0", - "infection/infection": "^0.15.3", - "phpunit/phpunit": "^9.0.1", - "vimeo/psalm": "^3.9.3" - }, - "type": "composer-plugin", - "extra": { - "class": "PackageVersions\\Installer", - "branch-alias": { - "dev-master": "1.99.x-dev" - } - }, - "autoload": { - "psr-4": { - "PackageVersions\\": "src/PackageVersions" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "funding": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" } ], - "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", - "time": "2020-04-06T17:43:35+00:00" + "time": "2020-07-23T08:41:23+00:00" }, { "name": "ocramius/proxy-manager", @@ -1651,25 +2144,25 @@ }, { "name": "phpdocumentor/reflection-common", - "version": "2.1.0", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", - "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -1696,32 +2189,31 @@ "reflection", "static analysis" ], - "time": "2020-04-27T09:25:28+00:00" + "time": "2020-06-27T09:03:43+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.1.0", + "version": "5.2.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" + "reference": "3170448f5769fe19f456173d833734e0ff1b84df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", - "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/3170448f5769fe19f456173d833734e0ff1b84df", + "reference": "3170448f5769fe19f456173d833734e0ff1b84df", "shasum": "" }, "require": { - "ext-filter": "^7.1", - "php": "^7.2", - "phpdocumentor/reflection-common": "^2.0", - "phpdocumentor/type-resolver": "^1.0", - "webmozart/assert": "^1" + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" }, "require-dev": { - "doctrine/instantiator": "^1", - "mockery/mockery": "^1" + "mockery/mockery": "~1.3.2" }, "type": "library", "extra": { @@ -1749,34 +2241,33 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2020-02-22T12:28:44+00:00" + "time": "2020-07-20T20:05:34+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.1.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "7462d5f123dfc080dfdf26897032a6513644fc95" + "reference": "e878a14a65245fbe78f8080eba03b47c3b705651" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95", - "reference": "7462d5f123dfc080dfdf26897032a6513644fc95", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651", + "reference": "e878a14a65245fbe78f8080eba03b47c3b705651", "shasum": "" }, "require": { - "php": "^7.2", + "php": "^7.2 || ^8.0", "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "^7.2", - "mockery/mockery": "~1" + "ext-tokenizer": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-1.x": "1.x-dev" } }, "autoload": { @@ -1795,7 +2286,7 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2020-02-18T18:59:58+00:00" + "time": "2020-06-27T10:12:23+00:00" }, { "name": "psr/cache", @@ -2036,16 +2527,16 @@ }, { "name": "sensio/framework-extra-bundle", - "version": "v5.5.5", + "version": "v5.5.6", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", - "reference": "c76bb1c5c67840ecb6d9be8e9d8d7036e375e317" + "reference": "b49f079d8a87a6e6dd434062085ff5a132af466b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/c76bb1c5c67840ecb6d9be8e9d8d7036e375e317", - "reference": "c76bb1c5c67840ecb6d9be8e9d8d7036e375e317", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/b49f079d8a87a6e6dd434062085ff5a132af466b", + "reference": "b49f079d8a87a6e6dd434062085ff5a132af466b", "shasum": "" }, "require": { @@ -2105,24 +2596,24 @@ "annotations", "controllers" ], - "time": "2020-05-06T12:12:33+00:00" + "time": "2020-06-15T20:28:02+00:00" }, { "name": "symfony/asset", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "be35f49cf2cf1c54de30bc31d2c5ff3c1d880be8" + "reference": "aaf4ba865c02f6df999166a0148d56f2b11b11fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/be35f49cf2cf1c54de30bc31d2c5ff3c1d880be8", - "reference": "be35f49cf2cf1c54de30bc31d2c5ff3c1d880be8", + "url": "https://api.github.com/repos/symfony/asset/zipball/aaf4ba865c02f6df999166a0148d56f2b11b11fb", + "reference": "aaf4ba865c02f6df999166a0148d56f2b11b11fb", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "require-dev": { "symfony/http-foundation": "^4.4|^5.0", @@ -2161,24 +2652,38 @@ ], "description": "Symfony Asset Component", "homepage": "https://symfony.com", - "time": "2020-04-12T14:40:17+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-30T20:12:43+00:00" }, { "name": "symfony/cache", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "0c5f5b1882dc82b255a4bdead4ed3c7738cddc04" + "reference": "5da40a385c8182d18f4cca960bce7191c8f24e07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/0c5f5b1882dc82b255a4bdead4ed3c7738cddc04", - "reference": "0c5f5b1882dc82b255a4bdead4ed3c7738cddc04", + "url": "https://api.github.com/repos/symfony/cache/zipball/5da40a385c8182d18f4cca960bce7191c8f24e07", + "reference": "5da40a385c8182d18f4cca960bce7191c8f24e07", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/cache": "~1.0", "psr/log": "~1.0", "symfony/cache-contracts": "^1.1.7|^2", @@ -2198,9 +2703,9 @@ }, "require-dev": { "cache/integration-tests": "dev-master", - "doctrine/cache": "~1.6", - "doctrine/dbal": "~2.5", - "predis/predis": "~1.1", + "doctrine/cache": "^1.6", + "doctrine/dbal": "^2.5|^3.0", + "predis/predis": "^1.1", "psr/simple-cache": "^1.0", "symfony/config": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0", @@ -2240,24 +2745,38 @@ "caching", "psr6" ], - "time": "2020-04-28T17:58:55+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-23T17:20:42+00:00" }, { "name": "symfony/cache-contracts", - "version": "v2.0.1", + "version": "v2.1.3", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "23ed8bfc1a4115feca942cb5f1aacdf3dcdf3c16" + "reference": "9771a09d2e6b84ecb8c9f0a7dbc72ee92aeba009" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/23ed8bfc1a4115feca942cb5f1aacdf3dcdf3c16", - "reference": "23ed8bfc1a4115feca942cb5f1aacdf3dcdf3c16", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/9771a09d2e6b84ecb8c9f0a7dbc72ee92aeba009", + "reference": "9771a09d2e6b84ecb8c9f0a7dbc72ee92aeba009", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/cache": "^1.0" }, "suggest": { @@ -2266,7 +2785,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -2298,24 +2821,38 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-06T13:23:11+00:00" }, { "name": "symfony/config", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "db1674e1a261148429f123871f30d211992294e7" + "reference": "2306321ef6a21a0de51a139774b6b7b38804815b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/db1674e1a261148429f123871f30d211992294e7", - "reference": "db1674e1a261148429f123871f30d211992294e7", + "url": "https://api.github.com/repos/symfony/config/zipball/2306321ef6a21a0de51a139774b6b7b38804815b", + "reference": "2306321ef6a21a0de51a139774b6b7b38804815b", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/filesystem": "^4.4|^5.0", "symfony/polyfill-ctype": "~1.8" }, @@ -2362,26 +2899,41 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2020-04-15T15:59:10+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-15T10:53:08+00:00" }, { "name": "symfony/console", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935" + "reference": "95794074741645473221fb126d5cb4057ad25bf1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/5fa1caadc8cdaa17bcfb25219f3b53fe294a9935", - "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935", + "url": "https://api.github.com/repos/symfony/console/zipball/95794074741645473221fb126d5cb4057ad25bf1", + "reference": "95794074741645473221fb126d5cb4057ad25bf1", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.15", "symfony/service-contracts": "^1.1|^2" }, "conflict": { @@ -2438,24 +2990,38 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2020-03-30T11:42:42+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-06T13:22:03+00:00" }, { "name": "symfony/dependency-injection", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "92d8b3bd896a87cdd8aba0a3dd041bc072e8cfba" + "reference": "9263d52372205c57823bf983bc4f413378830757" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/92d8b3bd896a87cdd8aba0a3dd041bc072e8cfba", - "reference": "92d8b3bd896a87cdd8aba0a3dd041bc072e8cfba", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/9263d52372205c57823bf983bc4f413378830757", + "reference": "9263d52372205c57823bf983bc4f413378830757", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/container": "^1.0", "symfony/service-contracts": "^1.1.6|^2" }, @@ -2511,26 +3077,40 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2020-04-28T17:58:55+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-23T08:36:09+00:00" }, { "name": "symfony/doctrine-bridge", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "013f4ce1a10c6aad81c4ad14466e49d802417f4f" + "reference": "e2ab3fe26133c5d997684f1b961acbd6b04e2805" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/013f4ce1a10c6aad81c4ad14466e49d802417f4f", - "reference": "013f4ce1a10c6aad81c4ad14466e49d802417f4f", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/e2ab3fe26133c5d997684f1b961acbd6b04e2805", + "reference": "e2ab3fe26133c5d997684f1b961acbd6b04e2805", "shasum": "" }, "require": { "doctrine/event-manager": "~1.0", - "doctrine/persistence": "^1.3", - "php": "^7.2.5", + "doctrine/persistence": "^1.3|^2", + "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^1.1|^2" @@ -2547,10 +3127,11 @@ "symfony/validator": "<5.0.2" }, "require-dev": { + "composer/package-versions-deprecated": "^1.8", "doctrine/annotations": "~1.7", "doctrine/cache": "~1.6", "doctrine/collections": "~1.0", - "doctrine/data-fixtures": "1.0.*", + "doctrine/data-fixtures": "^1.1", "doctrine/dbal": "~2.4", "doctrine/orm": "^2.6.3", "doctrine/reflection": "~1.0", @@ -2607,24 +3188,38 @@ ], "description": "Symfony Doctrine Bridge", "homepage": "https://symfony.com", - "time": "2020-04-12T16:45:47+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-23T16:54:02+00:00" }, { "name": "symfony/dotenv", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "28658ee990ea643c8111bac242d6ee5f3a15ef72" + "reference": "efd887f012127acad22325d109fe8ddf635f1f97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/28658ee990ea643c8111bac242d6ee5f3a15ef72", - "reference": "28658ee990ea643c8111bac242d6ee5f3a15ef72", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/efd887f012127acad22325d109fe8ddf635f1f97", + "reference": "efd887f012127acad22325d109fe8ddf635f1f97", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "require-dev": { "symfony/process": "^4.4|^5.0" @@ -2664,25 +3259,40 @@ "env", "environment" ], - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-28T08:20:26+00:00" }, { "name": "symfony/error-handler", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "949ffc17c3ac3a9f8e6232220e2da33913c04ea4" + "reference": "d01fba9a55614a1addb0d52d6a9566560b2a2af8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/949ffc17c3ac3a9f8e6232220e2da33913c04ea4", - "reference": "949ffc17c3ac3a9f8e6232220e2da33913c04ea4", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/d01fba9a55614a1addb0d52d6a9566560b2a2af8", + "reference": "d01fba9a55614a1addb0d52d6a9566560b2a2af8", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/log": "^1.0", + "symfony/polyfill-php80": "^1.15", "symfony/var-dumper": "^4.4|^5.0" }, "require-dev": { @@ -2719,24 +3329,38 @@ ], "description": "Symfony ErrorHandler Component", "homepage": "https://symfony.com", - "time": "2020-03-30T14:14:32+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-23T08:36:09+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc" + "reference": "5c5dd86c7a7962d28c48351c7dd83c9266e4d19d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/24f40d95385774ed5c71dbf014edd047e2f2f3dc", - "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/5c5dd86c7a7962d28c48351c7dd83c9266e4d19d", + "reference": "5c5dd86c7a7962d28c48351c7dd83c9266e4d19d", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/event-dispatcher-contracts": "^2" }, "conflict": { @@ -2789,24 +3413,38 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-18T18:18:56+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.0.1", + "version": "v2.1.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "af23c2584d4577d54661c434446fb8fbed6025dd" + "reference": "f6f613d74cfc5a623fc36294d3451eb7fa5a042b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/af23c2584d4577d54661c434446fb8fbed6025dd", - "reference": "af23c2584d4577d54661c434446fb8fbed6025dd", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f6f613d74cfc5a623fc36294d3451eb7fa5a042b", + "reference": "f6f613d74cfc5a623fc36294d3451eb7fa5a042b", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/event-dispatcher": "^1" }, "suggest": { @@ -2815,7 +3453,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -2847,24 +3489,38 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-06T13:23:11+00:00" }, { "name": "symfony/expression-language", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", - "reference": "b93755750b9e2a8d240bdf014de5b545105c5178" + "reference": "31ea3085d94d2656a3560ba303e0e27456c5d265" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/b93755750b9e2a8d240bdf014de5b545105c5178", - "reference": "b93755750b9e2a8d240bdf014de5b545105c5178", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/31ea3085d94d2656a3560ba303e0e27456c5d265", + "reference": "31ea3085d94d2656a3560ba303e0e27456c5d265", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/cache": "^4.4|^5.0", "symfony/service-contracts": "^1.1|^2" }, @@ -2898,24 +3554,38 @@ ], "description": "Symfony ExpressionLanguage Component", "homepage": "https://symfony.com", - "time": "2020-04-15T15:59:10+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:38:26+00:00" }, { "name": "symfony/filesystem", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "7cd0dafc4353a0f62e307df90b48466379c8cc91" + "reference": "6edf8b9e64e662fcde20ee3ee2ec46fdcc8c3214" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/7cd0dafc4353a0f62e307df90b48466379c8cc91", - "reference": "7cd0dafc4353a0f62e307df90b48466379c8cc91", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/6edf8b9e64e662fcde20ee3ee2ec46fdcc8c3214", + "reference": "6edf8b9e64e662fcde20ee3ee2ec46fdcc8c3214", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8" }, "type": "library", @@ -2948,24 +3618,38 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2020-04-12T14:40:17+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-30T20:12:43+00:00" }, { "name": "symfony/finder", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d" + "reference": "127bccabf3c854625af9c0162779cf06bc1dd352" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/600a52c29afc0d1caa74acbec8d3095ca7e9910d", - "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d", + "url": "https://api.github.com/repos/symfony/finder/zipball/127bccabf3c854625af9c0162779cf06bc1dd352", + "reference": "127bccabf3c854625af9c0162779cf06bc1dd352", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "type": "library", "extra": { @@ -2997,36 +3681,50 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:38:26+00:00" }, { "name": "symfony/flex", - "version": "v1.6.3", + "version": "v1.9.1", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "89999fdaad52cab14637709f2d2ce25835a051e6" + "reference": "0e752e47d8382361ca2d7ef016f549828185ddb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/89999fdaad52cab14637709f2d2ce25835a051e6", - "reference": "89999fdaad52cab14637709f2d2ce25835a051e6", + "url": "https://api.github.com/repos/symfony/flex/zipball/0e752e47d8382361ca2d7ef016f549828185ddb6", + "reference": "0e752e47d8382361ca2d7ef016f549828185ddb6", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0", - "php": "^7.0" + "composer-plugin-api": "^1.0|^2.0", + "php": ">=7.1" }, "require-dev": { - "composer/composer": "^1.0.2", - "symfony/dotenv": "^3.4|^4.0|^5.0", - "symfony/phpunit-bridge": "^3.4.19|^4.1.8|^5.0", - "symfony/process": "^2.7|^3.0|^4.0|^5.0" + "composer/composer": "^1.0.2|^2.0", + "symfony/dotenv": "^4.4|^5.0", + "symfony/phpunit-bridge": "^4.4|^5.0", + "symfony/process": "^3.4|^4.4|^5.0" }, "type": "composer-plugin", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.8-dev" }, "class": "Symfony\\Flex\\Flex" }, @@ -3046,30 +3744,44 @@ } ], "description": "Composer plugin for Symfony", - "time": "2020-05-09T12:10:32+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T15:18:33+00:00" }, { "name": "symfony/form", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "a3ec37026c13851565599522f7c1d26cdcdbf7dd" + "reference": "7c4aee4717558389cbfea35fa84d8dd830965db1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/a3ec37026c13851565599522f7c1d26cdcdbf7dd", - "reference": "a3ec37026c13851565599522f7c1d26cdcdbf7dd", + "url": "https://api.github.com/repos/symfony/form/zipball/7c4aee4717558389cbfea35fa84d8dd830965db1", + "reference": "7c4aee4717558389cbfea35fa84d8dd830965db1", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/event-dispatcher": "^4.4|^5.0", "symfony/intl": "^4.4|^5.0", "symfony/options-resolver": "^5.0", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", - "symfony/property-access": "^5.0", + "symfony/property-access": "^5.0.8", "symfony/service-contracts": "^1.1|^2" }, "conflict": { @@ -3088,6 +3800,7 @@ "symfony/config": "^4.4|^5.0", "symfony/console": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", "symfony/http-foundation": "^4.4|^5.0", "symfony/http-kernel": "^4.4|^5.0", "symfony/security-csrf": "^4.4|^5.0", @@ -3130,25 +3843,39 @@ ], "description": "Symfony Form Component", "homepage": "https://symfony.com", - "time": "2020-04-28T17:58:55+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-12T12:51:51+00:00" }, { "name": "symfony/framework-bundle", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "3fd5aec4bc84750752ba1f039829362fa071e037" + "reference": "0fc0a93f8bbe465d0b483e21b087d432baa92c16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/3fd5aec4bc84750752ba1f039829362fa071e037", - "reference": "3fd5aec4bc84750752ba1f039829362fa071e037", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/0fc0a93f8bbe465d0b483e21b087d432baa92c16", + "reference": "0fc0a93f8bbe465d0b483e21b087d432baa92c16", "shasum": "" }, "require": { "ext-xml": "*", - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/cache": "^4.4|^5.0", "symfony/config": "^5.0", "symfony/dependency-injection": "^5.0.1", @@ -3250,34 +3977,48 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony FrameworkBundle", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Symfony FrameworkBundle", - "homepage": "https://symfony.com", - "time": "2020-04-28T17:58:55+00:00" + "time": "2020-07-23T08:36:09+00:00" }, { "name": "symfony/http-client", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "93b41572fbb3b8dd11d4f6f0434bbbbacd8619ab" + "reference": "9eec6ed50ea38f562ce0a1fc8a7d96a010d58509" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/93b41572fbb3b8dd11d4f6f0434bbbbacd8619ab", - "reference": "93b41572fbb3b8dd11d4f6f0434bbbbacd8619ab", + "url": "https://api.github.com/repos/symfony/http-client/zipball/9eec6ed50ea38f562ce0a1fc8a7d96a010d58509", + "reference": "9eec6ed50ea38f562ce0a1fc8a7d96a010d58509", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/log": "^1.0", "symfony/http-client-contracts": "^1.1.8|^2", "symfony/polyfill-php73": "^1.11", @@ -3328,24 +4069,38 @@ ], "description": "Symfony HttpClient component", "homepage": "https://symfony.com", - "time": "2020-04-12T16:45:47+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-05T09:43:09+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v2.0.1", + "version": "v2.1.3", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "378868b61b85c5cac6822d4f84e26999c9f2e881" + "reference": "cd88921e9add61f2064c9c6b30de4f589db42962" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/378868b61b85c5cac6822d4f84e26999c9f2e881", - "reference": "378868b61b85c5cac6822d4f84e26999c9f2e881", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/cd88921e9add61f2064c9c6b30de4f589db42962", + "reference": "cd88921e9add61f2064c9c6b30de4f589db42962", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "suggest": { "symfony/http-client-implementation": "" @@ -3353,7 +4108,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -3385,24 +4144,38 @@ "interoperability", "standards" ], - "time": "2019-11-26T23:25:11+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-06T13:23:11+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "e47fdf8b24edc12022ba52923150ec6484d7f57d" + "reference": "7ad89bbacd90f7bee1a57e61ed5ecaeaba430706" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e47fdf8b24edc12022ba52923150ec6484d7f57d", - "reference": "e47fdf8b24edc12022ba52923150ec6484d7f57d", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/7ad89bbacd90f7bee1a57e61ed5ecaeaba430706", + "reference": "7ad89bbacd90f7bee1a57e61ed5ecaeaba430706", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/mime": "^4.4|^5.0", "symfony/polyfill-mbstring": "~1.1" }, @@ -3440,30 +4213,45 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2020-04-18T20:50:06+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-23T10:04:24+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "3565e51eecd06106304baba5ccb7ba89db2d7d2b" + "reference": "410ce82fbbb06fb926ecaacea8b0af86bc3e7ef2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3565e51eecd06106304baba5ccb7ba89db2d7d2b", - "reference": "3565e51eecd06106304baba5ccb7ba89db2d7d2b", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/410ce82fbbb06fb926ecaacea8b0af86bc3e7ef2", + "reference": "410ce82fbbb06fb926ecaacea8b0af86bc3e7ef2", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/log": "~1.0", "symfony/error-handler": "^4.4|^5.0", "symfony/event-dispatcher": "^5.0", "symfony/http-foundation": "^4.4|^5.0", "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9" + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.15" }, "conflict": { "symfony/browser-kit": "<4.4", @@ -3537,24 +4325,38 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2020-04-28T18:53:25+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-24T04:14:59+00:00" }, { "name": "symfony/inflector", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/inflector.git", - "reference": "70c25c66427e2bb6ba0827d668366d60b0a90cbf" + "reference": "7eff2643934179cd0e5a6609a583fc22fc495fc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/inflector/zipball/70c25c66427e2bb6ba0827d668366d60b0a90cbf", - "reference": "70c25c66427e2bb6ba0827d668366d60b0a90cbf", + "url": "https://api.github.com/repos/symfony/inflector/zipball/7eff2643934179cd0e5a6609a583fc22fc495fc4", + "reference": "7eff2643934179cd0e5a6609a583fc22fc495fc4", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8" }, "type": "library", @@ -3595,24 +4397,38 @@ "symfony", "words" ], - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:38:26+00:00" }, { "name": "symfony/intl", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "dc50ad5039ac685ca87306a346dc119cacdfea25" + "reference": "72cfa77bde9d3fdb97eaf04933951d87f999d774" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/dc50ad5039ac685ca87306a346dc119cacdfea25", - "reference": "dc50ad5039ac685ca87306a346dc119cacdfea25", + "url": "https://api.github.com/repos/symfony/intl/zipball/72cfa77bde9d3fdb97eaf04933951d87f999d774", + "reference": "72cfa77bde9d3fdb97eaf04933951d87f999d774", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-intl-icu": "~1.0" }, "require-dev": { @@ -3670,25 +4486,39 @@ "l10n", "localization" ], - "time": "2020-04-12T14:40:17+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-18T18:18:56+00:00" }, { "name": "symfony/mailer", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "b473af272a4375d832d060b2bc9aac185536443d" + "reference": "ae0579ff80c1f9b6db5a7a7053733b2568cb9001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/b473af272a4375d832d060b2bc9aac185536443d", - "reference": "b473af272a4375d832d060b2bc9aac185536443d", + "url": "https://api.github.com/repos/symfony/mailer/zipball/ae0579ff80c1f9b6db5a7a7053733b2568cb9001", + "reference": "ae0579ff80c1f9b6db5a7a7053733b2568cb9001", "shasum": "" }, "require": { "egulias/email-validator": "^2.1.10", - "php": "^7.2.5", + "php": ">=7.2.5", "psr/log": "~1.0", "symfony/event-dispatcher": "^4.4|^5.0", "symfony/mime": "^4.4|^5.0", @@ -3737,24 +4567,38 @@ ], "description": "Symfony Mailer Component", "homepage": "https://symfony.com", - "time": "2020-04-28T17:58:55+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-15T10:53:08+00:00" }, { "name": "symfony/mime", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "5d6c81c39225a750f3f43bee15f03093fb9aaa0b" + "reference": "aa2b2013a8d380e3980a29a79cc0fbcfb02fb920" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/5d6c81c39225a750f3f43bee15f03093fb9aaa0b", - "reference": "5d6c81c39225a750f3f43bee15f03093fb9aaa0b", + "url": "https://api.github.com/repos/symfony/mime/zipball/aa2b2013a8d380e3980a29a79cc0fbcfb02fb920", + "reference": "aa2b2013a8d380e3980a29a79cc0fbcfb02fb920", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, @@ -3799,25 +4643,39 @@ "mime", "mime-type" ], - "time": "2020-04-17T03:29:44+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-23T10:04:24+00:00" }, { "name": "symfony/monolog-bridge", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "5f1bdaba25858fe22be47ddcf5e8f78e1b72a248" + "reference": "d48bf711b47c6fa9a0df747a73ad4d45d8fc5409" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/5f1bdaba25858fe22be47ddcf5e8f78e1b72a248", - "reference": "5f1bdaba25858fe22be47ddcf5e8f78e1b72a248", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/d48bf711b47c6fa9a0df747a73ad4d45d8fc5409", + "reference": "d48bf711b47c6fa9a0df747a73ad4d45d8fc5409", "shasum": "" }, "require": { "monolog/monolog": "^1.25.1|^2", - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/http-kernel": "^4.4|^5.0", "symfony/service-contracts": "^1.1|^2" }, @@ -3866,7 +4724,21 @@ ], "description": "Symfony Monolog Bridge", "homepage": "https://symfony.com", - "time": "2020-04-12T16:45:47+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-18T18:18:56+00:00" }, { "name": "symfony/monolog-bundle", @@ -3933,20 +4805,21 @@ }, { "name": "symfony/notifier", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/notifier.git", - "reference": "0de60e9cd04eeb60ed73153518887d20402a6b5a" + "reference": "e5d0bb4a54509f817814cb4f267c8426e65396e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/notifier/zipball/0de60e9cd04eeb60ed73153518887d20402a6b5a", - "reference": "0de60e9cd04eeb60ed73153518887d20402a6b5a", + "url": "https://api.github.com/repos/symfony/notifier/zipball/e5d0bb4a54509f817814cb4f267c8426e65396e4", + "reference": "e5d0bb4a54509f817814cb4f267c8426e65396e4", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15" }, "conflict": { "symfony/http-kernel": "<4.4" @@ -3985,24 +4858,38 @@ "notification", "notifier" ], - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-24T08:58:00+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "3707e3caeff2b797c0bfaadd5eba723dd44e6bf1" + "reference": "9f39c468be4b6dae1bad2422f98bab65734055e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/3707e3caeff2b797c0bfaadd5eba723dd44e6bf1", - "reference": "3707e3caeff2b797c0bfaadd5eba723dd44e6bf1", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/9f39c468be4b6dae1bad2422f98bab65734055e2", + "reference": "9f39c468be4b6dae1bad2422f98bab65734055e2", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "type": "library", "extra": { @@ -4039,23 +4926,38 @@ "configuration", "options" ], - "time": "2020-04-06T10:40:56+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-12T12:51:51+00:00" }, { "name": "symfony/orm-pack", - "version": "v1.0.8", + "version": "v2.0.0", "source": { "type": "git", "url": "https://github.com/symfony/orm-pack.git", - "reference": "c9bcc08102061f406dc908192c0f33524a675666" + "reference": "46aa731f213140388ee11ff3d2b6776a3b4a0d90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/orm-pack/zipball/c9bcc08102061f406dc908192c0f33524a675666", - "reference": "c9bcc08102061f406dc908192c0f33524a675666", + "url": "https://api.github.com/repos/symfony/orm-pack/zipball/46aa731f213140388ee11ff3d2b6776a3b4a0d90", + "reference": "46aa731f213140388ee11ff3d2b6776a3b4a0d90", "shasum": "" }, "require": { + "composer/package-versions-deprecated": "*", "doctrine/doctrine-bundle": "*", "doctrine/doctrine-migrations-bundle": "*", "doctrine/orm": "*" @@ -4066,20 +4968,34 @@ "MIT" ], "description": "A pack for the Doctrine ORM", - "time": "2020-02-10T18:03:48+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T14:34:28+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.16.0", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "81f5385a0237989ec43a5ed2d94176c5c9616cc8" + "reference": "b740103edbdcc39602239ee8860f0f45a8eb9aa5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81f5385a0237989ec43a5ed2d94176c5c9616cc8", - "reference": "81f5385a0237989ec43a5ed2d94176c5c9616cc8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b740103edbdcc39602239ee8860f0f45a8eb9aa5", + "reference": "b740103edbdcc39602239ee8860f0f45a8eb9aa5", "shasum": "" }, "require": { @@ -4091,7 +5007,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.16-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -4126,20 +5046,34 @@ "portable", "shim" ], - "time": "2020-05-08T16:50:20+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.16.0", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "0913a9ab67d6042966287c8ad996927b6c710330" + "reference": "4e45a6e39041a9cc78835b11abc47874ae302a55" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/0913a9ab67d6042966287c8ad996927b6c710330", - "reference": "0913a9ab67d6042966287c8ad996927b6c710330", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/4e45a6e39041a9cc78835b11abc47874ae302a55", + "reference": "4e45a6e39041a9cc78835b11abc47874ae302a55", "shasum": "" }, "require": { @@ -4152,7 +5086,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.16-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -4184,25 +5122,40 @@ "portable", "shim" ], - "time": "2020-05-08T16:50:20+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.16.0", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "ab0af41deab94ec8dceb3d1fb408bdd038eba4dc" + "reference": "bc6549d068d0160e0f10f7a5a23c7d1406b95ebe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ab0af41deab94ec8dceb3d1fb408bdd038eba4dc", - "reference": "ab0af41deab94ec8dceb3d1fb408bdd038eba4dc", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/bc6549d068d0160e0f10f7a5a23c7d1406b95ebe", + "reference": "bc6549d068d0160e0f10f7a5a23c7d1406b95ebe", "shasum": "" }, "require": { "php": ">=5.3.3", - "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php70": "^1.10", "symfony/polyfill-php72": "^1.10" }, "suggest": { @@ -4211,7 +5164,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.16-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -4231,6 +5188,10 @@ "name": "Laurent Bassin", "email": "laurent@bassin.info" }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" @@ -4246,20 +5207,34 @@ "portable", "shim" ], - "time": "2020-05-08T16:50:20+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.16.0", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "cc65fba80f49c547e16f1afcc6fd26a1b101556e" + "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/cc65fba80f49c547e16f1afcc6fd26a1b101556e", - "reference": "cc65fba80f49c547e16f1afcc6fd26a1b101556e", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", + "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", "shasum": "" }, "require": { @@ -4271,7 +5246,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.16-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -4309,20 +5288,34 @@ "portable", "shim" ], - "time": "2020-05-08T16:50:20+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.16.0", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "a54881ec0ab3b2005c406aed0023c062879031e7" + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a54881ec0ab3b2005c406aed0023c062879031e7", - "reference": "a54881ec0ab3b2005c406aed0023c062879031e7", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a", + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a", "shasum": "" }, "require": { @@ -4334,7 +5327,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.16-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -4368,20 +5365,34 @@ "portable", "shim" ], - "time": "2020-05-08T16:50:20+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.16.0", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "7e95fe59d12169fcf4041487e4bf34fca37ee0ed" + "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/7e95fe59d12169fcf4041487e4bf34fca37ee0ed", - "reference": "7e95fe59d12169fcf4041487e4bf34fca37ee0ed", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca", + "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca", "shasum": "" }, "require": { @@ -4390,7 +5401,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.16-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -4426,24 +5441,118 @@ "portable", "shim" ], - "time": "2020-05-02T14:56:09+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.18.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981", + "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981", + "shasum": "" + }, + "require": { + "php": ">=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/process", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "3179f68dff5bad14d38c4114a1dab98030801fd7" + "reference": "f1052340d8832a5ee55f4160e651a88219a1499e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/3179f68dff5bad14d38c4114a1dab98030801fd7", - "reference": "3179f68dff5bad14d38c4114a1dab98030801fd7", + "url": "https://api.github.com/repos/symfony/process/zipball/f1052340d8832a5ee55f4160e651a88219a1499e", + "reference": "f1052340d8832a5ee55f4160e651a88219a1499e", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "type": "library", "extra": { @@ -4475,24 +5584,38 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2020-04-15T15:59:10+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-23T08:36:09+00:00" }, { "name": "symfony/property-access", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "259f26529231ab653fc96fb358e5e41dbb438aed" + "reference": "fdc47c3780ebb29077c3421c6253ccc91040c24a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/259f26529231ab653fc96fb358e5e41dbb438aed", - "reference": "259f26529231ab653fc96fb358e5e41dbb438aed", + "url": "https://api.github.com/repos/symfony/property-access/zipball/fdc47c3780ebb29077c3421c6253ccc91040c24a", + "reference": "fdc47c3780ebb29077c3421c6253ccc91040c24a", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/inflector": "^4.4|^5.0" }, "require-dev": { @@ -4542,24 +5665,38 @@ "property path", "reflection" ], - "time": "2020-04-15T15:59:10+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-18T18:18:56+00:00" }, { "name": "symfony/property-info", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "e9e40f14a2d2d163fb603f8646a76a6ff4b9426e" + "reference": "ab2210c90e8038ffaad09fe10cf635ad31bebb62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/e9e40f14a2d2d163fb603f8646a76a6ff4b9426e", - "reference": "e9e40f14a2d2d163fb603f8646a76a6ff4b9426e", + "url": "https://api.github.com/repos/symfony/property-info/zipball/ab2210c90e8038ffaad09fe10cf635ad31bebb62", + "reference": "ab2210c90e8038ffaad09fe10cf635ad31bebb62", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/inflector": "^4.4|^5.0" }, "conflict": { @@ -4569,7 +5706,7 @@ }, "require-dev": { "doctrine/annotations": "~1.7", - "phpdocumentor/reflection-docblock": "^3.0|^4.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "symfony/cache": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0", "symfony/serializer": "^4.4|^5.0" @@ -4618,24 +5755,38 @@ "type", "validator" ], - "time": "2020-04-06T10:40:56+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-18T21:17:00+00:00" }, { "name": "symfony/routing", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "9b18480a6e101f8d9ab7c483ace7c19441be5111" + "reference": "1369ee6823074c406815b65a40d47fd5ee48e517" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/9b18480a6e101f8d9ab7c483ace7c19441be5111", - "reference": "9b18480a6e101f8d9ab7c483ace7c19441be5111", + "url": "https://api.github.com/repos/symfony/routing/zipball/1369ee6823074c406815b65a40d47fd5ee48e517", + "reference": "1369ee6823074c406815b65a40d47fd5ee48e517", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "conflict": { "symfony/config": "<5.0", @@ -4694,25 +5845,39 @@ "uri", "url" ], - "time": "2020-04-21T21:02:50+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-18T18:18:56+00:00" }, { "name": "symfony/security-bundle", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "b26fa15f2f748430112731f51f2c3c70fc6bbe1a" + "reference": "8e8b20291be3b4f9aed4da706450dc355ee036ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/b26fa15f2f748430112731f51f2c3c70fc6bbe1a", - "reference": "b26fa15f2f748430112731f51f2c3c70fc6bbe1a", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/8e8b20291be3b4f9aed4da706450dc355ee036ac", + "reference": "8e8b20291be3b4f9aed4da706450dc355ee036ac", "shasum": "" }, "require": { "ext-xml": "*", - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/config": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0", "symfony/http-kernel": "^5.0", @@ -4777,24 +5942,38 @@ ], "description": "Symfony SecurityBundle", "homepage": "https://symfony.com", - "time": "2020-04-22T00:36:07+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-23T08:36:09+00:00" }, { "name": "symfony/security-core", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "5945abf1e64df5fdfb6aae9753c04f130fe96010" + "reference": "4e4c76fcb091e35aca0601fc337f0c2cf76885ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/5945abf1e64df5fdfb6aae9753c04f130fe96010", - "reference": "5945abf1e64df5fdfb6aae9753c04f130fe96010", + "url": "https://api.github.com/repos/symfony/security-core/zipball/4e4c76fcb091e35aca0601fc337f0c2cf76885ab", + "reference": "4e4c76fcb091e35aca0601fc337f0c2cf76885ab", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/event-dispatcher-contracts": "^1.1|^2", "symfony/service-contracts": "^1.1.6|^2" }, @@ -4840,34 +6019,48 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - Core Library", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Symfony Security Component - Core Library", - "homepage": "https://symfony.com", - "time": "2020-04-21T21:19:41+00:00" + "time": "2020-06-25T09:01:55+00:00" }, { "name": "symfony/security-csrf", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/security-csrf.git", - "reference": "c3ceba9a0a85326af509f418d178a993c31d6d4d" + "reference": "155a413dc29400e74d2c06f5581da795200386c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-csrf/zipball/c3ceba9a0a85326af509f418d178a993c31d6d4d", - "reference": "c3ceba9a0a85326af509f418d178a993c31d6d4d", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/155a413dc29400e74d2c06f5581da795200386c1", + "reference": "155a413dc29400e74d2c06f5581da795200386c1", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/security-core": "^4.4|^5.0" }, "conflict": { @@ -4909,24 +6102,38 @@ ], "description": "Symfony Security Component - CSRF Library", "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:38:26+00:00" }, { "name": "symfony/security-guard", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/security-guard.git", - "reference": "9e9ebbd005ca5af051e57a47d46394357cdff1d8" + "reference": "4d920d91fa44be8ebfe1a101dadde48181d8a4fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-guard/zipball/9e9ebbd005ca5af051e57a47d46394357cdff1d8", - "reference": "9e9ebbd005ca5af051e57a47d46394357cdff1d8", + "url": "https://api.github.com/repos/symfony/security-guard/zipball/4d920d91fa44be8ebfe1a101dadde48181d8a4fb", + "reference": "4d920d91fa44be8ebfe1a101dadde48181d8a4fb", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/security-core": "^5.0", "symfony/security-http": "^4.4.1|^5.0.1" }, @@ -4963,24 +6170,38 @@ ], "description": "Symfony Security Component - Guard", "homepage": "https://symfony.com", - "time": "2020-04-15T15:59:10+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:38:26+00:00" }, { "name": "symfony/security-http", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "052d81213d007c07e61c9c4407cfd34e67b9ed17" + "reference": "e18913e3663dde1d4712c921211d12185c323c6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/052d81213d007c07e61c9c4407cfd34e67b9ed17", - "reference": "052d81213d007c07e61c9c4407cfd34e67b9ed17", + "url": "https://api.github.com/repos/symfony/security-http/zipball/e18913e3663dde1d4712c921211d12185c323c6e", + "reference": "e18913e3663dde1d4712c921211d12185c323c6e", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/http-foundation": "^4.4.7|^5.0.7", "symfony/http-kernel": "^4.4|^5.0", "symfony/property-access": "^4.4|^5.0", @@ -5028,24 +6249,38 @@ ], "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", - "time": "2020-04-06T10:40:56+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-28T12:17:48+00:00" }, { "name": "symfony/serializer", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "aa5d99bb179b5166cfe15d79dc067f516f3f4343" + "reference": "825b66f545da95e9bb1626d5655be6693376d52a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/aa5d99bb179b5166cfe15d79dc067f516f3f4343", - "reference": "aa5d99bb179b5166cfe15d79dc067f516f3f4343", + "url": "https://api.github.com/repos/symfony/serializer/zipball/825b66f545da95e9bb1626d5655be6693376d52a", + "reference": "825b66f545da95e9bb1626d5655be6693376d52a", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8" }, "conflict": { @@ -5110,7 +6345,21 @@ ], "description": "Symfony Serializer Component", "homepage": "https://symfony.com", - "time": "2020-04-12T16:45:47+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-23T08:36:09+00:00" }, { "name": "symfony/serializer-pack", @@ -5144,20 +6393,20 @@ }, { "name": "symfony/service-contracts", - "version": "v2.0.1", + "version": "v2.1.3", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "144c5e51266b281231e947b51223ba14acf1a749" + "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749", - "reference": "144c5e51266b281231e947b51223ba14acf1a749", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/58c7475e5457c5492c26cc740cc0ad7464be9442", + "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/container": "^1.0" }, "suggest": { @@ -5166,7 +6415,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -5198,24 +6451,38 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-06T13:23:11+00:00" }, { "name": "symfony/stopwatch", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "a1d86d30d4522423afc998f32404efa34fcf5a73" + "reference": "fbc3084469450c6f6616f5436a00e180ea9ff118" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/a1d86d30d4522423afc998f32404efa34fcf5a73", - "reference": "a1d86d30d4522423afc998f32404efa34fcf5a73", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fbc3084469450c6f6616f5436a00e180ea9ff118", + "reference": "fbc3084469450c6f6616f5436a00e180ea9ff118", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/service-contracts": "^1.0|^2" }, "type": "library", @@ -5248,24 +6515,38 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:38:26+00:00" }, { "name": "symfony/string", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "48a2f4b3597514e6c885c0ddb22d3bbdb60517d0" + "reference": "d9090857c51a0ded54a54a9ed1121af24f0322f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/48a2f4b3597514e6c885c0ddb22d3bbdb60517d0", - "reference": "48a2f4b3597514e6c885c0ddb22d3bbdb60517d0", + "url": "https://api.github.com/repos/symfony/string/zipball/d9090857c51a0ded54a54a9ed1121af24f0322f4", + "reference": "d9090857c51a0ded54a54a9ed1121af24f0322f4", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-mbstring": "~1.0", @@ -5312,24 +6593,38 @@ "utf-8", "utf8" ], - "time": "2020-03-16T13:02:39+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-08T08:26:26+00:00" }, { "name": "symfony/translation", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "c3879db7a68fe3e12b41263b05879412c87b27fd" + "reference": "762090e92d8df2b91cace8930ce0329674600225" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/c3879db7a68fe3e12b41263b05879412c87b27fd", - "reference": "c3879db7a68fe3e12b41263b05879412c87b27fd", + "url": "https://api.github.com/repos/symfony/translation/zipball/762090e92d8df2b91cace8930ce0329674600225", + "reference": "762090e92d8df2b91cace8930ce0329674600225", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2" }, @@ -5389,24 +6684,38 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2020-04-12T16:45:47+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-30T17:40:59+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.0.1", + "version": "v2.1.3", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed" + "reference": "616a9773c853097607cf9dd6577d5b143ffdcd63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/8cc682ac458d75557203b2f2f14b0b92e1c744ed", - "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/616a9773c853097607cf9dd6577d5b143ffdcd63", + "reference": "616a9773c853097607cf9dd6577d5b143ffdcd63", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "suggest": { "symfony/translation-implementation": "" @@ -5414,7 +6723,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -5446,24 +6759,38 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-06T13:23:11+00:00" }, { "name": "symfony/twig-bridge", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "5962eb3be6591cc985f32be1632e7b096d0979e3" + "reference": "293e5f04eee4da963686beab20960b45e4db68ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/5962eb3be6591cc985f32be1632e7b096d0979e3", - "reference": "5962eb3be6591cc985f32be1632e7b096d0979e3", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/293e5f04eee4da963686beab20960b45e4db68ad", + "reference": "293e5f04eee4da963686beab20960b45e4db68ad", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/translation-contracts": "^1.1|^2", "twig/twig": "^2.10|^3.0" }, @@ -5547,24 +6874,38 @@ ], "description": "Symfony Twig Bridge", "homepage": "https://symfony.com", - "time": "2020-04-15T15:59:10+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-30T17:59:45+00:00" }, { "name": "symfony/twig-bundle", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "6167dbac6f32961b7d19112a7531602f511bf500" + "reference": "348863cd784b10ea7e1485dc3003c738c6cdf547" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/6167dbac6f32961b7d19112a7531602f511bf500", - "reference": "6167dbac6f32961b7d19112a7531602f511bf500", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/348863cd784b10ea7e1485dc3003c738c6cdf547", + "reference": "348863cd784b10ea7e1485dc3003c738c6cdf547", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/config": "^4.4|^5.0", "symfony/http-foundation": "^4.4|^5.0", "symfony/http-kernel": "^5.0", @@ -5622,7 +6963,21 @@ ], "description": "Symfony TwigBundle", "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:38:26+00:00" }, { "name": "symfony/twig-pack", @@ -5654,20 +7009,20 @@ }, { "name": "symfony/validator", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "909c45839d32f9e4c09d4f155a7d761201e7e47e" + "reference": "9084a603e998e7abb010c44f8e3a2046b61fa9f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/909c45839d32f9e4c09d4f155a7d761201e7e47e", - "reference": "909c45839d32f9e4c09d4f155a7d761201e7e47e", + "url": "https://api.github.com/repos/symfony/validator/zipball/9084a603e998e7abb010c44f8e3a2046b61fa9f6", + "reference": "9084a603e998e7abb010c44f8e3a2046b61fa9f6", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^1.1|^2" @@ -5743,25 +7098,40 @@ ], "description": "Symfony Validator Component", "homepage": "https://symfony.com", - "time": "2020-04-28T18:26:18+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-30T17:40:59+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "09de28632f16f81058a85fcf318397218272a07b" + "reference": "36d19dbb4b377273dddb820adcdf0cc9dcf57731" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/09de28632f16f81058a85fcf318397218272a07b", - "reference": "09de28632f16f81058a85fcf318397218272a07b", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/36d19dbb4b377273dddb820adcdf0cc9dcf57731", + "reference": "36d19dbb4b377273dddb820adcdf0cc9dcf57731", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15" }, "conflict": { "phpunit/phpunit": "<5.4.3", @@ -5818,27 +7188,41 @@ "debug", "dump" ], - "time": "2020-04-12T16:45:47+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-24T13:36:01+00:00" }, { "name": "symfony/var-exporter", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "5d18811da9e1ae2bb86b0a97fb2d784e27ffd59f" + "reference": "b87e3aeedb74ee2694932d04153df9d804954cc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/5d18811da9e1ae2bb86b0a97fb2d784e27ffd59f", - "reference": "5d18811da9e1ae2bb86b0a97fb2d784e27ffd59f", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/b87e3aeedb74ee2694932d04153df9d804954cc3", + "reference": "b87e3aeedb74ee2694932d04153df9d804954cc3", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "require-dev": { - "symfony/var-dumper": "^4.4|^5.0" + "symfony/var-dumper": "^4.4.9|^5.0.9" }, "type": "library", "extra": { @@ -5878,24 +7262,38 @@ "instantiate", "serialize" ], - "time": "2020-04-15T15:59:10+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-07T15:38:39+00:00" }, { "name": "symfony/web-link", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/web-link.git", - "reference": "b62309b9f69ae6a8eb3cbd39241a5688bc5f1228" + "reference": "1b2e3621074e65632f9690c4d0cb59da8e71b4fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-link/zipball/b62309b9f69ae6a8eb3cbd39241a5688bc5f1228", - "reference": "b62309b9f69ae6a8eb3cbd39241a5688bc5f1228", + "url": "https://api.github.com/repos/symfony/web-link/zipball/1b2e3621074e65632f9690c4d0cb59da8e71b4fc", + "reference": "1b2e3621074e65632f9690c4d0cb59da8e71b4fc", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/link": "^1.0" }, "conflict": { @@ -5953,24 +7351,38 @@ "psr13", "push" ], - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-28T08:20:26+00:00" }, { "name": "symfony/yaml", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "482fb4e710e5af3e0e78015f19aa716ad953392f" + "reference": "29b60e88ff11a45b708115004fdeacab1ee3dd5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/482fb4e710e5af3e0e78015f19aa716ad953392f", - "reference": "482fb4e710e5af3e0e78015f19aa716ad953392f", + "url": "https://api.github.com/repos/symfony/yaml/zipball/29b60e88ff11a45b708115004fdeacab1ee3dd5d", + "reference": "29b60e88ff11a45b708115004fdeacab1ee3dd5d", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8" }, "conflict": { @@ -6012,24 +7424,38 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2020-04-28T17:58:55+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:38:26+00:00" }, { "name": "twig/extra-bundle", - "version": "v3.0.3", + "version": "v3.0.4", "source": { "type": "git", "url": "https://github.com/twigphp/twig-extra-bundle.git", - "reference": "6eaf1637abe6b68518e7e0949ebb84e55770d5c6" + "reference": "a7c5799cf742ab0827f5d32df37528ee8bf5a233" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/6eaf1637abe6b68518e7e0949ebb84e55770d5c6", - "reference": "6eaf1637abe6b68518e7e0949ebb84e55770d5c6", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/a7c5799cf742ab0827f5d32df37528ee8bf5a233", + "reference": "a7c5799cf742ab0827f5d32df37528ee8bf5a233", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": "^7.1.3|^8.0", "symfony/framework-bundle": "^4.3|^5.0", "symfony/twig-bundle": "^4.3|^5.0", "twig/twig": "^2.4|^3.0" @@ -6071,30 +7497,52 @@ "extra", "twig" ], - "time": "2020-01-01T17:11:09+00:00" + "funding": [ + { + "url": "https://certification.symfony.com/", + "type": "custom" + }, + { + "url": "https://live.symfony.com/", + "type": "custom" + }, + { + "url": "https://symfony.com/cloud/", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2020-05-21T09:56:39+00:00" }, { "name": "twig/twig", - "version": "v3.0.3", + "version": "v3.0.4", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "3b88ccd180a6b61ebb517aea3b1a8906762a1dc2" + "reference": "582bdbdc173027ebfba3c93dc750a40b8f9ebc02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/3b88ccd180a6b61ebb517aea3b1a8906762a1dc2", - "reference": "3b88ccd180a6b61ebb517aea3b1a8906762a1dc2", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/582bdbdc173027ebfba3c93dc750a40b8f9ebc02", + "reference": "582bdbdc173027ebfba3c93dc750a40b8f9ebc02", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-mbstring": "^1.3" }, "require-dev": { "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" + "symfony/phpunit-bridge": "^4.4.9|^5.0.9" }, "type": "library", "extra": { @@ -6133,7 +7581,29 @@ "keywords": [ "templating" ], - "time": "2020-02-11T15:33:47+00:00" + "funding": [ + { + "url": "https://certification.symfony.com/", + "type": "custom" + }, + { + "url": "https://live.symfony.com/", + "type": "custom" + }, + { + "url": "https://symfony.com/cloud/", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2020-07-05T13:18:14+00:00" }, { "name": "webimpress/safe-writer", @@ -6185,23 +7655,24 @@ }, { "name": "webmozart/assert", - "version": "1.8.0", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6" + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6", - "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6", + "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0", + "php": "^5.3.3 || ^7.0 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { + "phpstan/phpstan": "<0.12.20", "vimeo/psalm": "<3.9.1" }, "require-dev": { @@ -6229,22 +7700,114 @@ "check", "validate" ], - "time": "2020-04-18T12:12:48+00:00" + "time": "2020-07-08T17:02:28+00:00" + }, + { + "name": "willdurand/jsonp-callback-validator", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/willdurand/JsonpCallbackValidator.git", + "reference": "1a7d388bb521959e612ef50c5c7b1691b097e909" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/willdurand/JsonpCallbackValidator/zipball/1a7d388bb521959e612ef50c5c7b1691b097e909", + "reference": "1a7d388bb521959e612ef50c5c7b1691b097e909", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "~3.7" + }, + "type": "library", + "autoload": { + "psr-0": { + "JsonpCallbackValidator": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "William Durand", + "email": "william.durand1@gmail.com", + "homepage": "http://www.willdurand.fr" + } + ], + "description": "JSONP callback validator.", + "time": "2014-01-20T22:35:06+00:00" + }, + { + "name": "willdurand/negotiation", + "version": "v2.3.1", + "source": { + "type": "git", + "url": "https://github.com/willdurand/Negotiation.git", + "reference": "03436ededa67c6e83b9b12defac15384cb399dc9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/willdurand/Negotiation/zipball/03436ededa67c6e83b9b12defac15384cb399dc9", + "reference": "03436ededa67c6e83b9b12defac15384cb399dc9", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Negotiation\\": "src/Negotiation" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "William Durand", + "email": "will+git@drnd.me" + } + ], + "description": "Content Negotiation tools for PHP provided as a standalone library.", + "homepage": "http://williamdurand.fr/Negotiation/", + "keywords": [ + "accept", + "content", + "format", + "header", + "negotiation" + ], + "time": "2017-05-14T17:21:12+00:00" } ], "packages-dev": [ { "name": "nikic/php-parser", - "version": "v4.4.0", + "version": "v4.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120" + "reference": "21dce06dfbf0365c6a7cc8fdbdc995926c6a9300" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120", - "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/21dce06dfbf0365c6a7cc8fdbdc995926c6a9300", + "reference": "21dce06dfbf0365c6a7cc8fdbdc995926c6a9300", "shasum": "" }, "require": { @@ -6261,7 +7824,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.7-dev" } }, "autoload": { @@ -6283,24 +7846,24 @@ "parser", "php" ], - "time": "2020-04-10T16:34:50+00:00" + "time": "2020-07-25T13:18:53+00:00" }, { "name": "symfony/browser-kit", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "0fa03cfaf1155eedbef871eef1a64c427e624c56" + "reference": "c46b676a993cc437bafe6fe0f30f074857cde2a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/0fa03cfaf1155eedbef871eef1a64c427e624c56", - "reference": "0fa03cfaf1155eedbef871eef1a64c427e624c56", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/c46b676a993cc437bafe6fe0f30f074857cde2a6", + "reference": "c46b676a993cc437bafe6fe0f30f074857cde2a6", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/dom-crawler": "^4.4|^5.0" }, "require-dev": { @@ -6342,24 +7905,38 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2020-03-30T11:42:42+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-12T09:22:24+00:00" }, { "name": "symfony/css-selector", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "5f8d5271303dad260692ba73dfa21777d38e124e" + "reference": "79c224cdbfae58d54b257a8c684ad445042c90f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/5f8d5271303dad260692ba73dfa21777d38e124e", - "reference": "5f8d5271303dad260692ba73dfa21777d38e124e", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/79c224cdbfae58d54b257a8c684ad445042c90f2", + "reference": "79c224cdbfae58d54b257a8c684ad445042c90f2", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "type": "library", "extra": { @@ -6395,25 +7972,39 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:38:26+00:00" }, { "name": "symfony/debug-bundle", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/debug-bundle.git", - "reference": "3e11ad42d31b4d996c9715a69e988f6a52a70c9d" + "reference": "4bae28a913fa32ec123a37b3178b7b7d3a4ac323" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/3e11ad42d31b4d996c9715a69e988f6a52a70c9d", - "reference": "3e11ad42d31b4d996c9715a69e988f6a52a70c9d", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/4bae28a913fa32ec123a37b3178b7b7d3a4ac323", + "reference": "4bae28a913fa32ec123a37b3178b7b7d3a4ac323", "shasum": "" }, "require": { "ext-xml": "*", - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/http-kernel": "^4.4|^5.0", "symfony/twig-bridge": "^4.4|^5.0", "symfony/var-dumper": "^4.4|^5.0" @@ -6461,7 +8052,21 @@ ], "description": "Symfony DebugBundle", "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:38:26+00:00" }, { "name": "symfony/debug-pack", @@ -6494,20 +8099,20 @@ }, { "name": "symfony/dom-crawler", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "892311d23066844a267ac1a903d8a9d79968a1a7" + "reference": "bbc756c0895d08a1e69a59d8541a647b47f5a732" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/892311d23066844a267ac1a903d8a9d79968a1a7", - "reference": "892311d23066844a267ac1a903d8a9d79968a1a7", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/bbc756c0895d08a1e69a59d8541a647b47f5a732", + "reference": "bbc756c0895d08a1e69a59d8541a647b47f5a732", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0" }, @@ -6551,24 +8156,38 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2020-03-30T11:42:42+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-23T08:36:09+00:00" }, { "name": "symfony/maker-bundle", - "version": "v1.17.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/maker-bundle.git", - "reference": "0b5fd0e13eedc88727b47a11edbcf68bc6b797ed" + "reference": "b048c7b2be5bce9024ae3b0db97d44a107029c27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/0b5fd0e13eedc88727b47a11edbcf68bc6b797ed", - "reference": "0b5fd0e13eedc88727b47a11edbcf68bc6b797ed", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/b048c7b2be5bce9024ae3b0db97d44a107029c27", + "reference": "b048c7b2be5bce9024ae3b0db97d44a107029c27", "shasum": "" }, "require": { - "doctrine/inflector": "^1.2 || ^2.0", + "doctrine/inflector": "^1.2", "nikic/php-parser": "^4.0", "php": "^7.1.3", "symfony/config": "^3.4|^4.0|^5.0", @@ -6580,6 +8199,7 @@ "symfony/http-kernel": "^3.4|^4.0|^5.0" }, "require-dev": { + "composer/semver": "^3.0@dev", "doctrine/doctrine-bundle": "^1.8|^2.0", "doctrine/orm": "^2.3", "friendsofphp/php-cs-fixer": "^2.8", @@ -6619,20 +8239,34 @@ "scaffold", "scaffolding" ], - "time": "2020-05-08T13:53:05+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T11:22:04+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v5.0.8", + "version": "v5.1.3", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "00b8da18a52fa842b7a39613fb0a63720a354e74" + "reference": "964bd57046dfa48687e1412fe5f8006adfcb9675" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/00b8da18a52fa842b7a39613fb0a63720a354e74", - "reference": "00b8da18a52fa842b7a39613fb0a63720a354e74", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/964bd57046dfa48687e1412fe5f8006adfcb9675", + "reference": "964bd57046dfa48687e1412fe5f8006adfcb9675", "shasum": "" }, "require": { @@ -6650,7 +8284,7 @@ "type": "symfony-bridge", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" }, "thanks": { "name": "phpunit/phpunit", @@ -6684,7 +8318,21 @@ ], "description": "Symfony PHPUnit Bridge", "homepage": "https://symfony.com", - "time": "2020-04-28T17:58:55+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-23T09:26:24+00:00" }, { "name": "symfony/profiler-pack", @@ -6744,20 +8392,20 @@ }, { "name": "symfony/web-profiler-bundle", - "version": "v5.0.8", + "version": "v5.0.11", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "67fc2302ba7ca3d917decea6d3accdbd055398d1" + "reference": "3b6dbd2cc76275e117d5c55923c7f511ead22bae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/67fc2302ba7ca3d917decea6d3accdbd055398d1", - "reference": "67fc2302ba7ca3d917decea6d3accdbd055398d1", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/3b6dbd2cc76275e117d5c55923c7f511ead22bae", + "reference": "3b6dbd2cc76275e117d5c55923c7f511ead22bae", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/config": "^4.4|^5.0", "symfony/framework-bundle": "^4.4|^5.0", "symfony/http-kernel": "^4.4|^5.0", @@ -6806,7 +8454,21 @@ ], "description": "Symfony WebProfilerBundle", "homepage": "https://symfony.com", - "time": "2020-04-28T17:58:55+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-23T08:36:09+00:00" } ], "aliases": [], diff --git a/config/bundles.php b/config/bundles.php index 7745edb..38042cb 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -12,4 +12,6 @@ Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true], Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], + FOS\RestBundle\FOSRestBundle::class => ['all' => true], + JMS\SerializerBundle\JMSSerializerBundle::class => ['all' => true], ]; diff --git a/config/packages/dev/jms_serializer.yaml b/config/packages/dev/jms_serializer.yaml new file mode 100644 index 0000000..f946041 --- /dev/null +++ b/config/packages/dev/jms_serializer.yaml @@ -0,0 +1,7 @@ +jms_serializer: + visitors: + json_serialization: + options: + - JSON_PRETTY_PRINT + - JSON_UNESCAPED_SLASHES + - JSON_PRESERVE_ZERO_FRACTION diff --git a/config/packages/doctrine_migrations.yaml b/config/packages/doctrine_migrations.yaml index 3bf0fbc..ab108a0 100644 --- a/config/packages/doctrine_migrations.yaml +++ b/config/packages/doctrine_migrations.yaml @@ -1,5 +1,3 @@ doctrine_migrations: - dir_name: '%kernel.project_dir%/src/Migrations' - # namespace is arbitrary but should be different from App\Migrations - # as migrations classes should NOT be autoloaded - namespace: DoctrineMigrations + migrations_paths: + 'DoctrineMigrations': '%kernel.project_dir%/src/Migrations' diff --git a/config/packages/fos_rest.yaml b/config/packages/fos_rest.yaml new file mode 100644 index 0000000..bc3f872 --- /dev/null +++ b/config/packages/fos_rest.yaml @@ -0,0 +1,17 @@ +# Read the documentation: https://symfony.com/doc/master/bundles/FOSRestBundle/index.html +fos_rest: + serializer: + serialize_null: true +# param_fetcher_listener: true +# allowed_methods_listener: true +# routing_loader: true +# view: +# view_response_listener: true +# exception: +# codes: +# App\Exception\MyException: 403 +# messages: +# App\Exception\MyException: Forbidden area. + format_listener: + rules: + - { path: ^/api, prefer_extension: true, fallback_format: json, priorities: [ json ] } diff --git a/config/packages/jms_serializer.yaml b/config/packages/jms_serializer.yaml new file mode 100644 index 0000000..d25fa03 --- /dev/null +++ b/config/packages/jms_serializer.yaml @@ -0,0 +1,13 @@ +jms_serializer: + visitors: + xml_serialization: + format_output: '%kernel.debug%' +# metadata: +# auto_detection: false +# directories: +# any-name: +# namespace_prefix: "My\\FooBundle" +# path: "@MyFooBundle/Resources/config/serializer" +# another-name: +# namespace_prefix: "My\\BarBundle" +# path: "@MyBarBundle/Resources/config/serializer" diff --git a/config/packages/prod/jms_serializer.yaml b/config/packages/prod/jms_serializer.yaml new file mode 100644 index 0000000..89c86c8 --- /dev/null +++ b/config/packages/prod/jms_serializer.yaml @@ -0,0 +1,6 @@ +jms_serializer: + visitors: + json_serialization: + options: + - JSON_UNESCAPED_SLASHES + - JSON_PRESERVE_ZERO_FRACTION diff --git a/config/routes.yaml b/config/routes.yaml index f82d735..2c640bc 100644 --- a/config/routes.yaml +++ b/config/routes.yaml @@ -1,29 +1,9 @@ -product_create: - path: /api/v1/products - controller: App\Controller\ProductController::createAction - methods: [POST] - -product_list: - path: /api/v1/products - controller: App\Controller\ProductController::indexAction +order_show: + path: /api/v1/orders/{id} + controller: App\Controller\OrderController::showAction methods: [GET] -order_create: - path: /api/v1/orders - controller: App\Controller\OrderController::createAction - methods: [POST] - -order_list: - path: /api/v1/orders - controller: App\Controller\OrderController::indexAction - methods: [GET] - -customer_create: - path: /api/v1/customers - controller: App\Controller\CustomerController::createAction - methods: [POST] - -customer_list: - path: /api/v1/customers - controller: App\Controller\CustomerController::indexAction +admin_customer_statistic: + path: /api/v1/admin/customer/{id}/statistic + controller: App\Controller\CustomerStatisticController::indexAction methods: [GET] diff --git a/src/Controller/AbstractApiController.php b/src/Controller/AbstractApiController.php index 8f4acaf..f63321a 100644 --- a/src/Controller/AbstractApiController.php +++ b/src/Controller/AbstractApiController.php @@ -4,8 +4,45 @@ namespace App\Controller; -use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use FOS\RestBundle\Controller\AbstractFOSRestController; +use Symfony\Component\HttpFoundation\Response; -abstract class AbstractApiController extends AbstractController +abstract class AbstractApiController extends AbstractFOSRestController { + protected const SERIALIZATION_GROUP_DEFAULT = 'Default'; + protected const SERIALIZATION_GROUP_ADMIN = 'Admin'; + + /** @var array */ + private $serializationGroups = [ + AbstractApiController::SERIALIZATION_GROUP_DEFAULT, + ]; + + protected function respond($data, int $statusCode = Response::HTTP_OK): Response + { + $view = $this->view($data, $statusCode); + + $serializationGroups = $this->getSerializationGroups(); + + if (!empty($serializationGroups)) { + $view->getContext()->setGroups($serializationGroups); + } + + return $this->handleView($view); + } + + /** + * @return array + */ + protected function getSerializationGroups(): array + { + return $this->serializationGroups; + } + + /** + * @param array $serializationGroups + */ + protected function setSerializationGroups(array $serializationGroups): void + { + $this->serializationGroups = $serializationGroups; + } } diff --git a/src/Controller/CustomerController.php b/src/Controller/CustomerController.php deleted file mode 100644 index e072e37..0000000 --- a/src/Controller/CustomerController.php +++ /dev/null @@ -1,24 +0,0 @@ -getDoctrine()->getRepository(Customer::class)->findAll(); - - return $this->json($customers); - } - - public function createAction(Request $request): Response - { - return new Response(); - } -} diff --git a/src/Controller/CustomerStatisticController.php b/src/Controller/CustomerStatisticController.php new file mode 100644 index 0000000..074eb6f --- /dev/null +++ b/src/Controller/CustomerStatisticController.php @@ -0,0 +1,31 @@ +customerStatisticResponseDtoTransformer = $customerStatisticResponseDtoTransformer; + } + + public function indexAction(Request $request): Response + { + $customers = $this->getDoctrine()->getRepository(Customer::class)->findAll(); + + $customer = reset($customers); + + $dto = $this->customerStatisticResponseDtoTransformer->transformFromObject($customer); + + return $this->respond($dto); + } +} diff --git a/src/Controller/OrderController.php b/src/Controller/OrderController.php index 169cc12..e8c5131 100644 --- a/src/Controller/OrderController.php +++ b/src/Controller/OrderController.php @@ -4,21 +4,28 @@ namespace App\Controller; +use App\Dto\Response\Transformer\OrderResponseDtoTransformer; use App\Entity\Order; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; class OrderController extends AbstractApiController { - public function indexAction(Request $request): Response - { - $orders = $this->getDoctrine()->getRepository(Order::class)->findAll(); + private OrderResponseDtoTransformer $orderResponseDtoTransformer; - return $this->json($orders); + public function __construct(OrderResponseDtoTransformer $orderResponseDtoTransformer) + { + $this->orderResponseDtoTransformer = $orderResponseDtoTransformer; } - public function createAction(Request $request): Response + public function showAction(Request $request): Response { - return new Response(); + $orders = $this->getDoctrine()->getRepository(Order::class)->findAll(); + + $order = reset($orders); + + $dto = $this->orderResponseDtoTransformer->transformFromObject($order); + + return $this->respond($dto); } } diff --git a/src/Controller/ProductController.php b/src/Controller/ProductController.php deleted file mode 100644 index c0bf493..0000000 --- a/src/Controller/ProductController.php +++ /dev/null @@ -1,24 +0,0 @@ -getDoctrine()->getRepository(Product::class)->findAll(); - - return $this->json($products); - } - - public function createAction(Request $request): Response - { - return new Response(); - } -} diff --git a/src/Dto/Response/CustomerResponseDto.php b/src/Dto/Response/CustomerResponseDto.php new file mode 100644 index 0000000..c47a09c --- /dev/null +++ b/src/Dto/Response/CustomerResponseDto.php @@ -0,0 +1,20 @@ +totalOrdersPrice; + + return $callable(); + } + + /** + * @param \Closure $totalOrdersPrice + */ + public function setTotalOrdersPrice(\Closure $totalOrdersPrice): void + { + $this->totalOrdersPrice = $totalOrdersPrice; + } + + public function getQwe(): string + { + return 'qqqqq'; + } +} diff --git a/src/Dto/Response/OrderResponseDto.php b/src/Dto/Response/OrderResponseDto.php new file mode 100644 index 0000000..27bcfde --- /dev/null +++ b/src/Dto/Response/OrderResponseDto.php @@ -0,0 +1,30 @@ +") + */ + public \DateTime $createdAt; + + /** + * @Serialization\Type("string") + */ + public ?string $comment; + + /** + * @Serialization\Type("App\Dto\Response\CustomerResponseDto") + */ + public CustomerResponseDto $customer; + + /** + * @Serialization\Type("array") + */ + public array $products; +} diff --git a/src/Dto/Response/ProductResponseDto.php b/src/Dto/Response/ProductResponseDto.php new file mode 100644 index 0000000..9193caa --- /dev/null +++ b/src/Dto/Response/ProductResponseDto.php @@ -0,0 +1,30 @@ +transformFromObject($item); + } + + return $dtos; + } +} diff --git a/src/Dto/Response/Transformer/CustomerResponseDtoTransformer.php b/src/Dto/Response/Transformer/CustomerResponseDtoTransformer.php new file mode 100644 index 0000000..8b7fc44 --- /dev/null +++ b/src/Dto/Response/Transformer/CustomerResponseDtoTransformer.php @@ -0,0 +1,26 @@ +email = $customer->getEmail(); + $dto->phoneNumber = $customer->getPhoneNumber(); + + return $dto; + } +} diff --git a/src/Dto/Response/Transformer/CustomerStatisticResponseDtoTransformer.php b/src/Dto/Response/Transformer/CustomerStatisticResponseDtoTransformer.php new file mode 100644 index 0000000..0eb1656 --- /dev/null +++ b/src/Dto/Response/Transformer/CustomerStatisticResponseDtoTransformer.php @@ -0,0 +1,38 @@ +orderRepository = $orderRepository; + } + + /** + * @param Customer $customer + * + * @return ResponseDtoInterface + */ + public function transformFromObject($customer): ResponseDtoInterface + { + $dto = new CustomerStatisticResponseDto(); + $dto->customerId = $customer->getId(); + $dto->totalOrderCount = $this->orderRepository->countAllByCustomer($customer); + + $dto->setTotalOrdersPrice(function() use ($customer) { + return $this->orderRepository->totalPriceByCustomer($customer); + }); + + return $dto; + } +} diff --git a/src/Dto/Response/Transformer/OrderResponseDtoTransformer.php b/src/Dto/Response/Transformer/OrderResponseDtoTransformer.php new file mode 100644 index 0000000..faee764 --- /dev/null +++ b/src/Dto/Response/Transformer/OrderResponseDtoTransformer.php @@ -0,0 +1,39 @@ +customerResponseDtoTransformer = $customerResponseDtoTransformer; + $this->productResponseDtoTransformer = $productResponseDtoTransformer; + } + + /** + * @param Order $order + * + * @return ResponseDtoInterface + */ + public function transformFromObject($order): ResponseDtoInterface + { + $dto = new OrderResponseDto(); + $dto->createdAt = $order->getCreatedAt(); + $dto->comment = $order->getComment(); + $dto->customer = $this->customerResponseDtoTransformer->transformFromObject($order->getCustomer()); + $dto->products = $this->productResponseDtoTransformer->transformFromObjects($order->getProducts()); + + return $dto; + } +} diff --git a/src/Dto/Response/Transformer/ProductResponseDtoTransformer.php b/src/Dto/Response/Transformer/ProductResponseDtoTransformer.php new file mode 100644 index 0000000..516f49d --- /dev/null +++ b/src/Dto/Response/Transformer/ProductResponseDtoTransformer.php @@ -0,0 +1,28 @@ +code = $product->getCode(); + $dto->title = $product->getTitle(); + $dto->description = $product->getDescription(); + $dto->price = $product->getPrice(); + + return $dto; + } +} diff --git a/src/Dto/Response/Transformer/ResponseDtoTransformerInterface.php b/src/Dto/Response/Transformer/ResponseDtoTransformerInterface.php new file mode 100644 index 0000000..d3db64f --- /dev/null +++ b/src/Dto/Response/Transformer/ResponseDtoTransformerInterface.php @@ -0,0 +1,14 @@ +dateTime; + return $this->createdAt; } /** - * @param \DateTime $dateTime + * @param \DateTime $createdAt */ - public function setDateTime(\DateTime $dateTime): void + public function setCreatedAt(\DateTime $createdAt): void { - $this->dateTime = $dateTime; + $this->createdAt = $createdAt; } /** @@ -119,16 +119,16 @@ public function addProduct(Product $product): void /** * @return string */ - public function getComments(): string + public function getComment(): string { - return $this->comments; + return $this->comment; } /** - * @param string $comments + * @param string $comment */ - public function setComments(string $comments): void + public function setComment(string $comment): void { - $this->comments = $comments; + $this->comment = $comment; } } diff --git a/src/Form/Type/CustomerType.php b/src/Form/Type/CustomerType.php deleted file mode 100644 index ed8a165..0000000 --- a/src/Form/Type/CustomerType.php +++ /dev/null @@ -1,30 +0,0 @@ -add('email', EmailType::class) - ->add('phoneNumber', TextType::class) - ; - } - - public function configureOptions(OptionsResolver $resolver): void - { - $resolver->setDefaults([ - 'data_class' => Customer::class, - ]); - } -} diff --git a/src/Form/Type/OrderType.php b/src/Form/Type/OrderType.php deleted file mode 100644 index aba0e83..0000000 --- a/src/Form/Type/OrderType.php +++ /dev/null @@ -1,40 +0,0 @@ -add('customer', EntityType::class, [ - 'class' => Customer::class - ]) - ->add('comments', TextType::class) - ->add('dateTime', DateTimeType::class) - ->add('products', EntityType::class, [ - 'class' => Product::class, - 'multiple' => true, - ]) - ; - } - - public function configureOptions(OptionsResolver $resolver): void - { - $resolver->setDefaults([ - 'data_class' => Order::class, - ]); - } -} diff --git a/src/Form/Type/ProductType.php b/src/Form/Type/ProductType.php deleted file mode 100644 index 41d3cdd..0000000 --- a/src/Form/Type/ProductType.php +++ /dev/null @@ -1,32 +0,0 @@ -add('code', TextType::class) - ->add('title', TextType::class) - ->add('description', TextType::class) - ->add('price', IntegerType::class) - ; - } - - public function configureOptions(OptionsResolver $resolver): void - { - $resolver->setDefaults([ - 'data_class' => Product::class, - ]); - } -} diff --git a/src/Migrations/Version20200514200056.php b/src/Migrations/Version20200731121119.php similarity index 74% rename from src/Migrations/Version20200514200056.php rename to src/Migrations/Version20200731121119.php index 5bed673..53af6b7 100644 --- a/src/Migrations/Version20200514200056.php +++ b/src/Migrations/Version20200731121119.php @@ -10,7 +10,7 @@ /** * Auto-generated Migration: Please modify to your needs! */ -final class Version20200514200056 extends AbstractMigration +final class Version20200731121119 extends AbstractMigration { public function getDescription() : string { @@ -19,20 +19,16 @@ public function getDescription() : string public function up(Schema $schema) : void { - // this up() migration is auto-generated, please modify it to your needs - $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql', 'Migration can only be executed safely on \'postgresql\'.'); - - $this->addSql('CREATE SEQUENCE app_product_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); - $this->addSql('CREATE SEQUENCE app_order_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); $this->addSql('CREATE SEQUENCE app_customer_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); - $this->addSql('CREATE TABLE app_product (id INT NOT NULL, code VARCHAR(100) NOT NULL, title VARCHAR(255) NOT NULL, description VARCHAR(255) NOT NULL, price INT NOT NULL, PRIMARY KEY(id))'); - $this->addSql('CREATE TABLE app_order (id INT NOT NULL, customer_id INT DEFAULT NULL, date_time TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, comments TEXT DEFAULT NULL, PRIMARY KEY(id))'); - $this->addSql('CREATE UNIQUE INDEX UNIQ_23FA1E559395C3F3 ON app_order (customer_id)'); - $this->addSql('COMMENT ON COLUMN app_order.date_time IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('CREATE SEQUENCE app_order_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE app_product_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE TABLE app_customer (id INT NOT NULL, email VARCHAR(255) NOT NULL, phone_number VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE TABLE app_order (id INT NOT NULL, customer_id INT DEFAULT NULL, created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, comments TEXT DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX IDX_23FA1E559395C3F3 ON app_order (customer_id)'); $this->addSql('CREATE TABLE order_product (order_id INT NOT NULL, product_id INT NOT NULL, PRIMARY KEY(order_id, product_id))'); $this->addSql('CREATE INDEX IDX_2530ADE68D9F6D38 ON order_product (order_id)'); $this->addSql('CREATE INDEX IDX_2530ADE64584665A ON order_product (product_id)'); - $this->addSql('CREATE TABLE app_customer (id INT NOT NULL, email VARCHAR(255) NOT NULL, phone_number VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE TABLE app_product (id INT NOT NULL, code VARCHAR(100) NOT NULL, title VARCHAR(255) NOT NULL, description VARCHAR(255) NOT NULL, price INT NOT NULL, PRIMARY KEY(id))'); $this->addSql('ALTER TABLE app_order ADD CONSTRAINT FK_23FA1E559395C3F3 FOREIGN KEY (customer_id) REFERENCES app_customer (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); $this->addSql('ALTER TABLE order_product ADD CONSTRAINT FK_2530ADE68D9F6D38 FOREIGN KEY (order_id) REFERENCES app_order (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); $this->addSql('ALTER TABLE order_product ADD CONSTRAINT FK_2530ADE64584665A FOREIGN KEY (product_id) REFERENCES app_product (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); @@ -40,19 +36,15 @@ public function up(Schema $schema) : void public function down(Schema $schema) : void { - // this down() migration is auto-generated, please modify it to your needs - $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql', 'Migration can only be executed safely on \'postgresql\'.'); - - $this->addSql('CREATE SCHEMA public'); - $this->addSql('ALTER TABLE order_product DROP CONSTRAINT FK_2530ADE64584665A'); - $this->addSql('ALTER TABLE order_product DROP CONSTRAINT FK_2530ADE68D9F6D38'); $this->addSql('ALTER TABLE app_order DROP CONSTRAINT FK_23FA1E559395C3F3'); - $this->addSql('DROP SEQUENCE app_product_id_seq CASCADE'); - $this->addSql('DROP SEQUENCE app_order_id_seq CASCADE'); + $this->addSql('ALTER TABLE order_product DROP CONSTRAINT FK_2530ADE68D9F6D38'); + $this->addSql('ALTER TABLE order_product DROP CONSTRAINT FK_2530ADE64584665A'); $this->addSql('DROP SEQUENCE app_customer_id_seq CASCADE'); - $this->addSql('DROP TABLE app_product'); + $this->addSql('DROP SEQUENCE app_order_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE app_product_id_seq CASCADE'); + $this->addSql('DROP TABLE app_customer'); $this->addSql('DROP TABLE app_order'); $this->addSql('DROP TABLE order_product'); - $this->addSql('DROP TABLE app_customer'); + $this->addSql('DROP TABLE app_product'); } } diff --git a/src/Migrations/Version20200514200057.php b/src/Migrations/Version20200731200057.php similarity index 51% rename from src/Migrations/Version20200514200057.php rename to src/Migrations/Version20200731200057.php index 4635fbb..e6a9c61 100644 --- a/src/Migrations/Version20200514200057.php +++ b/src/Migrations/Version20200731200057.php @@ -10,7 +10,7 @@ /** * Auto-generated Migration: Please modify to your needs! */ -final class Version20200514200057 extends AbstractMigration +final class Version20200731200057 extends AbstractMigration { public function getDescription() : string { @@ -19,15 +19,21 @@ public function getDescription() : string public function up(Schema $schema) : void { - // this up() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql', 'Migration can only be executed safely on \'postgresql\'.'); $this->addSql("INSERT INTO app_customer VALUES (1, 'test@email.com', '+49123456789')"); + $this->addSql("INSERT INTO app_product VALUES (1, 'JFND123SQ', 'Test product', 'This is great test product.', 3490)"); + $this->addSql("INSERT INTO app_product VALUES (2, 'GPND392XS', 'Another test product', 'Another descriptions.', 1599)"); + $this->addSql("INSERT INTO app_order VALUES (1, 1, now(), 'This is a test order')"); + $this->addSql("INSERT INTO app_order VALUES (2, 1, now(), 'This is also a test order')"); + $this->addSql("INSERT INTO order_product VALUES (1, 1)"); + $this->addSql("INSERT INTO order_product VALUES (1, 2)"); + $this->addSql("INSERT INTO order_product VALUES (2, 1)"); + $this->addSql("INSERT INTO order_product VALUES (2, 2)"); } public function down(Schema $schema) : void { - // this down() migration is auto-generated, please modify it to your needs $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql', 'Migration can only be executed safely on \'postgresql\'.'); } diff --git a/src/Repository/OrderRepository.php b/src/Repository/OrderRepository.php new file mode 100644 index 0000000..c653170 --- /dev/null +++ b/src/Repository/OrderRepository.php @@ -0,0 +1,41 @@ +createQueryBuilder('o'); + + try { + return $queryBuilder + ->select('COUNT(o.id)') + ->where($queryBuilder->expr()->eq('o.customer', ':customerId')) + ->setParameter('customerId', $customer->getId()) + ->getQuery() + ->getSingleScalarResult(); + } catch (NoResultException|NonUniqueResultException $e) { + return 0; + } + } + + public function totalPriceByCustomer(Customer $customer): int + { + return 139379; + } +} diff --git a/symfony.lock b/symfony.lock index 5e8d903..6e1ae23 100644 --- a/symfony.lock +++ b/symfony.lock @@ -75,11 +75,43 @@ "doctrine/reflection": { "version": "1.2.1" }, + "doctrine/sql-formatter": { + "version": "1.1.0" + }, "egulias/email-validator": { "version": "2.1.17" }, - "jdorn/sql-formatter": { - "version": "v1.2.17" + "friendsofsymfony/rest-bundle": { + "version": "2.2", + "recipe": { + "repo": "github.com/symfony/recipes-contrib", + "branch": "master", + "version": "2.2", + "ref": "cad41ef93d6150067ae2bb3c7fd729492dff6f0a" + }, + "files": [ + "config/packages/fos_rest.yaml" + ] + }, + "jms/metadata": { + "version": "2.3.0" + }, + "jms/serializer": { + "version": "3.8.0" + }, + "jms/serializer-bundle": { + "version": "3.0", + "recipe": { + "repo": "github.com/symfony/recipes-contrib", + "branch": "master", + "version": "3.0", + "ref": "384cec52df45f3bfd46a09930d6960a58872b268" + }, + "files": [ + "config/packages/dev/jms_serializer.yaml", + "config/packages/jms_serializer.yaml", + "config/packages/prod/jms_serializer.yaml" + ] }, "laminas/laminas-code": { "version": "3.4.1" @@ -362,6 +394,9 @@ "symfony/polyfill-php73": { "version": "v1.16.0" }, + "symfony/polyfill-php80": { + "version": "v1.18.0" + }, "symfony/process": { "version": "v5.0.8" }, @@ -516,5 +551,11 @@ }, "webmozart/assert": { "version": "1.8.0" + }, + "willdurand/jsonp-callback-validator": { + "version": "v1.1.0" + }, + "willdurand/negotiation": { + "version": "v2.3.1" } } From 2b72834a1a166077675d1cada120c082a507f8ac Mon Sep 17 00:00:00 2001 From: Oleksandr Kurakin Date: Mon, 10 Aug 2020 21:21:49 +0200 Subject: [PATCH 6/8] small adjustments --- src/Controller/AbstractApiController.php | 14 ++------------ src/Controller/CustomerStatisticController.php | 3 +-- src/Controller/OrderController.php | 3 +-- src/Dto/Response/CustomerResponseDto.php | 2 +- src/Dto/Response/CustomerStatisticResponseDto.php | 11 +++++++---- src/Dto/Response/OrderResponseDto.php | 2 +- src/Dto/Response/ProductResponseDto.php | 2 +- src/Dto/Response/ResponseDtoInterface.php | 9 --------- .../Transformer/AbstractResponseDtoTransformer.php | 6 +++--- .../Transformer/CustomerResponseDtoTransformer.php | 5 ++--- .../CustomerStatisticResponseDtoTransformer.php | 5 ++--- .../Transformer/OrderResponseDtoTransformer.php | 5 ++--- .../Transformer/ProductResponseDtoTransformer.php | 5 ++--- .../ResponseDtoTransformerInterface.php | 6 ++---- src/Entity/Customer.php | 2 +- src/Entity/Order.php | 6 +++--- src/Entity/Product.php | 2 +- src/Migrations/Version20200731121119.php | 2 +- 18 files changed, 33 insertions(+), 57 deletions(-) delete mode 100644 src/Dto/Response/ResponseDtoInterface.php diff --git a/src/Controller/AbstractApiController.php b/src/Controller/AbstractApiController.php index f63321a..c6a697d 100644 --- a/src/Controller/AbstractApiController.php +++ b/src/Controller/AbstractApiController.php @@ -21,23 +21,13 @@ protected function respond($data, int $statusCode = Response::HTTP_OK): Response { $view = $this->view($data, $statusCode); - $serializationGroups = $this->getSerializationGroups(); - - if (!empty($serializationGroups)) { - $view->getContext()->setGroups($serializationGroups); + if (!empty($this->serializationGroups)) { + $view->getContext()->setGroups($this->serializationGroups); } return $this->handleView($view); } - /** - * @return array - */ - protected function getSerializationGroups(): array - { - return $this->serializationGroups; - } - /** * @param array $serializationGroups */ diff --git a/src/Controller/CustomerStatisticController.php b/src/Controller/CustomerStatisticController.php index 074eb6f..8a5e089 100644 --- a/src/Controller/CustomerStatisticController.php +++ b/src/Controller/CustomerStatisticController.php @@ -6,7 +6,6 @@ use App\Dto\Response\Transformer\CustomerStatisticResponseDtoTransformer; use App\Entity\Customer; -use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; class CustomerStatisticController extends AbstractApiController @@ -18,7 +17,7 @@ public function __construct(CustomerStatisticResponseDtoTransformer $customerSta $this->customerStatisticResponseDtoTransformer = $customerStatisticResponseDtoTransformer; } - public function indexAction(Request $request): Response + public function indexAction(): Response { $customers = $this->getDoctrine()->getRepository(Customer::class)->findAll(); diff --git a/src/Controller/OrderController.php b/src/Controller/OrderController.php index e8c5131..8fa6ab0 100644 --- a/src/Controller/OrderController.php +++ b/src/Controller/OrderController.php @@ -6,7 +6,6 @@ use App\Dto\Response\Transformer\OrderResponseDtoTransformer; use App\Entity\Order; -use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; class OrderController extends AbstractApiController @@ -18,7 +17,7 @@ public function __construct(OrderResponseDtoTransformer $orderResponseDtoTransfo $this->orderResponseDtoTransformer = $orderResponseDtoTransformer; } - public function showAction(Request $request): Response + public function showAction(): Response { $orders = $this->getDoctrine()->getRepository(Order::class)->findAll(); diff --git a/src/Dto/Response/CustomerResponseDto.php b/src/Dto/Response/CustomerResponseDto.php index c47a09c..8ceae68 100644 --- a/src/Dto/Response/CustomerResponseDto.php +++ b/src/Dto/Response/CustomerResponseDto.php @@ -6,7 +6,7 @@ use JMS\Serializer\Annotation as Serialization; -class CustomerResponseDto implements ResponseDtoInterface +class CustomerResponseDto { /** * @Serialization\Type("string") diff --git a/src/Dto/Response/CustomerStatisticResponseDto.php b/src/Dto/Response/CustomerStatisticResponseDto.php index b0f2481..f17e21f 100644 --- a/src/Dto/Response/CustomerStatisticResponseDto.php +++ b/src/Dto/Response/CustomerStatisticResponseDto.php @@ -9,11 +9,11 @@ /** * @Serialization\VirtualProperty( * "firstName", - * exp="object.getQwe()", + * exp="object.getFirstName()", * options={@Serialization\SerializedName("my_first_name")} * ) */ -class CustomerStatisticResponseDto implements ResponseDtoInterface +class CustomerStatisticResponseDto { /** * @Serialization\Type("integer") @@ -50,8 +50,11 @@ public function setTotalOrdersPrice(\Closure $totalOrdersPrice): void $this->totalOrdersPrice = $totalOrdersPrice; } - public function getQwe(): string + /** + * @return string + */ + public function getFirstName(): string { - return 'qqqqq'; + return 'My name'; } } diff --git a/src/Dto/Response/OrderResponseDto.php b/src/Dto/Response/OrderResponseDto.php index 27bcfde..e8f4d13 100644 --- a/src/Dto/Response/OrderResponseDto.php +++ b/src/Dto/Response/OrderResponseDto.php @@ -6,7 +6,7 @@ use JMS\Serializer\Annotation as Serialization; -class OrderResponseDto implements ResponseDtoInterface +class OrderResponseDto { /** * @Serialization\Type("DateTime<'Y-m-d\TH:i:s'>") diff --git a/src/Dto/Response/ProductResponseDto.php b/src/Dto/Response/ProductResponseDto.php index 9193caa..5212c22 100644 --- a/src/Dto/Response/ProductResponseDto.php +++ b/src/Dto/Response/ProductResponseDto.php @@ -6,7 +6,7 @@ use JMS\Serializer\Annotation as Serialization; -class ProductResponseDto implements ResponseDtoInterface +class ProductResponseDto { /** * @Serialization\Type("string") diff --git a/src/Dto/Response/ResponseDtoInterface.php b/src/Dto/Response/ResponseDtoInterface.php deleted file mode 100644 index 923c077..0000000 --- a/src/Dto/Response/ResponseDtoInterface.php +++ /dev/null @@ -1,9 +0,0 @@ -transformFromObject($item); + foreach ($objects as $object) { + $dtos[] = $this->transformFromObject($object); } return $dtos; diff --git a/src/Dto/Response/Transformer/CustomerResponseDtoTransformer.php b/src/Dto/Response/Transformer/CustomerResponseDtoTransformer.php index 8b7fc44..fb8bfe5 100644 --- a/src/Dto/Response/Transformer/CustomerResponseDtoTransformer.php +++ b/src/Dto/Response/Transformer/CustomerResponseDtoTransformer.php @@ -5,7 +5,6 @@ namespace App\Dto\Response\Transformer; use App\Dto\Response\CustomerResponseDto; -use App\Dto\Response\ResponseDtoInterface; use App\Entity\Customer; class CustomerResponseDtoTransformer extends AbstractResponseDtoTransformer @@ -13,9 +12,9 @@ class CustomerResponseDtoTransformer extends AbstractResponseDtoTransformer /** * @param Customer $customer * - * @return ResponseDtoInterface + * @return mixed */ - public function transformFromObject($customer): ResponseDtoInterface + public function transformFromObject($customer) { $dto = new CustomerResponseDto(); $dto->email = $customer->getEmail(); diff --git a/src/Dto/Response/Transformer/CustomerStatisticResponseDtoTransformer.php b/src/Dto/Response/Transformer/CustomerStatisticResponseDtoTransformer.php index 0eb1656..4bdb3fc 100644 --- a/src/Dto/Response/Transformer/CustomerStatisticResponseDtoTransformer.php +++ b/src/Dto/Response/Transformer/CustomerStatisticResponseDtoTransformer.php @@ -5,7 +5,6 @@ namespace App\Dto\Response\Transformer; use App\Dto\Response\CustomerStatisticResponseDto; -use App\Dto\Response\ResponseDtoInterface; use App\Entity\Customer; use App\Repository\OrderRepository; @@ -21,9 +20,9 @@ public function __construct(OrderRepository $orderRepository) /** * @param Customer $customer * - * @return ResponseDtoInterface + * @return mixed */ - public function transformFromObject($customer): ResponseDtoInterface + public function transformFromObject($customer) { $dto = new CustomerStatisticResponseDto(); $dto->customerId = $customer->getId(); diff --git a/src/Dto/Response/Transformer/OrderResponseDtoTransformer.php b/src/Dto/Response/Transformer/OrderResponseDtoTransformer.php index faee764..a7a0e80 100644 --- a/src/Dto/Response/Transformer/OrderResponseDtoTransformer.php +++ b/src/Dto/Response/Transformer/OrderResponseDtoTransformer.php @@ -5,7 +5,6 @@ namespace App\Dto\Response\Transformer; use App\Dto\Response\OrderResponseDto; -use App\Dto\Response\ResponseDtoInterface; use App\Entity\Order; class OrderResponseDtoTransformer extends AbstractResponseDtoTransformer @@ -24,9 +23,9 @@ public function __construct( /** * @param Order $order * - * @return ResponseDtoInterface + * @return mixed */ - public function transformFromObject($order): ResponseDtoInterface + public function transformFromObject($order) { $dto = new OrderResponseDto(); $dto->createdAt = $order->getCreatedAt(); diff --git a/src/Dto/Response/Transformer/ProductResponseDtoTransformer.php b/src/Dto/Response/Transformer/ProductResponseDtoTransformer.php index 516f49d..423717a 100644 --- a/src/Dto/Response/Transformer/ProductResponseDtoTransformer.php +++ b/src/Dto/Response/Transformer/ProductResponseDtoTransformer.php @@ -5,7 +5,6 @@ namespace App\Dto\Response\Transformer; use App\Dto\Response\ProductResponseDto; -use App\Dto\Response\ResponseDtoInterface; use App\Entity\Product; class ProductResponseDtoTransformer extends AbstractResponseDtoTransformer @@ -13,9 +12,9 @@ class ProductResponseDtoTransformer extends AbstractResponseDtoTransformer /** * @param Product $product * - * @return ResponseDtoInterface + * @return mixed */ - public function transformFromObject($product): ResponseDtoInterface + public function transformFromObject($product) { $dto = new ProductResponseDto(); $dto->code = $product->getCode(); diff --git a/src/Dto/Response/Transformer/ResponseDtoTransformerInterface.php b/src/Dto/Response/Transformer/ResponseDtoTransformerInterface.php index d3db64f..abb3aa2 100644 --- a/src/Dto/Response/Transformer/ResponseDtoTransformerInterface.php +++ b/src/Dto/Response/Transformer/ResponseDtoTransformerInterface.php @@ -4,11 +4,9 @@ namespace App\Dto\Response\Transformer; -use App\Dto\Response\ResponseDtoInterface; - interface ResponseDtoTransformerInterface { - public function transformFromObject($object): ?ResponseDtoInterface; + public function transformFromObject($object); - public function transformFromObjects(iterable $items): iterable; + public function transformFromObjects(iterable $objects): iterable; } diff --git a/src/Entity/Customer.php b/src/Entity/Customer.php index f69b99e..d1bfb1a 100644 --- a/src/Entity/Customer.php +++ b/src/Entity/Customer.php @@ -13,7 +13,7 @@ class Customer { /** - * @var int + * @var int|null * * @ORM\Column(name="id", type="integer") * @ORM\Id() diff --git a/src/Entity/Order.php b/src/Entity/Order.php index 5734d92..b4bfea2 100644 --- a/src/Entity/Order.php +++ b/src/Entity/Order.php @@ -15,13 +15,13 @@ class Order { /** - * @var int + * @var int|null * * @ORM\Column(name="id", type="integer") * @ORM\Id() * @ORM\GeneratedValue(strategy="AUTO") */ - private int $id; + private ?int $id; /** * @var Customer @@ -47,7 +47,7 @@ class Order /** * @var string|null * - * @ORM\Column(name="comments", type="text", nullable=true) + * @ORM\Column(name="comment", type="text", nullable=true) */ private ?string $comment; diff --git a/src/Entity/Product.php b/src/Entity/Product.php index dc1b5e3..2987e61 100644 --- a/src/Entity/Product.php +++ b/src/Entity/Product.php @@ -13,7 +13,7 @@ class Product { /** - * @var int + * @var int|null * * @ORM\Column(name="id", type="integer") * @ORM\Id() diff --git a/src/Migrations/Version20200731121119.php b/src/Migrations/Version20200731121119.php index 53af6b7..2d67949 100644 --- a/src/Migrations/Version20200731121119.php +++ b/src/Migrations/Version20200731121119.php @@ -23,7 +23,7 @@ public function up(Schema $schema) : void $this->addSql('CREATE SEQUENCE app_order_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); $this->addSql('CREATE SEQUENCE app_product_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); $this->addSql('CREATE TABLE app_customer (id INT NOT NULL, email VARCHAR(255) NOT NULL, phone_number VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); - $this->addSql('CREATE TABLE app_order (id INT NOT NULL, customer_id INT DEFAULT NULL, created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, comments TEXT DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE TABLE app_order (id INT NOT NULL, customer_id INT DEFAULT NULL, created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, comment TEXT DEFAULT NULL, PRIMARY KEY(id))'); $this->addSql('CREATE INDEX IDX_23FA1E559395C3F3 ON app_order (customer_id)'); $this->addSql('CREATE TABLE order_product (order_id INT NOT NULL, product_id INT NOT NULL, PRIMARY KEY(order_id, product_id))'); $this->addSql('CREATE INDEX IDX_2530ADE68D9F6D38 ON order_product (order_id)'); From 215ade741dbf24f25f45c94b0a8cfe78e6c64562 Mon Sep 17 00:00:00 2001 From: Oleksandr Kurakin Date: Mon, 10 Aug 2020 21:27:28 +0200 Subject: [PATCH 7/8] Data transfer objects --- .dockerignore | 5 - Dockerfile | 109 ------------------ composer.lock | 18 +-- config/bundles.php | 2 +- config/packages/fos_rest.yaml | 2 - docker-compose.yml | 53 --------- docker.sh | 22 ---- docker/nginx/conf.d/default.conf | 60 ---------- docker/php/docker-entrypoint.sh | 29 ----- docker/php/php-cli.ini | 16 --- docker/php/php.ini | 15 --- docker/php/xdebug.ini | 8 -- src/Controller/AbstractApiController.php | 17 +-- .../CustomerStatisticController.php | 4 + src/Dto/Exception/UnexpectedTypeException.php | 15 +++ .../Response/CustomerStatisticResponseDto.php | 38 +++--- src/Dto/Response/ProductResponseDto.php | 2 +- .../AbstractResponseDtoTransformer.php | 11 +- .../CustomerResponseDtoTransformer.php | 9 +- ...ustomerStatisticResponseDtoTransformer.php | 15 ++- .../OrderResponseDtoTransformer.php | 9 +- .../ProductResponseDtoTransformer.php | 9 +- .../ResponseDtoTransformerInterface.php | 1 - src/Repository/OrderRepository.php | 6 +- 24 files changed, 92 insertions(+), 383 deletions(-) delete mode 100644 .dockerignore delete mode 100644 Dockerfile delete mode 100644 docker-compose.yml delete mode 100755 docker.sh delete mode 100644 docker/nginx/conf.d/default.conf delete mode 100755 docker/php/docker-entrypoint.sh delete mode 100644 docker/php/php-cli.ini delete mode 100644 docker/php/php.ini delete mode 100644 docker/php/xdebug.ini create mode 100644 src/Dto/Exception/UnexpectedTypeException.php diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 4e9c0d0..0000000 --- a/.dockerignore +++ /dev/null @@ -1,5 +0,0 @@ -/var/ -/.git/ -.idea -/public/bundles/ -/public/assets/ diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 9d2cd71..0000000 --- a/Dockerfile +++ /dev/null @@ -1,109 +0,0 @@ -ARG PHP_VERSION=7.4.5 -ARG NGINX_VERSION=1.17 - -FROM php:${PHP_VERSION}-fpm-alpine AS app_php - -RUN apk add --no-cache \ - acl \ - file \ - gettext \ - git \ - ; - -ARG APCU_VERSION=5.1.18 -ARG XDEBUG_VERSION=2.9.4 -RUN set -eux; \ - apk add --no-cache --virtual .build-deps \ - $PHPIZE_DEPS \ - coreutils \ - freetype-dev \ - icu-dev \ - libjpeg-turbo-dev \ - libpng-dev \ - libtool \ - libwebp-dev \ - libzip-dev \ - zlib-dev \ - postgresql-libs \ - postgresql-dev \ - zip \ - ; \ - \ - docker-php-ext-configure gd --with-freetype --with-jpeg; \ - docker-php-ext-install -j$(nproc) \ - exif \ - gd \ - intl \ - pdo_pgsql \ - zip \ - ; \ - pecl install \ - apcu-${APCU_VERSION} \ - xdebug-${XDEBUG_VERSION} \ - ; \ - pecl clear-cache; \ - docker-php-ext-enable \ - apcu \ - opcache \ - ; \ - \ - runDeps="$( \ - scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \ - | tr ',' '\n' \ - | sort -u \ - | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ - )"; \ - apk add --no-cache --virtual .app-phpexts-rundeps $runDeps; \ - \ - apk del .build-deps - -COPY --from=composer:latest /usr/bin/composer /usr/bin/composer -COPY docker/php/php.ini /usr/local/etc/php/php.ini -COPY docker/php/php-cli.ini /usr/local/etc/php/php-cli.ini -COPY docker/php/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini - -# https://getcomposer.org/doc/03-cli.md#composer-allow-superuser -ENV COMPOSER_ALLOW_SUPERUSER=1 -RUN set -eux; \ - composer global require "hirak/prestissimo:^0.3" --prefer-dist --no-progress --no-suggest --classmap-authoritative; \ - composer clear-cache -ENV PATH="${PATH}:/root/.composer/vendor/bin" - -WORKDIR /srv/app - -ARG APP_ENV=prod - -# prevent the reinstallation of vendors at every changes in the source code -COPY composer.json composer.lock symfony.lock ./ -RUN set -eux; \ - composer install --prefer-dist --no-autoloader --no-scripts --no-progress --no-suggest; \ - composer clear-cache - -# copy only specifically what we need -COPY .env .env.test ./ -COPY bin bin/ -COPY config config/ -COPY public public/ -COPY src src/ - -RUN set -eux; \ - mkdir -p var/cache var/log; \ - composer dump-autoload --classmap-authoritative; \ - APP_SECRET='' composer run-script post-install-cmd; \ - chmod +x bin/console; sync; -VOLUME /srv/app/var - -COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint -RUN chmod +x /usr/local/bin/docker-entrypoint - -ENTRYPOINT ["docker-entrypoint"] -CMD ["php-fpm"] - - -FROM nginx:${NGINX_VERSION}-alpine AS app_nginx - -COPY docker/nginx/conf.d/default.conf /etc/nginx/conf.d/ - -WORKDIR /srv/app - -COPY --from=app_php /srv/app/public public/ diff --git a/composer.lock b/composer.lock index e397e58..a8f83dc 100644 --- a/composer.lock +++ b/composer.lock @@ -5140,16 +5140,16 @@ }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.18.0", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "bc6549d068d0160e0f10f7a5a23c7d1406b95ebe" + "reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/bc6549d068d0160e0f10f7a5a23c7d1406b95ebe", - "reference": "bc6549d068d0160e0f10f7a5a23c7d1406b95ebe", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/5dcab1bc7146cf8c1beaa4502a3d9be344334251", + "reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251", "shasum": "" }, "require": { @@ -5221,11 +5221,11 @@ "type": "tidelift" } ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-08-04T06:02:08+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.18.0", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -5306,7 +5306,7 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.18.0", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -5383,7 +5383,7 @@ }, { "name": "symfony/polyfill-php73", - "version": "v1.18.0", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", @@ -5459,7 +5459,7 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.18.0", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", diff --git a/config/bundles.php b/config/bundles.php index 38042cb..e8a06c8 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -12,6 +12,6 @@ Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true], Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], - FOS\RestBundle\FOSRestBundle::class => ['all' => true], JMS\SerializerBundle\JMSSerializerBundle::class => ['all' => true], + FOS\RestBundle\FOSRestBundle::class => ['all' => true], ]; diff --git a/config/packages/fos_rest.yaml b/config/packages/fos_rest.yaml index bc3f872..a28e0ee 100644 --- a/config/packages/fos_rest.yaml +++ b/config/packages/fos_rest.yaml @@ -1,7 +1,5 @@ # Read the documentation: https://symfony.com/doc/master/bundles/FOSRestBundle/index.html fos_rest: - serializer: - serialize_null: true # param_fetcher_listener: true # allowed_methods_listener: true # routing_loader: true diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 8de777f..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,53 +0,0 @@ -version: '3.7' - -services: - php: - build: - context: . - target: app_php - cache_from: - - sf.forms/app/php:dev - - sf.forms/app/nginx:dev - image: sf.forms/app/php:dev - depends_on: - - postgres - environment: - - APP_ENV=dev - - APP_DEBUG=1 - - PHP_DATE_TIMEZONE=${PHP_DATE_TIMEZONE:-UTC} - - XDEBUG_CONFIG=remote_host=docker.for.mac.localhost - - PHP_IDE_CONFIG=serverName=localhost - volumes: - - .:/srv/app:rw,cached - - ./var:/srv/app/var:rw - - ./public:/srv/app/public:rw,delegated - - postgres: - image: postgres:12.2-alpine - environment: - - POSTGRES_DB=test - - POSTGRES_USER=sf_user - - POSTGRES_PASSWORD=nopassword - - PGDATA=/var/lib/postgresql/data - volumes: - - db-data:/var/lib/postgresql/data:rw - ports: - - "5432:5432" - - nginx: - build: - context: . - target: app_nginx - cache_from: - - sf.forms/app/php:dev - - sf.forms/app/nginx:dev - image: sf.forms/app/nginx:dev - depends_on: - - php - volumes: - - ./public:/srv/app/public:ro - ports: - - "8080:80" - -volumes: - db-data: diff --git a/docker.sh b/docker.sh deleted file mode 100755 index fa40ed5..0000000 --- a/docker.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash -set -e - -if [[ $1 == "prod" ]] -then - printf "Running prod...\n" - docker-compose -f docker-compose_prod.yml up -d - sudo service google-fluentd restart - sudo service stackdriver-agent restart -elif [[ $1 == "build" ]] -then - printf "Building prod...\n" - docker-compose -f docker-compose_prod.yml build -elif [[ $1 == "refresh-database" ]] -then - printf "Refreshing database...\n" - docker-compose exec php bin/console --env=dev app:database:empty --force - docker-compose exec php bin/console --env=dev doctrine:migrations:migrate -n -else - printf "Running dev...\n" - docker-compose up --build --remove-orphans -fi; diff --git a/docker/nginx/conf.d/default.conf b/docker/nginx/conf.d/default.conf deleted file mode 100644 index 26d2abe..0000000 --- a/docker/nginx/conf.d/default.conf +++ /dev/null @@ -1,60 +0,0 @@ -server { - root /srv/app/public; - - location / { - root /srv/app/public/assets; - - index index.html index.php; - - try_files $uri $uri/ /index.html =404; - } - -# location / { - # try to serve file directly, fallback to index.php -# try_files $uri /index.php$is_args$args; -# } - - location ~ ^/api/ { - try_files $uri @rewriteapp; - } - - location ~ ^/_profiler/ { - try_files $uri @rewriteapp; - } - - location @rewriteapp { - rewrite ^(.*)$ /index.php/$1 last; - } - - location ~ ^/index\.php(/|$) { - # Comment the next line and uncomment the next to enable dynamic resolution (incompatible with Kubernetes) - fastcgi_pass php:9000; - #resolver 127.0.0.11; - #set $upstream_host php; - #fastcgi_pass $upstream_host:9000; - - fastcgi_split_path_info ^(.+\.php)(/.*)$; - include fastcgi_params; - # When you are using symlinks to link the document root to the - # current version of your application, you should pass the real - # application path instead of the path to the symlink to PHP - # FPM. - # Otherwise, PHP's OPcache may not properly detect changes to - # your PHP files (see https://github.com/zendtech/ZendOptimizerPlus/issues/126 - # for more information). - fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; - fastcgi_param DOCUMENT_ROOT $realpath_root; - # Prevents URIs that include the front controller. This will 404: - # http://domain.tld/index.php/some-path - # Remove the internal directive to allow URIs like this - internal; - } - - # return 404 for all other php files not matching the front controller - # this prevents access to other php files you don't want to be accessible. - location ~ \.php$ { - return 404; - } - - client_max_body_size 6m; -} diff --git a/docker/php/docker-entrypoint.sh b/docker/php/docker-entrypoint.sh deleted file mode 100755 index 3dba800..0000000 --- a/docker/php/docker-entrypoint.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh -set -e - -# first arg is `-f` or `--some-option` -if [ "${1#-}" != "$1" ]; then - set -- php-fpm "$@" -fi - -if [ "$1" = 'php-fpm' ] || [ "$1" = 'bin/console' ]; then - mkdir -p var/cache var/log -# setfacl -R -m u:www-data:rwX -m u:"$(whoami)":rwX var public/media -# setfacl -dR -m u:www-data:rwX -m u:"$(whoami)":rwX var public/media - - if [ "$APP_ENV" != 'prod' ]; then - composer install --prefer-dist --no-progress --no-suggest --no-interaction -# bin/console assets:install --no-interaction - fi - - until bin/console doctrine:query:sql "select 1" >/dev/null 2>&1; do - (>&2 echo "Waiting for PostgreSql to be ready...") - sleep 1 - done - -# if [ "$(ls -A src/Migrations/*.php 2> /dev/null)" ]; then -# bin/console doctrine:migrations:migrate --no-interaction -# fi -fi - -exec docker-php-entrypoint "$@" diff --git a/docker/php/php-cli.ini b/docker/php/php-cli.ini deleted file mode 100644 index ef77c73..0000000 --- a/docker/php/php-cli.ini +++ /dev/null @@ -1,16 +0,0 @@ -apc.enable_cli = 1 -date.timezone = ${PHP_DATE_TIMEZONE} -opcache.enable_cli = 1 -session.auto_start = Off -short_open_tag = Off - -# http://symfony.com/doc/current/performance.html -opcache.interned_strings_buffer = 16 -opcache.max_accelerated_files = 20000 -opcache.memory_consumption = 256 -realpath_cache_size = 4096K -realpath_cache_ttl = 600 - -memory_limit = 2G -post_max_size = 6M -upload_max_filesize = 5M diff --git a/docker/php/php.ini b/docker/php/php.ini deleted file mode 100644 index dd08e3b..0000000 --- a/docker/php/php.ini +++ /dev/null @@ -1,15 +0,0 @@ -apc.enable_cli = 1 -date.timezone = ${PHP_DATE_TIMEZONE} -opcache.enable_cli = 1 -session.auto_start = Off -short_open_tag = Off - -# http://symfony.com/doc/current/performance.html -opcache.interned_strings_buffer = 16 -opcache.max_accelerated_files = 20000 -opcache.memory_consumption = 256 -realpath_cache_size = 4096K -realpath_cache_ttl = 600 - -post_max_size = 6M -upload_max_filesize = 5M diff --git a/docker/php/xdebug.ini b/docker/php/xdebug.ini deleted file mode 100644 index cdf66dc..0000000 --- a/docker/php/xdebug.ini +++ /dev/null @@ -1,8 +0,0 @@ -zend_extension=xdebug.so -xdebug.remote_enable=1 -xdebug.remote_port=9002 -xdebug.remote_connect_back=0 -xdebug.profiler_enable_trigger=1 -xdebug.idekey=docker -xdebug.remote_host=docker.for.mac.localhost -xdebug.remote_autostart=1 diff --git a/src/Controller/AbstractApiController.php b/src/Controller/AbstractApiController.php index c6a697d..c482a31 100644 --- a/src/Controller/AbstractApiController.php +++ b/src/Controller/AbstractApiController.php @@ -12,27 +12,20 @@ abstract class AbstractApiController extends AbstractFOSRestController protected const SERIALIZATION_GROUP_DEFAULT = 'Default'; protected const SERIALIZATION_GROUP_ADMIN = 'Admin'; - /** @var array */ - private $serializationGroups = [ - AbstractApiController::SERIALIZATION_GROUP_DEFAULT, + private array $serializationGroups = [ + self::SERIALIZATION_GROUP_DEFAULT, ]; protected function respond($data, int $statusCode = Response::HTTP_OK): Response { $view = $this->view($data, $statusCode); - - if (!empty($this->serializationGroups)) { - $view->getContext()->setGroups($this->serializationGroups); - } + $view->getContext()->setGroups($this->serializationGroups); return $this->handleView($view); } - /** - * @param array $serializationGroups - */ - protected function setSerializationGroups(array $serializationGroups): void + protected function addSerializationGroup(string $serializationGroup): void { - $this->serializationGroups = $serializationGroups; + $this->serializationGroups[] = $serializationGroup; } } diff --git a/src/Controller/CustomerStatisticController.php b/src/Controller/CustomerStatisticController.php index 8a5e089..af7a26e 100644 --- a/src/Controller/CustomerStatisticController.php +++ b/src/Controller/CustomerStatisticController.php @@ -23,6 +23,10 @@ public function indexAction(): Response $customer = reset($customers); + if (false/*\in_array('ROLE_ADMIN', $this->getUser()->getRoles(), true)*/) { + $this->addSerializationGroup(AbstractApiController::SERIALIZATION_GROUP_ADMIN); + } + $dto = $this->customerStatisticResponseDtoTransformer->transformFromObject($customer); return $this->respond($dto); diff --git a/src/Dto/Exception/UnexpectedTypeException.php b/src/Dto/Exception/UnexpectedTypeException.php new file mode 100644 index 0000000..d08f00c --- /dev/null +++ b/src/Dto/Exception/UnexpectedTypeException.php @@ -0,0 +1,15 @@ +totalOrdersPrice; - + $callable = $this->ordersTotalPrice; return $callable(); } /** - * @param \Closure $totalOrdersPrice + * @param \Closure $ordersTotalPrice */ - public function setTotalOrdersPrice(\Closure $totalOrdersPrice): void + public function setOrdersTotalPrice(\Closure $ordersTotalPrice): void { - $this->totalOrdersPrice = $totalOrdersPrice; + $this->ordersTotalPrice = $ordersTotalPrice; } - /** - * @return string - */ - public function getFirstName(): string + public function getCompletedOrders(): int { - return 'My name'; + return random_int(10, 25); } } diff --git a/src/Dto/Response/ProductResponseDto.php b/src/Dto/Response/ProductResponseDto.php index 5212c22..9937978 100644 --- a/src/Dto/Response/ProductResponseDto.php +++ b/src/Dto/Response/ProductResponseDto.php @@ -24,7 +24,7 @@ class ProductResponseDto public string $description; /** - * @Serialization\Type("integer") + * @Serialization\Type("int") */ public int $price; } diff --git a/src/Dto/Response/Transformer/AbstractResponseDtoTransformer.php b/src/Dto/Response/Transformer/AbstractResponseDtoTransformer.php index 279b1ff..6942371 100644 --- a/src/Dto/Response/Transformer/AbstractResponseDtoTransformer.php +++ b/src/Dto/Response/Transformer/AbstractResponseDtoTransformer.php @@ -6,16 +6,15 @@ abstract class AbstractResponseDtoTransformer implements ResponseDtoTransformerInterface { - /** - * @inheritdoc - */ public function transformFromObjects(iterable $objects): iterable { - $dtos = []; + $dto = []; + foreach ($objects as $object) { - $dtos[] = $this->transformFromObject($object); + $dto[] = $this->transformFromObject($object); } - return $dtos; + return $dto; } + } diff --git a/src/Dto/Response/Transformer/CustomerResponseDtoTransformer.php b/src/Dto/Response/Transformer/CustomerResponseDtoTransformer.php index fb8bfe5..d0fee75 100644 --- a/src/Dto/Response/Transformer/CustomerResponseDtoTransformer.php +++ b/src/Dto/Response/Transformer/CustomerResponseDtoTransformer.php @@ -4,6 +4,7 @@ namespace App\Dto\Response\Transformer; +use App\Dto\Exception\UnexpectedTypeException; use App\Dto\Response\CustomerResponseDto; use App\Entity\Customer; @@ -12,10 +13,14 @@ class CustomerResponseDtoTransformer extends AbstractResponseDtoTransformer /** * @param Customer $customer * - * @return mixed + * @return CustomerResponseDto */ - public function transformFromObject($customer) + public function transformFromObject($customer): CustomerResponseDto { + if (!$customer instanceof Customer) { + throw new UnexpectedTypeException('Expected type of Customer but got ' . \get_class($customer)); + } + $dto = new CustomerResponseDto(); $dto->email = $customer->getEmail(); $dto->phoneNumber = $customer->getPhoneNumber(); diff --git a/src/Dto/Response/Transformer/CustomerStatisticResponseDtoTransformer.php b/src/Dto/Response/Transformer/CustomerStatisticResponseDtoTransformer.php index 4bdb3fc..30c5853 100644 --- a/src/Dto/Response/Transformer/CustomerStatisticResponseDtoTransformer.php +++ b/src/Dto/Response/Transformer/CustomerStatisticResponseDtoTransformer.php @@ -4,6 +4,7 @@ namespace App\Dto\Response\Transformer; +use App\Dto\Exception\UnexpectedTypeException; use App\Dto\Response\CustomerStatisticResponseDto; use App\Entity\Customer; use App\Repository\OrderRepository; @@ -20,16 +21,20 @@ public function __construct(OrderRepository $orderRepository) /** * @param Customer $customer * - * @return mixed + * @return CustomerStatisticResponseDto */ - public function transformFromObject($customer) + public function transformFromObject($customer): CustomerStatisticResponseDto { + if (!$customer instanceof Customer) { + throw new UnexpectedTypeException('Expected type of Customer but got ' . \get_class($customer)); + } + $dto = new CustomerStatisticResponseDto(); $dto->customerId = $customer->getId(); - $dto->totalOrderCount = $this->orderRepository->countAllByCustomer($customer); + $dto->ordersTotalCount = $this->orderRepository->getTotalCountByCustomer($customer); - $dto->setTotalOrdersPrice(function() use ($customer) { - return $this->orderRepository->totalPriceByCustomer($customer); + $dto->setOrdersTotalPrice(function() use ($customer) { + return $this->orderRepository->getTotalPriceByCustomer($customer); }); return $dto; diff --git a/src/Dto/Response/Transformer/OrderResponseDtoTransformer.php b/src/Dto/Response/Transformer/OrderResponseDtoTransformer.php index a7a0e80..e4e6d1d 100644 --- a/src/Dto/Response/Transformer/OrderResponseDtoTransformer.php +++ b/src/Dto/Response/Transformer/OrderResponseDtoTransformer.php @@ -4,6 +4,7 @@ namespace App\Dto\Response\Transformer; +use App\Dto\Exception\UnexpectedTypeException; use App\Dto\Response\OrderResponseDto; use App\Entity\Order; @@ -23,10 +24,14 @@ public function __construct( /** * @param Order $order * - * @return mixed + * @return OrderResponseDto */ - public function transformFromObject($order) + public function transformFromObject($order): OrderResponseDto { + if (!$order instanceof Order) { + throw new UnexpectedTypeException('Expected type of Order but got ' . \get_class($order)); + } + $dto = new OrderResponseDto(); $dto->createdAt = $order->getCreatedAt(); $dto->comment = $order->getComment(); diff --git a/src/Dto/Response/Transformer/ProductResponseDtoTransformer.php b/src/Dto/Response/Transformer/ProductResponseDtoTransformer.php index 423717a..404e555 100644 --- a/src/Dto/Response/Transformer/ProductResponseDtoTransformer.php +++ b/src/Dto/Response/Transformer/ProductResponseDtoTransformer.php @@ -4,6 +4,7 @@ namespace App\Dto\Response\Transformer; +use App\Dto\Exception\UnexpectedTypeException; use App\Dto\Response\ProductResponseDto; use App\Entity\Product; @@ -12,10 +13,14 @@ class ProductResponseDtoTransformer extends AbstractResponseDtoTransformer /** * @param Product $product * - * @return mixed + * @return ProductResponseDto */ - public function transformFromObject($product) + public function transformFromObject($product): ProductResponseDto { + if (!$product instanceof Product) { + throw new UnexpectedTypeException('Expected type of Customer but got ' . \get_class($product)); + } + $dto = new ProductResponseDto(); $dto->code = $product->getCode(); $dto->title = $product->getTitle(); diff --git a/src/Dto/Response/Transformer/ResponseDtoTransformerInterface.php b/src/Dto/Response/Transformer/ResponseDtoTransformerInterface.php index abb3aa2..db204b5 100644 --- a/src/Dto/Response/Transformer/ResponseDtoTransformerInterface.php +++ b/src/Dto/Response/Transformer/ResponseDtoTransformerInterface.php @@ -7,6 +7,5 @@ interface ResponseDtoTransformerInterface { public function transformFromObject($object); - public function transformFromObjects(iterable $objects): iterable; } diff --git a/src/Repository/OrderRepository.php b/src/Repository/OrderRepository.php index c653170..59d2f7a 100644 --- a/src/Repository/OrderRepository.php +++ b/src/Repository/OrderRepository.php @@ -18,7 +18,7 @@ public function __construct(ManagerRegistry $registry) parent::__construct($registry, Order::class); } - public function countAllByCustomer(Customer $customer): int + public function getTotalCountByCustomer(Customer $customer): int { $queryBuilder = $this->createQueryBuilder('o'); @@ -34,8 +34,10 @@ public function countAllByCustomer(Customer $customer): int } } - public function totalPriceByCustomer(Customer $customer): int + public function getTotalPriceByCustomer(Customer $customer): int { + var_dump('here'); + exit; return 139379; } } From 3885ab9bff0958f8413bd2ec6fc915ad2ee66227 Mon Sep 17 00:00:00 2001 From: Oleksandr Kurakin Date: Thu, 14 Jul 2022 00:40:07 +0200 Subject: [PATCH 8/8] Create README.md --- README.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..935fa94 --- /dev/null +++ b/README.md @@ -0,0 +1,49 @@ +# How to use data transfer objects (DTO) in Symfony API application + +Watch full tutorial [here](https://youtu.be/XxIhzgGv214) + +# Other video tutorials + +## Code faster with Github Copilot + +There is a [video](https://youtu.be/qyxJXNNvd70) + +## Create a classic website using Symfony 5 + +There is a [video](https://youtu.be/svAxl6U8akQ) + +## Delay "heavy" tasks in Symfony with component Messenger + +There is a [video](https://youtu.be/UHlA5nHdCmw) + +## Delay heavy tasks in Symfony with kernel.terminate event to decrease response time + +There is a [video](https://youtu.be/HrQme9KUlUg) + +## Create Symfony 5 project with Docker and Postgres + +There is a [video](https://youtu.be/4UrPI6Y3BWA) + +## Design pattern "Chain of responsibility" (Symfony implementation) + +There is a [video](https://youtu.be/3KQlubIv684) + +## How to build simple CRUD API service with Symfony 5 (for beginners) + +There is a [branch](https://github.com/Cap-Coding/symfony_api/tree/crud_api) and here is a [video](https://youtu.be/tbXpX4dAqjg) + +## How to use Symfony Form Events in API service + +There is a [video](https://youtu.be/lLwx96DA_Ww) + +## How to use object factories with Symfony Forms + +There is a [video](https://youtu.be/chgvsi6TWM8) + +## Dockerize WordPress + +There is a [video](https://youtu.be/coqucs1UhMY) + +## Get trusted SSL certificate (https) for free with Let's Encrypt and Certbot + +There is a [video](https://youtu.be/nFDk43tAKFQ)