Update Flex endpoint

This commit is contained in:
github-action[bot]
2026-09-18 12:59:06 +00:00
parent e399a5a785
commit 0975d10f8a
12 changed files with 1346 additions and 7 deletions
+2 -2
View File
@@ -117,7 +117,7 @@ Additional recipes can be found on the [Contrib Recipes Repository](https://gith
| [symfony/flex](https://packagist.org/packages/symfony/flex) | [2.4](../../../tree/main/symfony/flex/2.4) | `flex` |
| [symfony/form](https://packagist.org/packages/symfony/form) | [7.2](../../../tree/main/symfony/form/7.2) | `form` |
| [symfony/forty-six-elks-notifier](https://packagist.org/packages/symfony/forty-six-elks-notifier) | [6.1](../../../tree/main/symfony/forty-six-elks-notifier/6.1) | `forty-six-elks-notifier`, `fortysixelksnotifier` |
| [symfony/framework-bundle](https://packagist.org/packages/symfony/framework-bundle) | [8.1](../../../tree/main/symfony/framework-bundle/8.1) | `framework-bundle`, `frameworkbundle` |
| [symfony/framework-bundle](https://packagist.org/packages/symfony/framework-bundle) | [8.2](../../../tree/main/symfony/framework-bundle/8.2) | `framework-bundle`, `frameworkbundle` |
| [symfony/free-mobile-notifier](https://packagist.org/packages/symfony/free-mobile-notifier) | [5.1](../../../tree/main/symfony/free-mobile-notifier/5.1) | `free-mobile-notifier`, `freemobilenotifier` |
| [symfony/gateway-api-notifier](https://packagist.org/packages/symfony/gateway-api-notifier) | [5.3](../../../tree/main/symfony/gateway-api-notifier/5.3) | `gateway-api-notifier` |
| [symfony/gatewayapi-notifier](https://packagist.org/packages/symfony/gatewayapi-notifier) | [5.3](../../../tree/main/symfony/gatewayapi-notifier/5.3) | `gatewayapi-notifier`, `gatewayapinotifier` |
@@ -248,7 +248,7 @@ Additional recipes can be found on the [Contrib Recipes Repository](https://gith
| [symfony/zendesk-notifier](https://packagist.org/packages/symfony/zendesk-notifier) | [6.2](../../../tree/main/symfony/zendesk-notifier/6.2) | `zendesk-notifier`, `zendesknotifier` |
| [symfony/zulip-notifier](https://packagist.org/packages/symfony/zulip-notifier) | [5.2](../../../tree/main/symfony/zulip-notifier/5.2) | `zulip-notifier`, `zulipnotifier` |
| [symfonycasts/reset-password-bundle](https://packagist.org/packages/symfonycasts/reset-password-bundle) | [1.0](../../../tree/main/symfonycasts/reset-password-bundle/1.0) | |
| [symfonycasts/sass-bundle](https://packagist.org/packages/symfonycasts/sass-bundle) | [0.5](../../../tree/main/symfonycasts/sass-bundle/0.5) | `symfonycasts_sass` |
| [symfonycasts/sass-bundle](https://packagist.org/packages/symfonycasts/sass-bundle) | [0.6](../../../tree/main/symfonycasts/sass-bundle/0.6) | `symfonycasts_sass` |
| [symfonycasts/tailwind-bundle](https://packagist.org/packages/symfonycasts/tailwind-bundle) | [0.14](../../../tree/main/symfonycasts/tailwind-bundle/0.14) | `tailwind`, `tailwindcss` |
| [theofidry/alice-data-fixtures](https://packagist.org/packages/theofidry/alice-data-fixtures) | [1.0](../../../tree/main/theofidry/alice-data-fixtures/1.0) | |
| [twig/cssinliner-extension](https://packagist.org/packages/twig/cssinliner-extension) | [1.0](../../../tree/main/twig/cssinliner-extension/1.0) | |
@@ -0,0 +1,362 @@
{
"manifests": {
"symfony/framework-bundle": {
"manifest": {
"bundles": {
"Symfony\\Bundle\\FrameworkBundle\\FrameworkBundle": [
"all"
]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/",
"public/": "%PUBLIC_DIR%/",
"src/": "%SRC_DIR%/",
".editorconfig": ".editorconfig",
".symfony.local.yaml": ".symfony.local.yaml",
"AGENTS.md": "AGENTS.md",
"CLAUDE.md": "CLAUDE.md"
},
"composer-scripts": {
"cache:clear": "symfony-cmd",
"assets:install %PUBLIC_DIR%": "symfony-cmd"
},
"env": {
"APP_ENV": "dev",
"APP_SECRET": "",
"APP_SHARE_DIR": "%VAR_DIR%/share"
},
"dotenv": {
"dev": {
"APP_SECRET": "%generate(secret)%"
}
},
"gitignore": [
"/.env.local",
"/.env.local.php",
"/.env.*.local",
"/%CONFIG_DIR%/secrets/prod/prod.decrypt.private.php",
"/%PUBLIC_DIR%/bundles/",
"/%VAR_DIR%/",
"/vendor/"
],
"post-install-output": [
" * <fg=blue>Run</> your application:",
" 1. Go to the project directory",
" 2. Create your code repository with the <comment>git init</comment> command",
" 3. Download the Symfony CLI at <comment>https://symfony.com/download</> to install a development web server",
"",
" * <fg=blue>Read</> the documentation at <comment>https://symfony.com/doc</>"
]
},
"files": {
".editorconfig": {
"contents": [
"# editorconfig.org",
"",
"root = true",
"",
"[*]",
"charset = utf-8",
"end_of_line = lf",
"indent_size = 4",
"indent_style = space",
"insert_final_newline = true",
"trim_trailing_whitespace = true",
"",
"[{compose.yaml,compose.*.yaml}]",
"indent_size = 2",
"",
"[*.md]",
"trim_trailing_whitespace = false",
""
],
"executable": false
},
".symfony.local.yaml": {
"contents": [
"# This configuration file is used by the Symfony CLI tool.",
"# See https://symfony.com/doc/current/setup/symfony_cli.html for more information.",
"",
"http:",
" use_gzip: true",
"",
"# Processes that automatically run with the server (https://symfony.com/doc/current/setup/symfony_cli.html#configuring-workers)",
"workers:",
" # Consume async messages, and restart the worker when the code changes",
" #messenger_consume_async:",
" # cmd: ['symfony', 'console', 'messenger:consume', 'async']",
" # watch: ['config', 'src', 'templates', 'vendor/composer/installed.json']",
""
],
"executable": false
},
"AGENTS.md": {
"contents": [
"# AGENTS.md",
"",
"This is a Symfony project. Check `composer.json` for the exact Symfony/PHP version",
"in use, and read `symfony.lock` to see which recipes ran. Don't assume Doctrine,",
"Twig, API Platform, Messenger, or Lock are installed unless one of those says so.",
"",
"## Ask before generating",
"",
"If the task doesn't specify, ask rather than guess:",
"",
"- Persistence: Doctrine ORM, Doctrine ODM, or none?",
"- Interface: server-rendered (Twig), API (Serializer, maybe API Platform), or both?",
"- Auth: SecurityBundle, and which authenticator?",
"",
"If you can't ask (no interactive channel), state the assumption you're making and",
"pick the smallest option (e.g. no persistence layer) rather than scaffolding a",
"full stack nobody asked for.",
"",
"## Adding features: Flex, not hand-wiring",
"",
"Install new capabilities with `composer require <package>` (e.g. `symfony/lock`,",
"`symfony/messenger`, `orm-pack`) and let the Flex recipe register the bundle and",
"generate its config. Don't hand-edit `config/bundles.php` or hand-write a bundle's",
"base config; that's what the recipe is for. Don't skip a good-fit component just",
"because it isn't installed yet; installing it is one command.",
"",
"## Conventions",
"",
"Follow https://symfony.com/doc/current/best_practices.html to write idiomatic",
"Symfony:",
"",
"- Use PHP attributes for framework metadata, and not only on controllers:",
" `#[Route]`, `#[MapRequestPayload]`, `#[IsGranted]` on actions, `#[Assert\\...]`",
" on properties, `#[AsCommand]`, `#[AsEventListener]`, `#[AsMessageHandler]`, and",
" `#[AsAlias]` / `#[AsTaggedItem]` / `#[Autoconfigure]` on services. No YAML or",
" XML routing.",
"- Rely on autowiring and autoconfiguration. Type-hint constructor arguments and",
" let the container resolve them. Where a type-hint can't express it, stay in the",
" class with `#[Autowire]` (parameters, env vars, expressions) or `#[Target]` (one",
" of several implementations of an interface). A YAML service definition is the",
" last resort, not the first.",
"- Controllers extend `AbstractController`, stay thin, and delegate to services.",
"- Use the framework for what it already does: Form for server-rendered forms,",
" Validator for validation, Serializer for JSON, Messenger for async work,",
" Security (voters, authenticators) for access control, Twig `path()`/`url()`",
" instead of hardcoded URLs.",
"- Before hand-writing infrastructure (locks, queues, caches, HTTP clients,",
" mailers, schedulers) or reaching for a third-party library, check whether a",
" Symfony component covers it. It usually does.",
"",
"Three specifics worth spelling out, because they are easy to get wrong:",
"",
"- Bind request data with `#[MapRequestPayload]` / `#[MapQueryString]` on action",
" arguments, which wires up Serializer and Validator for you, instead of calling",
" `json_decode()` or `SerializerInterface` by hand. If neither package is",
" installed yet, `composer require` them rather than falling back to manual",
" parsing.",
"- Use constructor property promotion, and `readonly` for DTOs and value objects.",
" Don't mark a service `readonly` if it might become `lazy: true`: a lazy proxy",
" can't extend a `readonly` class.",
"- Use `symfony/lock` (`LockFactory`) for mutual exclusion. A hand-built flag or",
" lock file looks fine in review and is usually wrong under concurrency.",
"",
"## Everyday workflow",
"",
"- Run the app with `symfony serve -d`, and commands with `symfony console ...`",
" (or `bin/console` when the Symfony CLI isn't available).",
"- When something fails, read `var/log/dev.log` and the web profiler",
" (`/_profiler`) before changing code.",
"- If `maker-bundle` is installed, prefer `bin/console make:*` with every argument",
" passed up front and `--no-interaction` where supported: makers prompt on a",
" terminal by default, which hangs a non-interactive shell. If a maker still",
" needs interactive input, hand-write the code instead.",
"- If Doctrine ORM is installed, schema changes go through migrations",
" (`bin/console make:migration`, then `doctrine:migrations:migrate`), never",
" `doctrine:schema:update` or hand-written SQL.",
"- `.env` is committed and holds defaults only. Real secrets belong in `.env.local`",
" (git-ignored) or the secrets vault (`bin/console secrets:set`), read via",
" `%env(...)%`.",
"",
"## Testing",
"",
"Install `symfony/test-pack` if it isn't already. Functional/HTTP tests extend",
"`WebTestCase`; service-level tests extend `KernelTestCase`. Run",
"`php bin/phpunit` (falls back to `vendor/bin/phpunit`). A feature isn't done",
"until it has a test that exercises it the way a caller would, an HTTP request for",
"a controller or a service call for a service, not just \"it didn't throw.\"",
"",
"## Code style",
"",
"Symfony's coding standard, the `@Symfony` php-cs-fixer ruleset (a PSR-12-derived",
"superset). Run `vendor/bin/php-cs-fixer fix` if `friendsofphp/php-cs-fixer` is",
"installed; it isn't part of the skeleton by default.",
"",
"## Discover, don't guess",
"",
"Framework APIs change between versions and your training data may be stale. Look",
"things up in the project instead of relying on memory:",
"",
"- `bin/console about`: versions, environment, paths.",
"- `bin/console debug:router`, `debug:container`, `debug:autowiring <name>`,",
" `debug:config <bundle>`, `config:dump-reference <bundle>`: what exists and how",
" it is configured.",
"- `bin/console lint:container`, plus `lint:twig templates/` and",
" `lint:yaml config/` where those packages are installed: validate before running.",
"- Read the installed source and docblocks under `vendor/`.",
"- Docs: https://symfony.com/doc/current/ (switch to the version matching",
" `composer.json` if it differs).",
""
],
"executable": false
},
"CLAUDE.md": {
"contents": [
"# CLAUDE.md",
"",
"@AGENTS.md",
""
],
"executable": false
},
"config/packages/cache.yaml": {
"contents": [
"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",
""
],
"executable": false
},
"config/packages/framework.yaml": {
"contents": [
"# see https://symfony.com/doc/current/reference/configuration/framework.html",
"framework:",
" secret: '%env(APP_SECRET)%'",
"",
" # 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",
""
],
"executable": false
},
"config/preload.php": {
"contents": [
"<?php",
"",
"foreach (glob(dirname(__DIR__).'/var/cache/prod/*.preload.php') ?: [] as $file) {",
" require $file;",
"}",
""
],
"executable": false
},
"config/routes/framework.yaml": {
"contents": [
"when@dev:",
" _errors:",
" resource: '@FrameworkBundle/Resources/config/routing/errors.php'",
" prefix: /_error",
""
],
"executable": false
},
"config/services.yaml": {
"contents": [
"# yaml-language-server: $schema=../vendor/symfony/dependency-injection/Loader/schema/services.schema.json",
"",
"# This file is the entry point to configure your own services.",
"# Files in the packages/ subdirectory configure your dependencies.",
"# See also https://symfony.com/doc/current/service_container/import.html",
"",
"# 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/'",
"",
" # add more service definitions when explicit configuration is needed",
" # please note that last definitions always *replace* previous ones",
""
],
"executable": false
},
"public/index.php": {
"contents": [
"<?php",
"",
"use App\\Kernel;",
"",
"require_once dirname(__DIR__).'/vendor/autoload_runtime.php';",
"",
"return static function (array $context) {",
" return new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']);",
"};",
""
],
"executable": false
},
"src/Controller/.gitignore": {
"contents": [
""
],
"executable": false
},
"src/Kernel.php": {
"contents": [
"<?php",
"",
"namespace App;",
"",
"use Symfony\\Bundle\\FrameworkBundle\\Kernel\\MicroKernelTrait;",
"use Symfony\\Component\\HttpKernel\\Kernel as BaseKernel;",
"",
"class Kernel extends BaseKernel",
"{",
" use MicroKernelTrait;",
"",
" /**",
" * @return list<string> An array of allowed values for APP_ENV",
" */",
" private function getAllowedEnvs(): array",
" {",
" return ['prod', 'dev', 'test'];",
" }",
"}",
""
],
"executable": false
}
},
"ref": "b5fb7271219d786f2145f292c53ed7866284776c"
}
}
}
@@ -0,0 +1,189 @@
{
"manifests": {
"symfony/reprise": {
"manifest": {
"bundles": {
"Symfony\\Reprise\\RepriseBundle": [
"all"
]
},
"copy-from-recipe": {
"assets/": "assets/",
"config/": "%CONFIG_DIR%/"
},
"conflict": {
"symfony/flex": "<1.20.0 || >=2.0.0,<2.3.0",
"symfony/framework-bundle": "<6.4"
},
"gitignore": [
"/node_modules/",
"/%PUBLIC_DIR%/build/"
],
"add-lines": [
{
"file": "templates/base.html.twig",
"content": " {{ reprise_entry_link_tags('app') }}",
"position": "after_target",
"target": "{% block stylesheets %}",
"warn_if_missing": true
},
{
"file": "templates/base.html.twig",
"content": " {{ reprise_entry_script_tags('app') }}",
"position": "after_target",
"target": "{% block javascripts %}",
"warn_if_missing": true
},
{
"file": ".symfony.local.yaml",
"content": " # Start the Vite dev server\n vite:\n cmd: ['npx', 'vite']\n # Or instead, if you use Rsbuild (https://rsbuild.rs/)\n #rsbuild:\n # cmd: ['npx', 'rsbuild', 'dev']",
"position": "after_target",
"target": "workers:",
"warn_if_missing": true
}
],
"post-install-output": [
"",
" <bg=blue;fg=white> </>",
" <bg=blue;fg=white> Symfony Reprise </>",
" <bg=blue;fg=white> </>",
"",
" A few frontend steps remain to wire up your bundler.",
" The commands below use npm (or pnpm, yarn, ...).",
"",
" * If you don't have a bundler yet, install <fg=green>Vite</> or <fg=green>Rsbuild</>:",
"",
" <fg=green>npm install --save-dev vite</>",
" <comment># or</>",
" <fg=green>npm install --save-dev @rsbuild/core</>",
"",
" * Install the Reprise plugin:",
"",
" <fg=green>npm install --save-dev @symfony/reprise</>",
"",
" * Register the plugin in your bundler config:",
"",
" <comment>// vite.config.js</>",
" import { defineConfig } from 'vite'",
" import Symfony from '@symfony/reprise/vite'",
"",
" export default defineConfig({",
" // If using Vite 8.2+",
" input: {",
" app: './assets/app.js',",
" },",
" // Otherwise, use `build.rollupOptions`",
" // build: {",
" // rollupOptions: {",
" // input: {",
" // app: './assets/app.js',",
" // },",
" // },",
" // },",
" plugins: [",
" Symfony({",
" // Enable support for Stimulus Controller and Symfony UX",
" // stimulus: './assets/controllers.json',",
" }),",
" ],",
" })",
"",
" <comment>// rsbuild.config.js</>",
" import { defineConfig } from '@rsbuild/core'",
" import Symfony from '@symfony/reprise/rsbuild'",
"",
" export default defineConfig({",
" source: {",
" entry: {",
" app: './assets/app.js',",
" },",
" },",
" plugins: [",
" Symfony({",
" // Enable support for Stimulus Controller and Symfony UX",
" // stimulus: './assets/controllers.json',",
" }),",
" ],",
" })",
"",
" * Render your assets from Twig with <fg=green>reprise_entry_link_tags('app')</> and",
" <fg=green>reprise_entry_script_tags('app')</> (already added to <fg=green>templates/base.html.twig</> for you).",
"",
" * Build your assets:",
"",
" <fg=green>npx vite build</> <comment># or: npx rsbuild build</>",
" <fg=green>npx vite</> <comment># dev server (or: npx rsbuild dev)</>",
"",
" * Read the documentation: <comment>https://github.com/symfony/reprise</>"
]
},
"files": {
"assets/app.js": {
"contents": [
"/*",
" * Welcome to your app's main JavaScript file!",
" *",
" * This file will be included onto the page via the reprise_entry_script_tags('app') 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 Symfony Reprise! \ud83c\udf89');",
""
],
"executable": false
},
"assets/styles/app.css": {
"contents": [
"body {",
" background-color: skyblue;",
"}",
""
],
"executable": false
},
"config/packages/reprise.yaml": {
"contents": [
"# Reprise works with zero configuration. Every option below is shown at its",
"# default value; uncomment the block and tweak what you need.",
"# See https://github.com/symfony/reprise/blob/main/doc/index.rst#configuration",
"# reprise:",
" # Directory the @symfony/reprise plugin writes entrypoints.json and manifest.json into.",
" # output_path: '%kernel.project_dir%/public/build'",
"",
" # Throw when entrypoints.json or a requested entry is missing, instead of rendering nothing.",
" # strict_mode: true",
"",
" # A framework.assets package name used to resolve entry URLs. null uses the default package.",
" # asset_package: null",
"",
" # crossorigin attribute set alongside SRI integrity: false, 'anonymous' or 'use-credentials'.",
" # crossorigin: false",
"",
" # Register rendered assets as WebLink HTTP/2 Link: preload headers (needs symfony/web-link).",
" # preload: true",
"",
" # Default attributes added to every rendered <script> / <link> tag.",
" # script_attributes: []",
" # link_attributes: []",
"",
"framework:",
" assets:",
" json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'",
"",
"when@prod:",
" reprise:",
" # In prod we'd rather render nothing than let a missing entrypoints.json (or entry) take the app down with a 500.",
" strict_mode: false",
"",
" # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes)",
" cache: true",
""
],
"executable": false
}
},
"ref": "a452d21b563cd68e93020876bc542225eb9f9e20"
}
}
}
@@ -0,0 +1,248 @@
{
"manifests": {
"symfony/webpack-encore-bundle": {
"manifest": {
"bundles": {
"Symfony\\WebpackEncoreBundle\\WebpackEncoreBundle": [
"all"
]
},
"copy-from-recipe": {
"assets/": "assets/",
"config/": "%CONFIG_DIR%/",
"package.json": "package.json",
"webpack.config.js": "webpack.config.js"
},
"gitignore": [
"/node_modules/",
"/%PUBLIC_DIR%/build/",
"npm-debug.log",
"yarn-error.log"
],
"conflict": {
"symfony/framework-bundle": "<5.4",
"symfony/flex": "<1.20.0 || >=2.0.0,<2.3.0"
},
"add-lines": [
{
"file": "templates/base.html.twig",
"content": " {{ encore_entry_script_tags('app') }}",
"position": "after_target",
"target": "{% block javascripts %}",
"warn_if_missing": true
},
{
"file": "templates/base.html.twig",
"content": " {{ encore_entry_link_tags('app') }}",
"position": "after_target",
"target": "{% block stylesheets %}",
"warn_if_missing": true
},
{
"file": ".symfony.local.yaml",
"content": " # Watch and build front assets using Webpack Encore\n npm_encore_watch:\n cmd: ['npm', 'run', 'watch']\n # Or instead, run the Webpack Dev Server (https://symfony.com/doc/current/frontend/encore/dev-server.html)\n #npm_encore_dev_server:\n # cmd: ['npm', 'run', 'dev-server']",
"position": "after_target",
"target": "workers:",
"warn_if_missing": true
}
],
"post-install-output": [
" * Install NPM and run <fg=green>npm install</>",
"",
" * Compile your assets for development: <fg=green>npm run dev</>",
" ",
" * Compile your assets for development and watch for any modifications: <fg=green>npm run watch</>",
" ",
" * Or start the development server: <fg=green>npm run dev-server</>",
" ",
" * Compile your assets for production: <fg=green>npm run build</>"
]
},
"files": {
"assets/app.js": {
"contents": [
"/*",
" * Welcome to your app's main JavaScript file!",
" *",
" * We recommend including the built version of this JavaScript file",
" * (and its CSS file) in your base layout (base.html.twig).",
" */",
"",
"// any CSS you import will output into a single css file (app.css in this case)",
"import './styles/app.css';",
""
],
"executable": false
},
"assets/styles/app.css": {
"contents": [
"body {",
" background-color: lightgray;",
"}",
""
],
"executable": false
},
"config/packages/webpack_encore.yaml": {
"contents": [
"webpack_encore:",
" # The path where Encore is building the assets - i.e. Encore.setOutputPath()",
" output_path: '%kernel.project_dir%/public/build'",
" # If multiple builds are defined (as shown below), you can disable the default build:",
" # output_path: false",
"",
" # Set attributes that will be rendered on all script and link tags",
" script_attributes:",
" defer: true",
" # Uncomment (also under link_attributes) if using Turbo Drive",
" # https://turbo.hotwired.dev/handbook/drive#reloading-when-assets-change",
" # 'data-turbo-track': reload",
" # link_attributes:",
" # Uncomment if using Turbo Drive",
" # 'data-turbo-track': reload",
"",
" # If using Encore.enableIntegrityHashes() and need the crossorigin attribute (default: false, or use 'anonymous' or 'use-credentials')",
" # crossorigin: 'anonymous'",
"",
" # Preload all rendered script and link tags automatically via the HTTP/2 Link header",
" # preload: true",
"",
" # Throw an exception if the entrypoints.json file is missing or an entry is missing from the data",
" # strict_mode: false",
"",
" # If you have multiple builds:",
" # builds:",
" # frontend: '%kernel.project_dir%/public/frontend/build'",
"",
" # pass the build name as the 3rd argument to the Twig functions",
" # {{ encore_entry_script_tags('entry1', null, 'frontend') }}",
"",
"framework:",
" assets:",
" json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'",
"",
"#when@prod:",
"# webpack_encore:",
"# # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes)",
"# # Available in version 1.2",
"# cache: true",
"",
"#when@test:",
"# webpack_encore:",
"# strict_mode: false",
""
],
"executable": false
},
"package.json": {
"contents": [
"{",
" \"devDependencies\": {",
" \"@babel/core\": \"^7.17.0\",",
" \"@babel/preset-env\": \"^7.16.0\",",
" \"@symfony/webpack-encore\": \"^6.0.0\",",
" \"core-js\": \"^3.38.0\",",
" \"regenerator-runtime\": \"^0.13.9\",",
" \"webpack\": \"^5.72\",",
" \"webpack-cli\": \"^6.0.0\"",
" },",
" \"license\": \"UNLICENSED\",",
" \"private\": true,",
" \"scripts\": {",
" \"dev-server\": \"encore dev-server\",",
" \"dev\": \"encore dev\",",
" \"watch\": \"encore dev --watch\",",
" \"build\": \"encore production --progress\"",
" }",
"}",
""
],
"executable": false
},
"webpack.config.js": {
"contents": [
"const Encore = require('@symfony/webpack-encore');",
"",
"// Manually configure the runtime environment if not already configured yet by the \"encore\" command.",
"// It's useful when you use tools that rely on webpack.config.js file.",
"if (!Encore.isRuntimeEnvironmentConfigured()) {",
" Encore.configureRuntimeEnvironment(process.env.NODE_ENV || 'dev');",
"}",
"",
"Encore",
" // directory where compiled assets will be stored",
" .setOutputPath('public/build/')",
" // public path used by the web server to access the output path",
" .setPublicPath('/build')",
" // only needed for CDN's or subdirectory deploy",
" //.setManifestKeyPrefix('build/')",
"",
" /*",
" * ENTRY CONFIG",
" *",
" * Each entry will result in one JavaScript file (e.g. app.js)",
" * and one CSS file (e.g. app.css) if your JavaScript imports CSS.",
" */",
" .addEntry('app', './assets/app.js')",
"",
" // When enabled, Webpack \"splits\" your files into smaller pieces for greater optimization.",
" .splitEntryChunks()",
"",
" // will require an extra script tag for runtime.js",
" // but, you probably want this, unless you're building a single-page app",
" .enableSingleRuntimeChunk()",
"",
" /*",
" * FEATURE CONFIG",
" *",
" * Enable & configure other features below. For a full",
" * list of features, see:",
" * https://symfony.com/doc/current/frontend.html#adding-more-features",
" */",
" .cleanupOutputBeforeBuild()",
"",
" // Displays build status system notifications to the user",
" // .enableBuildNotifications()",
"",
" .enableSourceMaps(!Encore.isProduction())",
" // enables hashed filenames (e.g. app.abc123.css)",
" .enableVersioning(Encore.isProduction())",
"",
" // configure Babel",
" // .configureBabel((config) => {",
" // config.plugins.push('@babel/a-babel-plugin');",
" // })",
"",
" // enables and configure @babel/preset-env polyfills",
" .configureBabelPresetEnv((config) => {",
" config.useBuiltIns = 'usage';",
" config.corejs = '3.38';",
" })",
"",
" // enables Sass/SCSS support",
" //.enableSassLoader()",
"",
" // uncomment if you use TypeScript",
" //.enableTypeScriptLoader()",
"",
" // uncomment if you use React",
" //.enableReactPreset()",
"",
" // uncomment to get integrity=\"...\" attributes on your script & link tags",
" // requires WebpackEncoreBundle 1.4 or higher",
" //.enableIntegrityHashes(Encore.isProduction())",
"",
" // uncomment if you're having problems with a jQuery plugin",
" //.autoProvidejQuery()",
";",
"",
"module.exports = Encore.getWebpackConfig();",
""
],
"executable": false
}
},
"ref": "fad2c3f0b2677d51b6f96d594b9b71d241f4d196"
}
}
}
@@ -0,0 +1,59 @@
{
"manifests": {
"symfonycasts/sass-bundle": {
"manifest": {
"bundles": {
"Symfonycasts\\SassBundle\\SymfonycastsSassBundle": [
"all"
]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/",
"assets/": "assets/"
},
"gitignore": [
"/%PUBLIC_DIR%/assets/"
],
"add-lines": [
{
"requires": "symfony/asset-mapper",
"file": "config/packages/asset_mapper.yaml",
"position": "after_target",
"warn_if_missing": true,
"target": " missing_import_mode: strict",
"content": " excluded_patterns:\n - '**/assets/styles/*/_*.scss'"
},
{
"file": ".symfony.local.yaml",
"content": " # Watch and build Sass files\n sass:\n cmd: ['symfony', 'console', 'sass:build', '--watch']",
"position": "after_target",
"target": "workers:",
"warn_if_missing": true
}
],
"conflict": {
"symfony/asset-mapper": "<6.3"
}
},
"files": {
"assets/styles/app.scss": {
"contents": [
"// add your SASS styles in this file",
""
],
"executable": false
},
"config/packages/symfonycasts_sass.yaml": {
"contents": [
"symfonycasts_sass:",
" root_sass:",
" - 'assets/styles/app.scss'",
""
],
"executable": false
}
},
"ref": "89c0e817b8256281c0a3623781525aec583ca3f4"
}
}
}
@@ -0,0 +1,32 @@
{
"manifests": {
"symfonycasts/tailwind-bundle": {
"manifest": {
"bundles": {
"Symfonycasts\\TailwindBundle\\SymfonycastsTailwindBundle": [
"all"
]
},
"add-lines": [
{
"file": ".symfony.local.yaml",
"content": " # Watch and build CSS files using Tailwind CSS\n tailwind:\n cmd: ['symfony', 'console', 'tailwind:build', '--watch']",
"position": "after_target",
"target": "workers:",
"warn_if_missing": true
}
],
"post-install-output": [
" * <fg=green>Tailwind CSS is installed!</> Time to get rolling:",
"",
" * <fg=blue>Run</> <comment>php bin/console tailwind:init</> to set up your Tailwind configuration",
" * <fg=blue>Then</> start the watcher with <comment>php bin/console tailwind:build --watch</>",
"",
" * <fg=blue>Read</> the docs at <comment>https://symfony.com/bundles/TailwindBundle/current/index.html</>"
]
},
"files": [],
"ref": "b8af60cec7149fd0cde0ec9d89ccb32335c4d9bd"
}
}
}
+7 -2
View File
@@ -1071,7 +1071,8 @@
"7.2",
"7.3",
"7.4",
"8.1"
"8.1",
"8.2"
],
"symfony/free-mobile-notifier": [
"5.1"
@@ -1548,7 +1549,8 @@
"1.0"
],
"symfonycasts/sass-bundle": [
"0.5"
"0.5",
"0.6"
],
"symfonycasts/tailwind-bundle": [
"0.8",
@@ -1892,6 +1894,9 @@
"symfonycasts/sass-bundle": {
"0.5": {
"symfony/asset-mapper": "<6.3"
},
"0.6": {
"symfony/asset-mapper": "<6.3"
}
},
"zenstruck/foundry": {
+362
View File
@@ -0,0 +1,362 @@
{
"manifests": {
"symfony/framework-bundle": {
"manifest": {
"bundles": {
"Symfony\\Bundle\\FrameworkBundle\\FrameworkBundle": [
"all"
]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/",
"public/": "%PUBLIC_DIR%/",
"src/": "%SRC_DIR%/",
".editorconfig": ".editorconfig",
".symfony.local.yaml": ".symfony.local.yaml",
"AGENTS.md": "AGENTS.md",
"CLAUDE.md": "CLAUDE.md"
},
"composer-scripts": {
"cache:clear": "symfony-cmd",
"assets:install %PUBLIC_DIR%": "symfony-cmd"
},
"env": {
"APP_ENV": "dev",
"APP_SECRET": "",
"APP_SHARE_DIR": "%VAR_DIR%/share"
},
"dotenv": {
"dev": {
"APP_SECRET": "%generate(secret)%"
}
},
"gitignore": [
"/.env.local",
"/.env.local.php",
"/.env.*.local",
"/%CONFIG_DIR%/secrets/prod/prod.decrypt.private.php",
"/%PUBLIC_DIR%/bundles/",
"/%VAR_DIR%/",
"/vendor/"
],
"post-install-output": [
" * <fg=blue>Run</> your application:",
" 1. Go to the project directory",
" 2. Create your code repository with the <comment>git init</comment> command",
" 3. Download the Symfony CLI at <comment>https://symfony.com/download</> to install a development web server",
"",
" * <fg=blue>Read</> the documentation at <comment>https://symfony.com/doc</>"
]
},
"files": {
".editorconfig": {
"contents": [
"# editorconfig.org",
"",
"root = true",
"",
"[*]",
"charset = utf-8",
"end_of_line = lf",
"indent_size = 4",
"indent_style = space",
"insert_final_newline = true",
"trim_trailing_whitespace = true",
"",
"[{compose.yaml,compose.*.yaml}]",
"indent_size = 2",
"",
"[*.md]",
"trim_trailing_whitespace = false",
""
],
"executable": false
},
".symfony.local.yaml": {
"contents": [
"# This configuration file is used by the Symfony CLI tool.",
"# See https://symfony.com/doc/current/setup/symfony_cli.html for more information.",
"",
"http:",
" use_gzip: true",
"",
"# Processes that automatically run with the server (https://symfony.com/doc/current/setup/symfony_cli.html#configuring-workers)",
"workers:",
" # Consume async messages, and restart the worker when the code changes",
" #messenger_consume_async:",
" # cmd: ['symfony', 'console', 'messenger:consume', 'async']",
" # watch: ['config', 'src', 'templates', 'vendor/composer/installed.json']",
""
],
"executable": false
},
"AGENTS.md": {
"contents": [
"# AGENTS.md",
"",
"This is a Symfony project. Check `composer.json` for the exact Symfony/PHP version",
"in use, and read `symfony.lock` to see which recipes ran. Don't assume Doctrine,",
"Twig, API Platform, Messenger, or Lock are installed unless one of those says so.",
"",
"## Ask before generating",
"",
"If the task doesn't specify, ask rather than guess:",
"",
"- Persistence: Doctrine ORM, Doctrine ODM, or none?",
"- Interface: server-rendered (Twig), API (Serializer, maybe API Platform), or both?",
"- Auth: SecurityBundle, and which authenticator?",
"",
"If you can't ask (no interactive channel), state the assumption you're making and",
"pick the smallest option (e.g. no persistence layer) rather than scaffolding a",
"full stack nobody asked for.",
"",
"## Adding features: Flex, not hand-wiring",
"",
"Install new capabilities with `composer require <package>` (e.g. `symfony/lock`,",
"`symfony/messenger`, `orm-pack`) and let the Flex recipe register the bundle and",
"generate its config. Don't hand-edit `config/bundles.php` or hand-write a bundle's",
"base config; that's what the recipe is for. Don't skip a good-fit component just",
"because it isn't installed yet; installing it is one command.",
"",
"## Conventions",
"",
"Follow https://symfony.com/doc/current/best_practices.html to write idiomatic",
"Symfony:",
"",
"- Use PHP attributes for framework metadata, and not only on controllers:",
" `#[Route]`, `#[MapRequestPayload]`, `#[IsGranted]` on actions, `#[Assert\\...]`",
" on properties, `#[AsCommand]`, `#[AsEventListener]`, `#[AsMessageHandler]`, and",
" `#[AsAlias]` / `#[AsTaggedItem]` / `#[Autoconfigure]` on services. No YAML or",
" XML routing.",
"- Rely on autowiring and autoconfiguration. Type-hint constructor arguments and",
" let the container resolve them. Where a type-hint can't express it, stay in the",
" class with `#[Autowire]` (parameters, env vars, expressions) or `#[Target]` (one",
" of several implementations of an interface). A YAML service definition is the",
" last resort, not the first.",
"- Controllers extend `AbstractController`, stay thin, and delegate to services.",
"- Use the framework for what it already does: Form for server-rendered forms,",
" Validator for validation, Serializer for JSON, Messenger for async work,",
" Security (voters, authenticators) for access control, Twig `path()`/`url()`",
" instead of hardcoded URLs.",
"- Before hand-writing infrastructure (locks, queues, caches, HTTP clients,",
" mailers, schedulers) or reaching for a third-party library, check whether a",
" Symfony component covers it. It usually does.",
"",
"Three specifics worth spelling out, because they are easy to get wrong:",
"",
"- Bind request data with `#[MapRequestPayload]` / `#[MapQueryString]` on action",
" arguments, which wires up Serializer and Validator for you, instead of calling",
" `json_decode()` or `SerializerInterface` by hand. If neither package is",
" installed yet, `composer require` them rather than falling back to manual",
" parsing.",
"- Use constructor property promotion, and `readonly` for DTOs and value objects.",
" Don't mark a service `readonly` if it might become `lazy: true`: a lazy proxy",
" can't extend a `readonly` class.",
"- Use `symfony/lock` (`LockFactory`) for mutual exclusion. A hand-built flag or",
" lock file looks fine in review and is usually wrong under concurrency.",
"",
"## Everyday workflow",
"",
"- Run the app with `symfony serve -d`, and commands with `symfony console ...`",
" (or `bin/console` when the Symfony CLI isn't available).",
"- When something fails, read `var/log/dev.log` and the web profiler",
" (`/_profiler`) before changing code.",
"- If `maker-bundle` is installed, prefer `bin/console make:*` with every argument",
" passed up front and `--no-interaction` where supported: makers prompt on a",
" terminal by default, which hangs a non-interactive shell. If a maker still",
" needs interactive input, hand-write the code instead.",
"- If Doctrine ORM is installed, schema changes go through migrations",
" (`bin/console make:migration`, then `doctrine:migrations:migrate`), never",
" `doctrine:schema:update` or hand-written SQL.",
"- `.env` is committed and holds defaults only. Real secrets belong in `.env.local`",
" (git-ignored) or the secrets vault (`bin/console secrets:set`), read via",
" `%env(...)%`.",
"",
"## Testing",
"",
"Install `symfony/test-pack` if it isn't already. Functional/HTTP tests extend",
"`WebTestCase`; service-level tests extend `KernelTestCase`. Run",
"`php bin/phpunit` (falls back to `vendor/bin/phpunit`). A feature isn't done",
"until it has a test that exercises it the way a caller would, an HTTP request for",
"a controller or a service call for a service, not just \"it didn't throw.\"",
"",
"## Code style",
"",
"Symfony's coding standard, the `@Symfony` php-cs-fixer ruleset (a PSR-12-derived",
"superset). Run `vendor/bin/php-cs-fixer fix` if `friendsofphp/php-cs-fixer` is",
"installed; it isn't part of the skeleton by default.",
"",
"## Discover, don't guess",
"",
"Framework APIs change between versions and your training data may be stale. Look",
"things up in the project instead of relying on memory:",
"",
"- `bin/console about`: versions, environment, paths.",
"- `bin/console debug:router`, `debug:container`, `debug:autowiring <name>`,",
" `debug:config <bundle>`, `config:dump-reference <bundle>`: what exists and how",
" it is configured.",
"- `bin/console lint:container`, plus `lint:twig templates/` and",
" `lint:yaml config/` where those packages are installed: validate before running.",
"- Read the installed source and docblocks under `vendor/`.",
"- Docs: https://symfony.com/doc/current/ (switch to the version matching",
" `composer.json` if it differs).",
""
],
"executable": false
},
"CLAUDE.md": {
"contents": [
"# CLAUDE.md",
"",
"@AGENTS.md",
""
],
"executable": false
},
"config/packages/cache.yaml": {
"contents": [
"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",
""
],
"executable": false
},
"config/packages/framework.yaml": {
"contents": [
"# see https://symfony.com/doc/current/reference/configuration/framework.html",
"framework:",
" secret: '%env(APP_SECRET)%'",
"",
" # 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",
""
],
"executable": false
},
"config/preload.php": {
"contents": [
"<?php",
"",
"foreach (glob(dirname(__DIR__).'/var/cache/prod/*.preload.php') ?: [] as $file) {",
" require $file;",
"}",
""
],
"executable": false
},
"config/routes/framework.yaml": {
"contents": [
"when@dev:",
" _errors:",
" resource: '@FrameworkBundle/Resources/config/routing/errors.php'",
" prefix: /_error",
""
],
"executable": false
},
"config/services.yaml": {
"contents": [
"# yaml-language-server: $schema=../vendor/symfony/dependency-injection/Loader/schema/services.schema.json",
"",
"# This file is the entry point to configure your own services.",
"# Files in the packages/ subdirectory configure your dependencies.",
"# See also https://symfony.com/doc/current/service_container/import.html",
"",
"# 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/'",
"",
" # add more service definitions when explicit configuration is needed",
" # please note that last definitions always *replace* previous ones",
""
],
"executable": false
},
"public/index.php": {
"contents": [
"<?php",
"",
"use App\\Kernel;",
"",
"require_once dirname(__DIR__).'/vendor/autoload_runtime.php';",
"",
"return static function (array $context) {",
" return new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']);",
"};",
""
],
"executable": false
},
"src/Controller/.gitignore": {
"contents": [
""
],
"executable": false
},
"src/Kernel.php": {
"contents": [
"<?php",
"",
"namespace App;",
"",
"use Symfony\\Bundle\\FrameworkBundle\\Kernel\\MicroKernelTrait;",
"use Symfony\\Component\\HttpKernel\\Kernel as BaseKernel;",
"",
"class Kernel extends BaseKernel",
"{",
" use MicroKernelTrait;",
"",
" /**",
" * @return list<string> An array of allowed values for APP_ENV",
" */",
" private function getAllowedEnvs(): array",
" {",
" return ['prod', 'dev', 'test'];",
" }",
"}",
""
],
"executable": false
}
},
"ref": "b5fb7271219d786f2145f292c53ed7866284776c"
}
}
}
+8 -1
View File
@@ -33,6 +33,13 @@
"position": "after_target",
"target": "{% block javascripts %}",
"warn_if_missing": true
},
{
"file": ".symfony.local.yaml",
"content": " # Start the Vite dev server\n vite:\n cmd: ['npx', 'vite']\n # Or instead, if you use Rsbuild (https://rsbuild.rs/)\n #rsbuild:\n # cmd: ['npx', 'rsbuild', 'dev']",
"position": "after_target",
"target": "workers:",
"warn_if_missing": true
}
],
"post-install-output": [
@@ -176,7 +183,7 @@
"executable": false
}
},
"ref": "7cd4e200a8b8a7d48a146c9221863a2ad6533219"
"ref": "a452d21b563cd68e93020876bc542225eb9f9e20"
}
}
}
+8 -1
View File
@@ -37,6 +37,13 @@
"position": "after_target",
"target": "{% block stylesheets %}",
"warn_if_missing": true
},
{
"file": ".symfony.local.yaml",
"content": " # Watch and build front assets using Webpack Encore\n npm_encore_watch:\n cmd: ['npm', 'run', 'watch']\n # Or instead, run the Webpack Dev Server (https://symfony.com/doc/current/frontend/encore/dev-server.html)\n #npm_encore_dev_server:\n # cmd: ['npm', 'run', 'dev-server']",
"position": "after_target",
"target": "workers:",
"warn_if_missing": true
}
],
"post-install-output": [
@@ -235,7 +242,7 @@
"executable": false
}
},
"ref": "b346dae458e64a1921ded2125993d94bd719a8dd"
"ref": "fad2c3f0b2677d51b6f96d594b9b71d241f4d196"
}
}
}
+59
View File
@@ -0,0 +1,59 @@
{
"manifests": {
"symfonycasts/sass-bundle": {
"manifest": {
"bundles": {
"Symfonycasts\\SassBundle\\SymfonycastsSassBundle": [
"all"
]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/",
"assets/": "assets/"
},
"gitignore": [
"/%PUBLIC_DIR%/assets/"
],
"add-lines": [
{
"requires": "symfony/asset-mapper",
"file": "config/packages/asset_mapper.yaml",
"position": "after_target",
"warn_if_missing": true,
"target": " missing_import_mode: strict",
"content": " excluded_patterns:\n - '**/assets/styles/*/_*.scss'"
},
{
"file": ".symfony.local.yaml",
"content": " # Watch and build Sass files\n sass:\n cmd: ['symfony', 'console', 'sass:build', '--watch']",
"position": "after_target",
"target": "workers:",
"warn_if_missing": true
}
],
"conflict": {
"symfony/asset-mapper": "<6.3"
}
},
"files": {
"assets/styles/app.scss": {
"contents": [
"// add your SASS styles in this file",
""
],
"executable": false
},
"config/packages/symfonycasts_sass.yaml": {
"contents": [
"symfonycasts_sass:",
" root_sass:",
" - 'assets/styles/app.scss'",
""
],
"executable": false
}
},
"ref": "89c0e817b8256281c0a3623781525aec583ca3f4"
}
}
}
+10 -1
View File
@@ -7,6 +7,15 @@
"all"
]
},
"add-lines": [
{
"file": ".symfony.local.yaml",
"content": " # Watch and build CSS files using Tailwind CSS\n tailwind:\n cmd: ['symfony', 'console', 'tailwind:build', '--watch']",
"position": "after_target",
"target": "workers:",
"warn_if_missing": true
}
],
"post-install-output": [
" * <fg=green>Tailwind CSS is installed!</> Time to get rolling:",
"",
@@ -17,7 +26,7 @@
]
},
"files": [],
"ref": "b7eaad0756e3f9b38764450655e6fea9614bc32a"
"ref": "b8af60cec7149fd0cde0ec9d89ccb32335c4d9bd"
}
}
}