| @@ -0,0 +1,41 @@ | |||
| # 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. | |||
| # https://symfony.com/doc/current/configuration/secrets.html | |||
| # | |||
| # 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=5f1c76de75f7ebdd1367e5d27265b15e | |||
| ###< symfony/framework-bundle ### | |||
| ###> doctrine/doctrine-bundle ### | |||
| # Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url | |||
| # IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml | |||
| # | |||
| # DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db" | |||
| # DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=8.0.32&charset=utf8mb4" | |||
| # DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=10.11.2-MariaDB&charset=utf8mb4" | |||
| DATABASE_URL="postgresql://app:!ChangeMe!@127.0.0.1:5432/app?serverVersion=16&charset=utf8" | |||
| ###< doctrine/doctrine-bundle ### | |||
| ###> symfony/messenger ### | |||
| # Choose one of the transports below | |||
| # MESSENGER_TRANSPORT_DSN=amqp://guest:guest@localhost:5672/%2f/messages | |||
| # MESSENGER_TRANSPORT_DSN=redis://localhost:6379/messages | |||
| MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0 | |||
| ###< symfony/messenger ### | |||
| ###> symfony/mailer ### | |||
| # MAILER_DSN=null://null | |||
| ###< symfony/mailer ### | |||
| @@ -0,0 +1,6 @@ | |||
| # define your env variables for the test env here | |||
| KERNEL_CLASS='App\Kernel' | |||
| APP_SECRET='$ecretf0rt3st' | |||
| SYMFONY_DEPRECATIONS_HELPER=999999 | |||
| PANTHER_APP_ENV=panther | |||
| PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots | |||
| @@ -0,0 +1,27 @@ | |||
| ###> symfony/framework-bundle ### | |||
| /.env.local | |||
| /.env.local.php | |||
| /.env.*.local | |||
| /config/secrets/prod/prod.decrypt.private.php | |||
| /public/bundles/ | |||
| /var/ | |||
| /vendor/ | |||
| ###< symfony/framework-bundle ### | |||
| ###> phpunit/phpunit ### | |||
| /phpunit.xml | |||
| .phpunit.result.cache | |||
| ###< phpunit/phpunit ### | |||
| ###> symfony/phpunit-bridge ### | |||
| .phpunit.result.cache | |||
| /phpunit.xml | |||
| ###< symfony/phpunit-bridge ### | |||
| ###> symfony/asset-mapper ### | |||
| /public/assets/ | |||
| /assets/vendor/ | |||
| ###< symfony/asset-mapper ### | |||
| /.idea/ | |||
| @@ -0,0 +1,10 @@ | |||
| import './bootstrap.js'; | |||
| /* | |||
| * Welcome to your app's main JavaScript file! | |||
| * | |||
| * This file will be included onto the page via the importmap() Twig function, | |||
| * which should already be in your base.html.twig. | |||
| */ | |||
| import './styles/app.css'; | |||
| console.log('This log comes from assets/app.js - welcome to AssetMapper! 🎉'); | |||
| @@ -0,0 +1,5 @@ | |||
| import { startStimulusApp } from '@symfony/stimulus-bundle'; | |||
| const app = startStimulusApp(); | |||
| // register any custom, 3rd party controllers here | |||
| // app.register('some_controller_name', SomeImportedController); | |||
| @@ -0,0 +1,15 @@ | |||
| { | |||
| "controllers": { | |||
| "@symfony/ux-turbo": { | |||
| "turbo-core": { | |||
| "enabled": true, | |||
| "fetch": "eager" | |||
| }, | |||
| "mercure-turbo-stream": { | |||
| "enabled": false, | |||
| "fetch": "eager" | |||
| } | |||
| } | |||
| }, | |||
| "entrypoints": [] | |||
| } | |||
| @@ -0,0 +1,16 @@ | |||
| import { Controller } from '@hotwired/stimulus'; | |||
| /* | |||
| * This is an example Stimulus controller! | |||
| * | |||
| * Any element with a data-controller="hello" attribute will cause | |||
| * this controller to be executed. The name "hello" comes from the filename: | |||
| * hello_controller.js -> "hello" | |||
| * | |||
| * Delete this file or adapt it for your use! | |||
| */ | |||
| export default class extends Controller { | |||
| connect() { | |||
| this.element.textContent = 'Hello Stimulus! Edit me in assets/controllers/hello_controller.js'; | |||
| } | |||
| } | |||
| @@ -0,0 +1,3 @@ | |||
| body { | |||
| background-color: skyblue; | |||
| } | |||
| @@ -0,0 +1,21 @@ | |||
| #!/usr/bin/env php | |||
| <?php | |||
| use App\Kernel; | |||
| use Symfony\Bundle\FrameworkBundle\Console\Application; | |||
| if (!is_dir(dirname(__DIR__).'/vendor')) { | |||
| throw new LogicException('Dependencies are missing. Try running "composer install".'); | |||
| } | |||
| if (!is_file(dirname(__DIR__).'/vendor/autoload_runtime.php')) { | |||
| throw new LogicException('Symfony Runtime is missing. Try running "composer require symfony/runtime".'); | |||
| } | |||
| require_once dirname(__DIR__).'/vendor/autoload_runtime.php'; | |||
| return function (array $context) { | |||
| $kernel = new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']); | |||
| return new Application($kernel); | |||
| }; | |||
| @@ -0,0 +1,23 @@ | |||
| #!/usr/bin/env php | |||
| <?php | |||
| if (!ini_get('date.timezone')) { | |||
| ini_set('date.timezone', 'UTC'); | |||
| } | |||
| if (is_file(dirname(__DIR__).'/vendor/phpunit/phpunit/phpunit')) { | |||
| if (PHP_VERSION_ID >= 80000) { | |||
| require dirname(__DIR__).'/vendor/phpunit/phpunit/phpunit'; | |||
| } else { | |||
| define('PHPUNIT_COMPOSER_INSTALL', dirname(__DIR__).'/vendor/autoload.php'); | |||
| require PHPUNIT_COMPOSER_INSTALL; | |||
| PHPUnit\TextUI\Command::main(); | |||
| } | |||
| } else { | |||
| if (!is_file(dirname(__DIR__).'/vendor/symfony/phpunit-bridge/bin/simple-phpunit.php')) { | |||
| echo "Unable to find the `simple-phpunit.php` script in `vendor/symfony/phpunit-bridge/bin/`.\n"; | |||
| exit(1); | |||
| } | |||
| require dirname(__DIR__).'/vendor/symfony/phpunit-bridge/bin/simple-phpunit.php'; | |||
| } | |||
| @@ -0,0 +1,19 @@ | |||
| version: '3' | |||
| services: | |||
| ###> doctrine/doctrine-bundle ### | |||
| database: | |||
| ports: | |||
| - "5432" | |||
| ###< doctrine/doctrine-bundle ### | |||
| ###> symfony/mailer ### | |||
| mailer: | |||
| image: axllent/mailpit | |||
| ports: | |||
| - "1025" | |||
| - "8025" | |||
| environment: | |||
| MP_SMTP_AUTH_ACCEPT_ANY: 1 | |||
| MP_SMTP_AUTH_ALLOW_INSECURE: 1 | |||
| ###< symfony/mailer ### | |||
| @@ -0,0 +1,26 @@ | |||
| version: '3' | |||
| services: | |||
| ###> doctrine/doctrine-bundle ### | |||
| database: | |||
| image: postgres:${POSTGRES_VERSION:-16}-alpine | |||
| environment: | |||
| POSTGRES_DB: ${POSTGRES_DB:-app} | |||
| # You should definitely change the password in production | |||
| POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-!ChangeMe!} | |||
| POSTGRES_USER: ${POSTGRES_USER:-app} | |||
| healthcheck: | |||
| test: ["CMD", "pg_isready -U ${POSTGRES_USER:-app}"] | |||
| timeout: 5s | |||
| retries: 5 | |||
| start_period: 60s | |||
| volumes: | |||
| - database_data:/var/lib/postgresql/data:rw | |||
| # You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data! | |||
| # - ./docker/db/data:/var/lib/postgresql/data:rw | |||
| ###< doctrine/doctrine-bundle ### | |||
| volumes: | |||
| ###> doctrine/doctrine-bundle ### | |||
| database_data: | |||
| ###< doctrine/doctrine-bundle ### | |||
| @@ -0,0 +1,108 @@ | |||
| { | |||
| "type": "project", | |||
| "license": "proprietary", | |||
| "minimum-stability": "stable", | |||
| "prefer-stable": true, | |||
| "require": { | |||
| "php": ">=8.2", | |||
| "ext-ctype": "*", | |||
| "ext-iconv": "*", | |||
| "doctrine/dbal": "^3", | |||
| "doctrine/doctrine-bundle": "^2.12", | |||
| "doctrine/doctrine-migrations-bundle": "^3.3", | |||
| "doctrine/orm": "^3.1", | |||
| "phpdocumentor/reflection-docblock": "^5.4", | |||
| "phpstan/phpdoc-parser": "^1.29", | |||
| "symfony/asset": "7.0.*", | |||
| "symfony/asset-mapper": "7.0.*", | |||
| "symfony/console": "7.0.*", | |||
| "symfony/doctrine-messenger": "7.0.*", | |||
| "symfony/dotenv": "7.0.*", | |||
| "symfony/expression-language": "7.0.*", | |||
| "symfony/flex": "^2", | |||
| "symfony/form": "7.0.*", | |||
| "symfony/framework-bundle": "7.0.*", | |||
| "symfony/http-client": "7.0.*", | |||
| "symfony/intl": "7.0.*", | |||
| "symfony/mailer": "7.0.*", | |||
| "symfony/mime": "7.0.*", | |||
| "symfony/monolog-bundle": "^3.0", | |||
| "symfony/notifier": "7.0.*", | |||
| "symfony/process": "7.0.*", | |||
| "symfony/property-access": "7.0.*", | |||
| "symfony/property-info": "7.0.*", | |||
| "symfony/runtime": "7.0.*", | |||
| "symfony/security-bundle": "7.0.*", | |||
| "symfony/serializer": "7.0.*", | |||
| "symfony/stimulus-bundle": "^2.17", | |||
| "symfony/string": "7.0.*", | |||
| "symfony/translation": "7.0.*", | |||
| "symfony/twig-bundle": "7.0.*", | |||
| "symfony/ux-turbo": "^2.17", | |||
| "symfony/validator": "7.0.*", | |||
| "symfony/web-link": "7.0.*", | |||
| "symfony/yaml": "7.0.*", | |||
| "twig/extra-bundle": "^2.12|^3.0", | |||
| "twig/twig": "^2.12|^3.0" | |||
| }, | |||
| "config": { | |||
| "allow-plugins": { | |||
| "php-http/discovery": true, | |||
| "symfony/flex": true, | |||
| "symfony/runtime": true | |||
| }, | |||
| "sort-packages": true | |||
| }, | |||
| "autoload": { | |||
| "psr-4": { | |||
| "App\\": "src/" | |||
| } | |||
| }, | |||
| "autoload-dev": { | |||
| "psr-4": { | |||
| "App\\Tests\\": "tests/" | |||
| } | |||
| }, | |||
| "replace": { | |||
| "symfony/polyfill-ctype": "*", | |||
| "symfony/polyfill-iconv": "*", | |||
| "symfony/polyfill-php72": "*", | |||
| "symfony/polyfill-php73": "*", | |||
| "symfony/polyfill-php74": "*", | |||
| "symfony/polyfill-php80": "*", | |||
| "symfony/polyfill-php81": "*", | |||
| "symfony/polyfill-php82": "*" | |||
| }, | |||
| "scripts": { | |||
| "auto-scripts": { | |||
| "cache:clear": "symfony-cmd", | |||
| "assets:install %PUBLIC_DIR%": "symfony-cmd", | |||
| "importmap:install": "symfony-cmd" | |||
| }, | |||
| "post-install-cmd": [ | |||
| "@auto-scripts" | |||
| ], | |||
| "post-update-cmd": [ | |||
| "@auto-scripts" | |||
| ] | |||
| }, | |||
| "conflict": { | |||
| "symfony/symfony": "*" | |||
| }, | |||
| "extra": { | |||
| "symfony": { | |||
| "allow-contrib": false, | |||
| "require": "7.0.*" | |||
| } | |||
| }, | |||
| "require-dev": { | |||
| "phpunit/phpunit": "^9.5", | |||
| "symfony/browser-kit": "7.0.*", | |||
| "symfony/css-selector": "7.0.*", | |||
| "symfony/debug-bundle": "7.0.*", | |||
| "symfony/maker-bundle": "^1.0", | |||
| "symfony/phpunit-bridge": "^7.0", | |||
| "symfony/stopwatch": "7.0.*", | |||
| "symfony/web-profiler-bundle": "7.0.*" | |||
| } | |||
| } | |||
| @@ -0,0 +1,16 @@ | |||
| <?php | |||
| return [ | |||
| Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], | |||
| Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], | |||
| Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], | |||
| Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true], | |||
| Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], | |||
| Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], | |||
| Symfony\UX\StimulusBundle\StimulusBundle::class => ['all' => true], | |||
| Symfony\UX\Turbo\TurboBundle::class => ['all' => true], | |||
| Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], | |||
| Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], | |||
| Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], | |||
| Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], | |||
| ]; | |||
| @@ -0,0 +1,5 @@ | |||
| framework: | |||
| asset_mapper: | |||
| # The paths to make available to the asset mapper. | |||
| paths: | |||
| - assets/ | |||
| @@ -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 | |||
| @@ -0,0 +1,5 @@ | |||
| when@dev: | |||
| 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)%" | |||
| @@ -0,0 +1,52 @@ | |||
| doctrine: | |||
| dbal: | |||
| url: '%env(resolve:DATABASE_URL)%' | |||
| # IMPORTANT: You MUST configure your server version, | |||
| # either here or in the DATABASE_URL env var (see .env file) | |||
| #server_version: '16' | |||
| profiling_collect_backtrace: '%kernel.debug%' | |||
| use_savepoints: true | |||
| orm: | |||
| auto_generate_proxy_classes: true | |||
| enable_lazy_ghost_objects: true | |||
| report_fields_where_declared: true | |||
| validate_xml_mapping: true | |||
| naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware | |||
| auto_mapping: true | |||
| mappings: | |||
| App: | |||
| type: attribute | |||
| is_bundle: false | |||
| dir: '%kernel.project_dir%/src/Entity' | |||
| prefix: 'App\Entity' | |||
| alias: App | |||
| controller_resolver: | |||
| auto_mapping: true | |||
| when@test: | |||
| doctrine: | |||
| dbal: | |||
| # "TEST_TOKEN" is typically set by ParaTest | |||
| dbname_suffix: '_test%env(default::TEST_TOKEN)%' | |||
| when@prod: | |||
| doctrine: | |||
| orm: | |||
| auto_generate_proxy_classes: false | |||
| proxy_dir: '%kernel.build_dir%/doctrine/orm/Proxies' | |||
| 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 | |||
| @@ -0,0 +1,6 @@ | |||
| doctrine_migrations: | |||
| migrations_paths: | |||
| # namespace is arbitrary but should be different from App\Migrations | |||
| # as migrations classes should NOT be autoloaded | |||
| 'DoctrineMigrations': '%kernel.project_dir%/migrations' | |||
| enable_profiler: false | |||
| @@ -0,0 +1,16 @@ | |||
| # see https://symfony.com/doc/current/reference/configuration/framework.html | |||
| framework: | |||
| secret: '%env(APP_SECRET)%' | |||
| #csrf_protection: true | |||
| # Note that the session will be started ONLY if you read or write from it. | |||
| session: true | |||
| #esi: true | |||
| #fragments: true | |||
| when@test: | |||
| framework: | |||
| test: true | |||
| session: | |||
| storage_factory_id: session.storage.factory.mock_file | |||
| @@ -0,0 +1,3 @@ | |||
| framework: | |||
| mailer: | |||
| dsn: '%env(MAILER_DSN)%' | |||
| @@ -0,0 +1,29 @@ | |||
| framework: | |||
| messenger: | |||
| failure_transport: failed | |||
| transports: | |||
| # https://symfony.com/doc/current/messenger.html#transport-configuration | |||
| async: | |||
| dsn: '%env(MESSENGER_TRANSPORT_DSN)%' | |||
| options: | |||
| use_notify: true | |||
| check_delayed_interval: 60000 | |||
| retry_strategy: | |||
| max_retries: 3 | |||
| multiplier: 2 | |||
| failed: 'doctrine://default?queue_name=failed' | |||
| # sync: 'sync://' | |||
| default_bus: messenger.bus.default | |||
| buses: | |||
| messenger.bus.default: [] | |||
| routing: | |||
| Symfony\Component\Mailer\Messenger\SendEmailMessage: async | |||
| Symfony\Component\Notifier\Message\ChatMessage: async | |||
| Symfony\Component\Notifier\Message\SmsMessage: async | |||
| # Route your messages to the transports | |||
| # 'App\Message\YourMessage': async | |||
| @@ -0,0 +1,62 @@ | |||
| monolog: | |||
| channels: | |||
| - deprecation # Deprecations are logged in the dedicated "deprecation" channel when it exists | |||
| when@dev: | |||
| 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"] | |||
| when@test: | |||
| 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 | |||
| when@prod: | |||
| 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: php://stderr | |||
| level: debug | |||
| formatter: monolog.formatter.json | |||
| console: | |||
| type: console | |||
| process_psr_3_messages: false | |||
| channels: ["!event", "!doctrine"] | |||
| deprecation: | |||
| type: stream | |||
| channels: [deprecation] | |||
| path: php://stderr | |||
| formatter: monolog.formatter.json | |||
| @@ -0,0 +1,12 @@ | |||
| framework: | |||
| notifier: | |||
| chatter_transports: | |||
| texter_transports: | |||
| 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 } | |||
| @@ -0,0 +1,10 @@ | |||
| framework: | |||
| router: | |||
| # Configure how to generate URLs in non-HTTP contexts, such as CLI commands. | |||
| # See https://symfony.com/doc/current/routing.html#generating-urls-in-commands | |||
| #default_uri: http://localhost | |||
| when@prod: | |||
| framework: | |||
| router: | |||
| strict_requirements: null | |||
| @@ -0,0 +1,39 @@ | |||
| security: | |||
| # https://symfony.com/doc/current/security.html#registering-the-user-hashing-passwords | |||
| password_hashers: | |||
| Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto' | |||
| # https://symfony.com/doc/current/security.html#loading-the-user-the-user-provider | |||
| providers: | |||
| users_in_memory: { memory: null } | |||
| firewalls: | |||
| dev: | |||
| pattern: ^/(_(profiler|wdt)|css|images|js)/ | |||
| security: false | |||
| main: | |||
| lazy: true | |||
| provider: users_in_memory | |||
| # activate different ways to authenticate | |||
| # https://symfony.com/doc/current/security.html#the-firewall | |||
| # 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 } | |||
| when@test: | |||
| security: | |||
| password_hashers: | |||
| # By default, password hashers are resource intensive and take time. This is | |||
| # important to generate secure password hashes. In tests however, secure hashes | |||
| # are not important, waste resources and increase test times. The following | |||
| # reduces the work factor to the lowest possible values. | |||
| Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: | |||
| algorithm: auto | |||
| cost: 4 # Lowest possible value for bcrypt | |||
| time_cost: 3 # Lowest possible value for argon | |||
| memory_cost: 10 # Lowest possible value for argon | |||
| @@ -0,0 +1,7 @@ | |||
| framework: | |||
| default_locale: en | |||
| translator: | |||
| default_path: '%kernel.project_dir%/translations' | |||
| fallbacks: | |||
| - en | |||
| providers: | |||
| @@ -0,0 +1,6 @@ | |||
| twig: | |||
| file_name_pattern: '*.twig' | |||
| when@test: | |||
| twig: | |||
| strict_variables: true | |||
| @@ -0,0 +1,11 @@ | |||
| framework: | |||
| validation: | |||
| # Enables validator auto-mapping support. | |||
| # For instance, basic validation constraints will be inferred from Doctrine's metadata. | |||
| #auto_mapping: | |||
| # App\Entity\: [] | |||
| when@test: | |||
| framework: | |||
| validation: | |||
| not_compromised_password: false | |||
| @@ -0,0 +1,17 @@ | |||
| when@dev: | |||
| web_profiler: | |||
| toolbar: true | |||
| intercept_redirects: false | |||
| framework: | |||
| profiler: | |||
| only_exceptions: false | |||
| collect_serializer_data: true | |||
| when@test: | |||
| web_profiler: | |||
| toolbar: false | |||
| intercept_redirects: false | |||
| framework: | |||
| profiler: { collect: false } | |||
| @@ -0,0 +1,5 @@ | |||
| <?php | |||
| if (file_exists(dirname(__DIR__).'/var/cache/prod/App_KernelProdContainer.preload.php')) { | |||
| require dirname(__DIR__).'/var/cache/prod/App_KernelProdContainer.preload.php'; | |||
| } | |||
| @@ -0,0 +1,5 @@ | |||
| controllers: | |||
| resource: | |||
| path: ../src/Controller/ | |||
| namespace: App\Controller | |||
| type: attribute | |||
| @@ -0,0 +1,4 @@ | |||
| when@dev: | |||
| _errors: | |||
| resource: '@FrameworkBundle/Resources/config/routing/errors.xml' | |||
| prefix: /_error | |||
| @@ -0,0 +1,3 @@ | |||
| _security_logout: | |||
| resource: security.route_loader.logout | |||
| type: service | |||
| @@ -0,0 +1,8 @@ | |||
| when@dev: | |||
| web_profiler_wdt: | |||
| resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml' | |||
| prefix: /_wdt | |||
| web_profiler_profiler: | |||
| resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml' | |||
| prefix: /_profiler | |||
| @@ -0,0 +1,24 @@ | |||
| # 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.html#use-parameters-for-application-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/' | |||
| - '../src/Entity/' | |||
| - '../src/Kernel.php' | |||
| # add more service definitions when explicit configuration is needed | |||
| # please note that last definitions always *replace* previous ones | |||
| @@ -0,0 +1,28 @@ | |||
| <?php | |||
| /** | |||
| * Returns the importmap for this application. | |||
| * | |||
| * - "path" is a path inside the asset mapper system. Use the | |||
| * "debug:asset-map" command to see the full list of paths. | |||
| * | |||
| * - "entrypoint" (JavaScript only) set to true for any module that will | |||
| * be used as an "entrypoint" (and passed to the importmap() Twig function). | |||
| * | |||
| * The "importmap:require" command can be used to add new entries to this file. | |||
| */ | |||
| return [ | |||
| 'app' => [ | |||
| 'path' => './assets/app.js', | |||
| 'entrypoint' => true, | |||
| ], | |||
| '@hotwired/stimulus' => [ | |||
| 'version' => '3.2.2', | |||
| ], | |||
| '@symfony/stimulus-bundle' => [ | |||
| 'path' => './vendor/symfony/stimulus-bundle/assets/dist/loader.js', | |||
| ], | |||
| '@hotwired/turbo' => [ | |||
| 'version' => '7.3.0', | |||
| ], | |||
| ]; | |||
| @@ -0,0 +1,38 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!-- https://phpunit.readthedocs.io/en/latest/configuration.html --> | |||
| <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
| xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" | |||
| backupGlobals="false" | |||
| colors="true" | |||
| bootstrap="tests/bootstrap.php" | |||
| convertDeprecationsToExceptions="false" | |||
| > | |||
| <php> | |||
| <ini name="display_errors" value="1" /> | |||
| <ini name="error_reporting" value="-1" /> | |||
| <server name="APP_ENV" value="test" force="true" /> | |||
| <server name="SHELL_VERBOSITY" value="-1" /> | |||
| <server name="SYMFONY_PHPUNIT_REMOVE" value="" /> | |||
| <server name="SYMFONY_PHPUNIT_VERSION" value="9.5" /> | |||
| </php> | |||
| <testsuites> | |||
| <testsuite name="Project Test Suite"> | |||
| <directory>tests</directory> | |||
| </testsuite> | |||
| </testsuites> | |||
| <coverage processUncoveredFiles="true"> | |||
| <include> | |||
| <directory suffix=".php">src</directory> | |||
| </include> | |||
| </coverage> | |||
| <listeners> | |||
| <listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener" /> | |||
| </listeners> | |||
| <extensions> | |||
| </extensions> | |||
| </phpunit> | |||
| @@ -0,0 +1,9 @@ | |||
| <?php | |||
| use App\Kernel; | |||
| require_once dirname(__DIR__).'/vendor/autoload_runtime.php'; | |||
| return function (array $context) { | |||
| return new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']); | |||
| }; | |||
| @@ -0,0 +1,11 @@ | |||
| <?php | |||
| namespace App; | |||
| use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait; | |||
| use Symfony\Component\HttpKernel\Kernel as BaseKernel; | |||
| class Kernel extends BaseKernel | |||
| { | |||
| use MicroKernelTrait; | |||
| } | |||
| @@ -0,0 +1,282 @@ | |||
| { | |||
| "doctrine/doctrine-bundle": { | |||
| "version": "2.12", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "2.12", | |||
| "ref": "a952424ca4d5ab4dbc66c8be78236a5f13124112" | |||
| }, | |||
| "files": [ | |||
| "config/packages/doctrine.yaml", | |||
| "src/Entity/.gitignore", | |||
| "src/Repository/.gitignore" | |||
| ] | |||
| }, | |||
| "doctrine/doctrine-migrations-bundle": { | |||
| "version": "3.3", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "3.1", | |||
| "ref": "1d01ec03c6ecbd67c3375c5478c9a423ae5d6a33" | |||
| }, | |||
| "files": [ | |||
| "config/packages/doctrine_migrations.yaml", | |||
| "migrations/.gitignore" | |||
| ] | |||
| }, | |||
| "phpunit/phpunit": { | |||
| "version": "9.6", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "9.6", | |||
| "ref": "7364a21d87e658eb363c5020c072ecfdc12e2326" | |||
| }, | |||
| "files": [ | |||
| ".env.test", | |||
| "phpunit.xml.dist", | |||
| "tests/bootstrap.php" | |||
| ] | |||
| }, | |||
| "symfony/asset-mapper": { | |||
| "version": "7.0", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "6.4", | |||
| "ref": "6c28c471640cc2c6e60812ebcb961c526ef8997f" | |||
| }, | |||
| "files": [ | |||
| "assets/app.js", | |||
| "assets/styles/app.css", | |||
| "config/packages/asset_mapper.yaml", | |||
| "importmap.php" | |||
| ] | |||
| }, | |||
| "symfony/console": { | |||
| "version": "7.0", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "5.3", | |||
| "ref": "1781ff40d8a17d87cf53f8d4cf0c8346ed2bb461" | |||
| }, | |||
| "files": [ | |||
| "bin/console" | |||
| ] | |||
| }, | |||
| "symfony/debug-bundle": { | |||
| "version": "7.0", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "5.3", | |||
| "ref": "5aa8aa48234c8eb6dbdd7b3cd5d791485d2cec4b" | |||
| }, | |||
| "files": [ | |||
| "config/packages/debug.yaml" | |||
| ] | |||
| }, | |||
| "symfony/flex": { | |||
| "version": "2.4", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "1.0", | |||
| "ref": "146251ae39e06a95be0fe3d13c807bcf3938b172" | |||
| }, | |||
| "files": [ | |||
| ".env" | |||
| ] | |||
| }, | |||
| "symfony/framework-bundle": { | |||
| "version": "7.0", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "7.0", | |||
| "ref": "6356c19b9ae08e7763e4ba2d9ae63043efc75db5" | |||
| }, | |||
| "files": [ | |||
| "config/packages/cache.yaml", | |||
| "config/packages/framework.yaml", | |||
| "config/preload.php", | |||
| "config/routes/framework.yaml", | |||
| "config/services.yaml", | |||
| "public/index.php", | |||
| "src/Controller/.gitignore", | |||
| "src/Kernel.php" | |||
| ] | |||
| }, | |||
| "symfony/mailer": { | |||
| "version": "7.0", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "4.3", | |||
| "ref": "df66ee1f226c46f01e85c29c2f7acce0596ba35a" | |||
| }, | |||
| "files": [ | |||
| "config/packages/mailer.yaml" | |||
| ] | |||
| }, | |||
| "symfony/maker-bundle": { | |||
| "version": "1.59", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "1.0", | |||
| "ref": "fadbfe33303a76e25cb63401050439aa9b1a9c7f" | |||
| } | |||
| }, | |||
| "symfony/messenger": { | |||
| "version": "7.0", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "6.0", | |||
| "ref": "ba1ac4e919baba5644d31b57a3284d6ba12d52ee" | |||
| }, | |||
| "files": [ | |||
| "config/packages/messenger.yaml" | |||
| ] | |||
| }, | |||
| "symfony/monolog-bundle": { | |||
| "version": "3.10", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "3.7", | |||
| "ref": "aff23899c4440dd995907613c1dd709b6f59503f" | |||
| }, | |||
| "files": [ | |||
| "config/packages/monolog.yaml" | |||
| ] | |||
| }, | |||
| "symfony/notifier": { | |||
| "version": "7.0", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "5.0", | |||
| "ref": "178877daf79d2dbd62129dd03612cb1a2cb407cc" | |||
| }, | |||
| "files": [ | |||
| "config/packages/notifier.yaml" | |||
| ] | |||
| }, | |||
| "symfony/phpunit-bridge": { | |||
| "version": "7.0", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "6.3", | |||
| "ref": "a411a0480041243d97382cac7984f7dce7813c08" | |||
| }, | |||
| "files": [ | |||
| ".env.test", | |||
| "bin/phpunit", | |||
| "phpunit.xml.dist", | |||
| "tests/bootstrap.php" | |||
| ] | |||
| }, | |||
| "symfony/routing": { | |||
| "version": "7.0", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "7.0", | |||
| "ref": "21b72649d5622d8f7da329ffb5afb232a023619d" | |||
| }, | |||
| "files": [ | |||
| "config/packages/routing.yaml", | |||
| "config/routes.yaml" | |||
| ] | |||
| }, | |||
| "symfony/security-bundle": { | |||
| "version": "7.0", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "6.4", | |||
| "ref": "2ae08430db28c8eb4476605894296c82a642028f" | |||
| }, | |||
| "files": [ | |||
| "config/packages/security.yaml", | |||
| "config/routes/security.yaml" | |||
| ] | |||
| }, | |||
| "symfony/stimulus-bundle": { | |||
| "version": "2.17", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "2.13", | |||
| "ref": "6acd9ff4f7fd5626d2962109bd4ebab351d43c43" | |||
| }, | |||
| "files": [ | |||
| "assets/bootstrap.js", | |||
| "assets/controllers.json", | |||
| "assets/controllers/hello_controller.js" | |||
| ] | |||
| }, | |||
| "symfony/translation": { | |||
| "version": "7.0", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "6.3", | |||
| "ref": "e28e27f53663cc34f0be2837aba18e3a1bef8e7b" | |||
| }, | |||
| "files": [ | |||
| "config/packages/translation.yaml", | |||
| "translations/.gitignore" | |||
| ] | |||
| }, | |||
| "symfony/twig-bundle": { | |||
| "version": "7.0", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "6.4", | |||
| "ref": "cab5fd2a13a45c266d45a7d9337e28dee6272877" | |||
| }, | |||
| "files": [ | |||
| "config/packages/twig.yaml", | |||
| "templates/base.html.twig" | |||
| ] | |||
| }, | |||
| "symfony/ux-turbo": { | |||
| "version": "v2.17.0" | |||
| }, | |||
| "symfony/validator": { | |||
| "version": "7.0", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "7.0", | |||
| "ref": "8c1c4e28d26a124b0bb273f537ca8ce443472bfd" | |||
| }, | |||
| "files": [ | |||
| "config/packages/validator.yaml" | |||
| ] | |||
| }, | |||
| "symfony/web-profiler-bundle": { | |||
| "version": "7.0", | |||
| "recipe": { | |||
| "repo": "github.com/symfony/recipes", | |||
| "branch": "main", | |||
| "version": "6.1", | |||
| "ref": "e42b3f0177df239add25373083a564e5ead4e13a" | |||
| }, | |||
| "files": [ | |||
| "config/packages/web_profiler.yaml", | |||
| "config/routes/web_profiler.yaml" | |||
| ] | |||
| }, | |||
| "twig/extra-bundle": { | |||
| "version": "v3.9.3" | |||
| } | |||
| } | |||
| @@ -0,0 +1,17 @@ | |||
| <!DOCTYPE html> | |||
| <html> | |||
| <head> | |||
| <meta charset="UTF-8"> | |||
| <title>{% block title %}Welcome!{% endblock %}</title> | |||
| <link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 128 128%22><text y=%221.2em%22 font-size=%2296%22>⚫️</text><text y=%221.3em%22 x=%220.2em%22 font-size=%2276%22 fill=%22%23fff%22>sf</text></svg>"> | |||
| {% block stylesheets %} | |||
| {% endblock %} | |||
| {% block javascripts %} | |||
| {% block importmap %}{{ importmap('app') }}{% endblock %} | |||
| {% endblock %} | |||
| </head> | |||
| <body> | |||
| {% block body %}{% endblock %} | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,11 @@ | |||
| <?php | |||
| use Symfony\Component\Dotenv\Dotenv; | |||
| require dirname(__DIR__).'/vendor/autoload.php'; | |||
| if (file_exists(dirname(__DIR__).'/config/bootstrap.php')) { | |||
| require dirname(__DIR__).'/config/bootstrap.php'; | |||
| } elseif (method_exists(Dotenv::class, 'bootEnv')) { | |||
| (new Dotenv())->bootEnv(dirname(__DIR__).'/.env'); | |||
| } | |||