[{"data":1,"prerenderedAt":1740},["ShallowReactive",2],{"navigation":3,"\u002Fapi\u002Fconfiguration":358,"\u002Fapi\u002Fconfiguration-surround":1735},[4,14,36,69,140,341],{"title":5,"path":6,"stem":7,"children":8},"Introduction","\u002Fgetting-started","1.getting-started\u002F1.index",[9,10],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":15,"path":16,"stem":17,"children":18,"page":35},"Guides","\u002Fguides","2.guides",[19,23,27,31],{"title":20,"path":21,"stem":22},"Your First Layout","\u002Fguides\u002Fyour-first-layout","2.guides\u002F1.your-first-layout",{"title":24,"path":25,"stem":26},"Your First Page Template","\u002Fguides\u002Fyour-first-page-template","2.guides\u002F2.your-first-page-template",{"title":28,"path":29,"stem":30},"Your First Component","\u002Fguides\u002Fyour-first-component","2.guides\u002F3.your-first-component",{"title":32,"path":33,"stem":34},"Alternative UI Variants","\u002Fguides\u002Falternative-ui-variants","2.guides\u002F4.alternative-ui-variants",false,{"title":37,"path":38,"stem":39,"children":40,"page":35},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[41,45,49,53,57,61,65],{"title":42,"path":43,"stem":44},"How It All Works","\u002Fcore-concepts\u002Farchitecture","3.core-concepts\u002F1.architecture",{"title":46,"path":47,"stem":48},"The Data Model","\u002Fcore-concepts\u002Fthe-data-model","3.core-concepts\u002F2.the-data-model",{"title":50,"path":51,"stem":52},"Layouts & Pages","\u002Fcore-concepts\u002Flayouts-and-pages","3.core-concepts\u002F3.layouts-and-pages",{"title":54,"path":55,"stem":56},"Dynamic Pages","\u002Fcore-concepts\u002Fdynamic-pages","3.core-concepts\u002F4.dynamic-pages",{"title":58,"path":59,"stem":60},"Components","\u002Fcore-concepts\u002Fcomponents","3.core-concepts\u002F5.components",{"title":62,"path":63,"stem":64},"Draft & Publish Workflow","\u002Fcore-concepts\u002Fdraft-and-publish","3.core-concepts\u002F6.draft-and-publish",{"title":66,"path":67,"stem":68},"The Admin Panel","\u002Fcore-concepts\u002Fadmin-panel","3.core-concepts\u002F7.admin-panel",{"title":70,"path":71,"stem":72,"children":73,"page":35},"Api","\u002Fapi","4.api",[74,78,116,120,124,128,132,136],{"title":75,"path":76,"stem":77},"Bundle Setup","\u002Fapi\u002Fbundle-setup","4.api\u002F1.bundle-setup",{"title":58,"path":79,"stem":80,"children":81,"page":35},"\u002Fapi\u002Fcomponents","4.api\u002F2.components",[82,86,103],{"title":83,"path":84,"stem":85},"Creating Components","\u002Fapi\u002Fcomponents\u002Fcreating-components","4.api\u002F2.components\u002F1.creating-components",{"title":87,"path":88,"stem":89,"children":90,"page":35},"Annotations","\u002Fapi\u002Fcomponents\u002Fannotations","4.api\u002F2.components\u002F2.annotations",[91,95,99],{"title":92,"path":93,"stem":94},"Publishable","\u002Fapi\u002Fcomponents\u002Fannotations\u002Fpublishable","4.api\u002F2.components\u002F2.annotations\u002F1.publishable",{"title":96,"path":97,"stem":98},"Uploadable","\u002Fapi\u002Fcomponents\u002Fannotations\u002Fuploadable","4.api\u002F2.components\u002F2.annotations\u002F2.uploadable",{"title":100,"path":101,"stem":102},"Timestamped","\u002Fapi\u002Fcomponents\u002Fannotations\u002Ftimestamped","4.api\u002F2.components\u002F2.annotations\u002F3.timestamped",{"title":104,"path":105,"stem":106,"children":107,"page":35},"Built Ins","\u002Fapi\u002Fcomponents\u002Fbuilt-ins","4.api\u002F2.components\u002F3.built-ins",[108,112],{"title":109,"path":110,"stem":111},"Collection Component","\u002Fapi\u002Fcomponents\u002Fbuilt-ins\u002Fcollection-component","4.api\u002F2.components\u002F3.built-ins\u002F1.collection-component",{"title":113,"path":114,"stem":115},"Form Component","\u002Fapi\u002Fcomponents\u002Fbuilt-ins\u002Fform-component","4.api\u002F2.components\u002F3.built-ins\u002F2.form-component",{"title":117,"path":118,"stem":119},"Dynamic & Nested Pages","\u002Fapi\u002Fdynamic-pages","4.api\u002F3.dynamic-pages",{"title":121,"path":122,"stem":123},"Users & Security","\u002Fapi\u002Fusers-and-security","4.api\u002F4.users-and-security",{"title":125,"path":126,"stem":127},"Data Fixtures","\u002Fapi\u002Fdata-fixtures","4.api\u002F5.data-fixtures",{"title":129,"path":130,"stem":131},"Configuration Reference","\u002Fapi\u002Fconfiguration","4.api\u002F6.configuration",{"title":133,"path":134,"stem":135},"Console Commands","\u002Fapi\u002Fconsole-commands","4.api\u002F7.console-commands",{"title":137,"path":138,"stem":139},"Debugging & Profiler","\u002Fapi\u002Fdebugging","4.api\u002F8.debugging",{"title":141,"path":142,"stem":143,"children":144,"page":35},"Nuxt Module","\u002Fnuxt-module","5.nuxt-module",[145,149,162,182,207,211,295,320,324],{"title":146,"path":147,"stem":148},"Module Setup","\u002Fnuxt-module\u002Fmodule-setup","5.nuxt-module\u002F1.module-setup",{"title":150,"path":151,"stem":152,"children":153,"page":35},"Configuration","\u002Fnuxt-module\u002Fconfiguration","5.nuxt-module\u002F2.configuration",[154,158],{"title":155,"path":156,"stem":157},"Nuxt Config","\u002Fnuxt-module\u002Fconfiguration\u002Fnuxt-config","5.nuxt-module\u002F2.configuration\u002F1.nuxt-config",{"title":159,"path":160,"stem":161},"Site Config & SEO","\u002Fnuxt-module\u002Fconfiguration\u002Fsite-config-and-seo","5.nuxt-module\u002F2.configuration\u002F2.site-config-and-seo",{"title":163,"path":164,"stem":165,"children":166,"page":35},"Building Your Ui","\u002Fnuxt-module\u002Fbuilding-your-ui","5.nuxt-module\u002F3.building-your-ui",[167,171,175,178],{"title":168,"path":169,"stem":170},"Layouts","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-layouts","5.nuxt-module\u002F3.building-your-ui\u002F1.creating-layouts",{"title":172,"path":173,"stem":174},"Page Templates","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-page-templates","5.nuxt-module\u002F3.building-your-ui\u002F2.creating-page-templates",{"title":83,"path":176,"stem":177},"\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-components","5.nuxt-module\u002F3.building-your-ui\u002F3.creating-components",{"title":179,"path":180,"stem":181},"CLI Generator","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcwa-cli","5.nuxt-module\u002F3.building-your-ui\u002F4.cwa-cli",{"title":183,"path":184,"stem":185,"children":186,"page":35},"Cwa Components","\u002Fnuxt-module\u002Fcwa-components","5.nuxt-module\u002F4.cwa-components",[187,191,195,199,203],{"title":188,"path":189,"stem":190},"\u003CCwaComponentGroup \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-component-group","5.nuxt-module\u002F4.cwa-components\u002F1.cwa-component-group",{"title":192,"path":193,"stem":194},"\u003CCwaPage \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-page","5.nuxt-module\u002F4.cwa-components\u002F2.cwa-page",{"title":196,"path":197,"stem":198},"\u003CCwaLink \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-link","5.nuxt-module\u002F4.cwa-components\u002F3.cwa-link",{"title":200,"path":201,"stem":202},"\u003CCwaImage \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-image","5.nuxt-module\u002F4.cwa-components\u002F4.cwa-image",{"title":204,"path":205,"stem":206},"\u003CCwaDefaultLayout \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-default-layout","5.nuxt-module\u002F4.cwa-components\u002F5.cwa-default-layout",{"title":208,"path":209,"stem":210},"The useCwa() API","\u002Fnuxt-module\u002Fcwa-api","5.nuxt-module\u002F5.cwa-api",{"title":212,"path":213,"stem":214,"children":215,"page":35},"Composables","\u002Fnuxt-module\u002Fcomposables","5.nuxt-module\u002F6.composables",[216,224,261,278],{"title":217,"path":218,"stem":219,"children":220,"page":35},"Layout","\u002Fnuxt-module\u002Fcomposables\u002Flayout","5.nuxt-module\u002F6.composables\u002F0.layout",[221],{"title":217,"path":222,"stem":223},"\u002Fnuxt-module\u002Fcomposables\u002Flayout\u002Fuse-cwa-layout","5.nuxt-module\u002F6.composables\u002F0.layout\u002F1.use-cwa-layout",{"title":225,"path":226,"stem":227,"children":228,"page":35},"Component","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent","5.nuxt-module\u002F6.composables\u002F1.component",[229,233,237,241,245,249,253,257],{"title":230,"path":231,"stem":232},"Component (recommended)","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-component","5.nuxt-module\u002F6.composables\u002F1.component\u002F0.use-cwa-component",{"title":234,"path":235,"stem":236},"Resource","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-resource","5.nuxt-module\u002F6.composables\u002F1.component\u002F1.use-cwa-resource",{"title":238,"path":239,"stem":240},"Collection Resource","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-collection-resource","5.nuxt-module\u002F6.composables\u002F1.component\u002F2.use-cwa-collection-resource",{"title":242,"path":243,"stem":244},"Image Resource","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-image-resource","5.nuxt-module\u002F6.composables\u002F1.component\u002F3.use-cwa-image-resource",{"title":246,"path":247,"stem":248},"Form","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form","5.nuxt-module\u002F6.composables\u002F1.component\u002F4.use-cwa-form",{"title":250,"path":251,"stem":252},"Form Input","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form-input","5.nuxt-module\u002F6.composables\u002F1.component\u002F5.use-cwa-form-input",{"title":254,"path":255,"stem":256},"Form Repeated","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form-repeated","5.nuxt-module\u002F6.composables\u002F1.component\u002F6.use-cwa-form-repeated",{"title":258,"path":259,"stem":260},"Form Collection","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form-collection","5.nuxt-module\u002F6.composables\u002F1.component\u002F7.use-cwa-form-collection",{"title":262,"path":263,"stem":264,"children":265,"page":35},"Admin Manager","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager","5.nuxt-module\u002F6.composables\u002F2.admin-manager",[266,270,274],{"title":267,"path":268,"stem":269},"Manager Tab","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-resource-manager-tab","5.nuxt-module\u002F6.composables\u002F2.admin-manager\u002F1.use-cwa-resource-manager-tab",{"title":271,"path":272,"stem":273},"Resource Model","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-resource-model","5.nuxt-module\u002F6.composables\u002F2.admin-manager\u002F2.use-cwa-resource-model",{"title":275,"path":276,"stem":277},"Resource Upload","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-resource-upload","5.nuxt-module\u002F6.composables\u002F2.admin-manager\u002F3.use-cwa-resource-upload",{"title":279,"path":280,"stem":281,"children":282,"page":35},"Utilities","\u002Fnuxt-module\u002Fcomposables\u002Futilities","5.nuxt-module\u002F6.composables\u002F3.utilities",[283,287,291],{"title":284,"path":285,"stem":286},"Resource Endpoint","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-cwa-resource-endpoint","5.nuxt-module\u002F6.composables\u002F3.utilities\u002F1.use-cwa-resource-endpoint",{"title":288,"path":289,"stem":290},"Query Model","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-query-bound-model","5.nuxt-module\u002F6.composables\u002F3.utilities\u002F2.use-query-bound-model",{"title":292,"path":293,"stem":294},"Resource Route","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-cwa-resource-route","5.nuxt-module\u002F6.composables\u002F3.utilities\u002F3.use-cwa-resource-route",{"title":296,"path":297,"stem":298,"children":299,"page":35},"Component Helpers","\u002Fnuxt-module\u002Fcomponent-helpers","5.nuxt-module\u002F7.component-helpers",[300,304,308,312,316],{"title":301,"path":302,"stem":303},"Images & Media","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fimages-and-uploads","5.nuxt-module\u002F7.component-helpers\u002F1.images-and-uploads",{"title":305,"path":306,"stem":307},"Collections & Pagination","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fcollections-and-pagination","5.nuxt-module\u002F7.component-helpers\u002F2.collections-and-pagination",{"title":309,"path":310,"stem":311},"HTML Content","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fhtml-content","5.nuxt-module\u002F7.component-helpers\u002F3.html-content",{"title":313,"path":314,"stem":315},"Real-Time Updates","\u002Fnuxt-module\u002Fcomponent-helpers\u002Freal-time-updates","5.nuxt-module\u002F7.component-helpers\u002F4.real-time-updates",{"title":317,"path":318,"stem":319},"Forms","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fforms","5.nuxt-module\u002F7.component-helpers\u002F5.forms",{"title":321,"path":322,"stem":323},"Authentication","\u002Fnuxt-module\u002Fauthentication","5.nuxt-module\u002F8.authentication",{"title":325,"path":326,"stem":327,"children":328,"page":35},"Cwa Layer","\u002Fnuxt-module\u002Fcwa-layer","5.nuxt-module\u002F9.cwa-layer",[329,333,337],{"title":330,"path":331,"stem":332},"Overview","\u002Fnuxt-module\u002Fcwa-layer\u002Foverview","5.nuxt-module\u002F9.cwa-layer\u002F1.overview",{"title":334,"path":335,"stem":336},"Auth Pages","\u002Fnuxt-module\u002Fcwa-layer\u002Fauth-pages","5.nuxt-module\u002F9.cwa-layer\u002F2.auth-pages",{"title":338,"path":339,"stem":340},"Admin Panel","\u002Fnuxt-module\u002Fcwa-layer\u002Fadmin-panel","5.nuxt-module\u002F9.cwa-layer\u002F3.admin-panel",{"title":342,"path":343,"stem":344,"children":345,"page":35},"Deployment","\u002Fdeployment","6.deployment",[346,350,354],{"title":347,"path":348,"stem":349},"Docker","\u002Fdeployment\u002Fdocker","6.deployment\u002F1.docker",{"title":351,"path":352,"stem":353},"Kubernetes & Helm","\u002Fdeployment\u002Fkubernetes","6.deployment\u002F2.kubernetes",{"title":355,"path":356,"stem":357},"CI\u002FCD","\u002Fdeployment\u002Fci-cd","6.deployment\u002F3.ci-cd",{"id":359,"title":129,"badge":360,"body":363,"description":1729,"extension":1730,"links":1731,"meta":1732,"navigation":415,"path":130,"seo":1733,"stem":131,"__hash__":1734},"docs\u002F4.api\u002F6.configuration.md",{"label":361,"color":362},"Draft","amber",{"type":364,"value":365,"toc":1723},"minimark",[366,383,388,1368,1372,1375,1382,1407,1413,1431,1438,1442,1576,1580,1590,1648,1651,1704,1719],[367,368,369,370,374,375,378,379,382],"p",{},"Full YAML structure with every option, its type, and default value. The minimum required fields are ",[371,372,373],"code",{},"website_name",", ",[371,376,377],{},"user.class_name",", and ",[371,380,381],{},"refresh_token.*",".",[384,385,387],"h2",{"id":386},"full-configuration","Full Configuration",[389,390,395],"pre",{"className":391,"code":392,"language":393,"meta":394,"style":394},"language-yaml shiki shiki-themes github-light github-dark material-theme-palenight","silverback_api_components:\n\n    # Required. Used in email subjects and templates.\n    website_name: My CWA App\n\n    # Table prefix for all bundle-managed tables. Default: '_acb_'\n    table_prefix: '_acb_'\n\n    # Key under which runtime metadata is nested in API responses. Default: '_metadata'\n    metadata_key: '_metadata'\n\n    # ─── User ────────────────────────────────────────────────────────────────\n    user:\n        # Required. Fully-qualified class name of your User entity.\n        class_name: App\\Entity\\User\n\n        email_verification:\n            enabled: true\n            # Whether new users start verified (false = must verify email)\n            default_value: false\n            # Send a verification email when a new user registers\n            verify_on_register: true\n            # Re-send verification when the user changes their email\n            verify_on_change: true\n            # Block login for unverified email addresses\n            deny_unverified_login: true\n            email:\n                # Query param name carrying the redirect path (optional)\n                redirect_path_query: ~\n                # Path with {{ username }} and {{ token }} placeholders\n                default_redirect_path: \u002Fverify-email\u002F{{ username }}\u002F{{ token }}\n                subject: Please verify your email\n\n        new_email_confirmation:\n            email:\n                redirect_path_query: ~\n                default_redirect_path: \u002Fconfirm-new-email\u002F{{ username }}\u002F{{ new_email }}\u002F{{ token }}\n                subject: Please confirm your new email address\n            # Token validity in seconds. Default: 86400 (24 hours)\n            request_timeout_seconds: 86400\n\n        password_reset:\n            email:\n                redirect_path_query: ~\n                default_redirect_path: \u002Freset-password\u002F{{ username }}\u002F{{ token }}\n                subject: Your password reset request\n            # Minimum seconds between reset requests. Default: 8600\n            repeat_ttl_seconds: 8600\n            # Reset token validity in seconds. Default: 3600\n            request_timeout_seconds: 3600\n\n        emails:\n            welcome:\n                enabled: true\n                subject: 'Welcome to {{ website_name }}'\n            user_enabled:\n                enabled: true\n                subject: 'Your account has been enabled'\n            username_changed:\n                enabled: true\n                subject: 'Your username has been updated'\n            password_changed:\n                enabled: true\n                subject: 'Your password has been changed'\n\n    # ─── Publishable ─────────────────────────────────────────────────────────\n    publishable:\n        # Symfony expression: who can read\u002Fwrite draft resources and publish\n        permission: \"is_granted('ROLE_ADMIN')\"\n\n    # ─── Built-in Components ─────────────────────────────────────────────────\n    enabled_components:\n        form: true        # The Form component (Symfony FormType → JSON)\n        collection: true  # The Collection component (resource list proxy)\n\n    # ─── Refresh Tokens ──────────────────────────────────────────────────────\n    refresh_token:\n        # Service ID of the refresh token storage handler\n        handler_id: silverback.api_components.refresh_token.storage.doctrine\n        options:\n            # Your RefreshToken entity class (from the Flex recipe)\n            class: App\\Entity\\RefreshToken\n        # Must match the cookie name in lexik_jwt_authentication.set_cookies\n        cookie_name: api_components\n        # Token lifetime in seconds. Default: 604800 (1 week)\n        ttl: 604800\n        # The user provider alias used in security.yaml\n        database_user_provider: database\n\n    # ─── Mercure ─────────────────────────────────────────────────────────────\n    mercure:\n        # Name of the Mercure hub (if multiple hubs; null = default hub)\n        hub_name: ~\n        cookie:\n            # SameSite attribute for the Mercure cookie. Default: 'strict'\n            samesite: '%env(JWT_COOKIE_SAMESITE)%'\n        # Scope subscriber JWT tokens to resources the current user can access.\n        # Recommended in production. Default: false (all topics subscribed).\n        secure_subscriptions: false\n\n    # ─── Route Security ──────────────────────────────────────────────────────\n    # URL pattern → Symfony security expression. Evaluated per-route.\n    route_security:\n        - { route: '\u002Fuser-area*', security: \"is_granted('ROLE_USER')\" }\n        - { route: '\u002Fadmin*', security: \"is_granted('ROLE_ADMIN')\" }\n\n    # Expression controlling who can access the route manifest\n    routable_security: \"is_granted('ROLE_ADMIN')\"\n","yaml","",[371,396,397,410,417,424,437,442,448,466,471,477,492,497,503,511,517,528,533,541,553,559,570,576,586,592,602,608,618,626,632,644,650,661,672,677,685,692,701,711,721,727,739,744,752,759,768,778,788,794,805,811,821,826,834,842,852,866,874,883,897,905,914,928,936,945,959,964,970,978,984,1001,1006,1012,1020,1034,1047,1052,1058,1066,1072,1083,1091,1097,1108,1114,1125,1131,1142,1148,1159,1164,1170,1178,1184,1194,1202,1208,1223,1229,1235,1245,1250,1256,1262,1270,1311,1343,1348,1354],{"__ignoreMap":394},[398,399,402,406],"span",{"class":400,"line":401},"line",1,[398,403,405],{"class":404},"s-h7I","silverback_api_components",[398,407,409],{"class":408},"sOvfz",":\n",[398,411,413],{"class":400,"line":412},2,[398,414,416],{"emptyLinePlaceholder":415},true,"\n",[398,418,420],{"class":400,"line":419},3,[398,421,423],{"class":422},"sTBSN","    # Required. Used in email subjects and templates.\n",[398,425,427,430,433],{"class":400,"line":426},4,[398,428,429],{"class":404},"    website_name",[398,431,432],{"class":408},":",[398,434,436],{"class":435},"sLL54"," My CWA App\n",[398,438,440],{"class":400,"line":439},5,[398,441,416],{"emptyLinePlaceholder":415},[398,443,445],{"class":400,"line":444},6,[398,446,447],{"class":422},"    # Table prefix for all bundle-managed tables. Default: '_acb_'\n",[398,449,451,454,456,460,463],{"class":400,"line":450},7,[398,452,453],{"class":404},"    table_prefix",[398,455,432],{"class":408},[398,457,459],{"class":458},"seSrl"," '",[398,461,462],{"class":435},"_acb_",[398,464,465],{"class":458},"'\n",[398,467,469],{"class":400,"line":468},8,[398,470,416],{"emptyLinePlaceholder":415},[398,472,474],{"class":400,"line":473},9,[398,475,476],{"class":422},"    # Key under which runtime metadata is nested in API responses. Default: '_metadata'\n",[398,478,480,483,485,487,490],{"class":400,"line":479},10,[398,481,482],{"class":404},"    metadata_key",[398,484,432],{"class":408},[398,486,459],{"class":458},[398,488,489],{"class":435},"_metadata",[398,491,465],{"class":458},[398,493,495],{"class":400,"line":494},11,[398,496,416],{"emptyLinePlaceholder":415},[398,498,500],{"class":400,"line":499},12,[398,501,502],{"class":422},"    # ─── User ────────────────────────────────────────────────────────────────\n",[398,504,506,509],{"class":400,"line":505},13,[398,507,508],{"class":404},"    user",[398,510,409],{"class":408},[398,512,514],{"class":400,"line":513},14,[398,515,516],{"class":422},"        # Required. Fully-qualified class name of your User entity.\n",[398,518,520,523,525],{"class":400,"line":519},15,[398,521,522],{"class":404},"        class_name",[398,524,432],{"class":408},[398,526,527],{"class":435}," App\\Entity\\User\n",[398,529,531],{"class":400,"line":530},16,[398,532,416],{"emptyLinePlaceholder":415},[398,534,536,539],{"class":400,"line":535},17,[398,537,538],{"class":404},"        email_verification",[398,540,409],{"class":408},[398,542,544,547,549],{"class":400,"line":543},18,[398,545,546],{"class":404},"            enabled",[398,548,432],{"class":408},[398,550,552],{"class":551},"swWMF"," true\n",[398,554,556],{"class":400,"line":555},19,[398,557,558],{"class":422},"            # Whether new users start verified (false = must verify email)\n",[398,560,562,565,567],{"class":400,"line":561},20,[398,563,564],{"class":404},"            default_value",[398,566,432],{"class":408},[398,568,569],{"class":551}," false\n",[398,571,573],{"class":400,"line":572},21,[398,574,575],{"class":422},"            # Send a verification email when a new user registers\n",[398,577,579,582,584],{"class":400,"line":578},22,[398,580,581],{"class":404},"            verify_on_register",[398,583,432],{"class":408},[398,585,552],{"class":551},[398,587,589],{"class":400,"line":588},23,[398,590,591],{"class":422},"            # Re-send verification when the user changes their email\n",[398,593,595,598,600],{"class":400,"line":594},24,[398,596,597],{"class":404},"            verify_on_change",[398,599,432],{"class":408},[398,601,552],{"class":551},[398,603,605],{"class":400,"line":604},25,[398,606,607],{"class":422},"            # Block login for unverified email addresses\n",[398,609,611,614,616],{"class":400,"line":610},26,[398,612,613],{"class":404},"            deny_unverified_login",[398,615,432],{"class":408},[398,617,552],{"class":551},[398,619,621,624],{"class":400,"line":620},27,[398,622,623],{"class":404},"            email",[398,625,409],{"class":408},[398,627,629],{"class":400,"line":628},28,[398,630,631],{"class":422},"                # Query param name carrying the redirect path (optional)\n",[398,633,635,638,640],{"class":400,"line":634},29,[398,636,637],{"class":404},"                redirect_path_query",[398,639,432],{"class":408},[398,641,643],{"class":642},"sBtbT"," ~\n",[398,645,647],{"class":400,"line":646},30,[398,648,649],{"class":422},"                # Path with {{ username }} and {{ token }} placeholders\n",[398,651,653,656,658],{"class":400,"line":652},31,[398,654,655],{"class":404},"                default_redirect_path",[398,657,432],{"class":408},[398,659,660],{"class":435}," \u002Fverify-email\u002F{{ username }}\u002F{{ token }}\n",[398,662,664,667,669],{"class":400,"line":663},32,[398,665,666],{"class":404},"                subject",[398,668,432],{"class":408},[398,670,671],{"class":435}," Please verify your email\n",[398,673,675],{"class":400,"line":674},33,[398,676,416],{"emptyLinePlaceholder":415},[398,678,680,683],{"class":400,"line":679},34,[398,681,682],{"class":404},"        new_email_confirmation",[398,684,409],{"class":408},[398,686,688,690],{"class":400,"line":687},35,[398,689,623],{"class":404},[398,691,409],{"class":408},[398,693,695,697,699],{"class":400,"line":694},36,[398,696,637],{"class":404},[398,698,432],{"class":408},[398,700,643],{"class":642},[398,702,704,706,708],{"class":400,"line":703},37,[398,705,655],{"class":404},[398,707,432],{"class":408},[398,709,710],{"class":435}," \u002Fconfirm-new-email\u002F{{ username }}\u002F{{ new_email }}\u002F{{ token }}\n",[398,712,714,716,718],{"class":400,"line":713},38,[398,715,666],{"class":404},[398,717,432],{"class":408},[398,719,720],{"class":435}," Please confirm your new email address\n",[398,722,724],{"class":400,"line":723},39,[398,725,726],{"class":422},"            # Token validity in seconds. Default: 86400 (24 hours)\n",[398,728,730,733,735],{"class":400,"line":729},40,[398,731,732],{"class":404},"            request_timeout_seconds",[398,734,432],{"class":408},[398,736,738],{"class":737},"scSvc"," 86400\n",[398,740,742],{"class":400,"line":741},41,[398,743,416],{"emptyLinePlaceholder":415},[398,745,747,750],{"class":400,"line":746},42,[398,748,749],{"class":404},"        password_reset",[398,751,409],{"class":408},[398,753,755,757],{"class":400,"line":754},43,[398,756,623],{"class":404},[398,758,409],{"class":408},[398,760,762,764,766],{"class":400,"line":761},44,[398,763,637],{"class":404},[398,765,432],{"class":408},[398,767,643],{"class":642},[398,769,771,773,775],{"class":400,"line":770},45,[398,772,655],{"class":404},[398,774,432],{"class":408},[398,776,777],{"class":435}," \u002Freset-password\u002F{{ username }}\u002F{{ token }}\n",[398,779,781,783,785],{"class":400,"line":780},46,[398,782,666],{"class":404},[398,784,432],{"class":408},[398,786,787],{"class":435}," Your password reset request\n",[398,789,791],{"class":400,"line":790},47,[398,792,793],{"class":422},"            # Minimum seconds between reset requests. Default: 8600\n",[398,795,797,800,802],{"class":400,"line":796},48,[398,798,799],{"class":404},"            repeat_ttl_seconds",[398,801,432],{"class":408},[398,803,804],{"class":737}," 8600\n",[398,806,808],{"class":400,"line":807},49,[398,809,810],{"class":422},"            # Reset token validity in seconds. Default: 3600\n",[398,812,814,816,818],{"class":400,"line":813},50,[398,815,732],{"class":404},[398,817,432],{"class":408},[398,819,820],{"class":737}," 3600\n",[398,822,824],{"class":400,"line":823},51,[398,825,416],{"emptyLinePlaceholder":415},[398,827,829,832],{"class":400,"line":828},52,[398,830,831],{"class":404},"        emails",[398,833,409],{"class":408},[398,835,837,840],{"class":400,"line":836},53,[398,838,839],{"class":404},"            welcome",[398,841,409],{"class":408},[398,843,845,848,850],{"class":400,"line":844},54,[398,846,847],{"class":404},"                enabled",[398,849,432],{"class":408},[398,851,552],{"class":551},[398,853,855,857,859,861,864],{"class":400,"line":854},55,[398,856,666],{"class":404},[398,858,432],{"class":408},[398,860,459],{"class":458},[398,862,863],{"class":435},"Welcome to {{ website_name }}",[398,865,465],{"class":458},[398,867,869,872],{"class":400,"line":868},56,[398,870,871],{"class":404},"            user_enabled",[398,873,409],{"class":408},[398,875,877,879,881],{"class":400,"line":876},57,[398,878,847],{"class":404},[398,880,432],{"class":408},[398,882,552],{"class":551},[398,884,886,888,890,892,895],{"class":400,"line":885},58,[398,887,666],{"class":404},[398,889,432],{"class":408},[398,891,459],{"class":458},[398,893,894],{"class":435},"Your account has been enabled",[398,896,465],{"class":458},[398,898,900,903],{"class":400,"line":899},59,[398,901,902],{"class":404},"            username_changed",[398,904,409],{"class":408},[398,906,908,910,912],{"class":400,"line":907},60,[398,909,847],{"class":404},[398,911,432],{"class":408},[398,913,552],{"class":551},[398,915,917,919,921,923,926],{"class":400,"line":916},61,[398,918,666],{"class":404},[398,920,432],{"class":408},[398,922,459],{"class":458},[398,924,925],{"class":435},"Your username has been updated",[398,927,465],{"class":458},[398,929,931,934],{"class":400,"line":930},62,[398,932,933],{"class":404},"            password_changed",[398,935,409],{"class":408},[398,937,939,941,943],{"class":400,"line":938},63,[398,940,847],{"class":404},[398,942,432],{"class":408},[398,944,552],{"class":551},[398,946,948,950,952,954,957],{"class":400,"line":947},64,[398,949,666],{"class":404},[398,951,432],{"class":408},[398,953,459],{"class":458},[398,955,956],{"class":435},"Your password has been changed",[398,958,465],{"class":458},[398,960,962],{"class":400,"line":961},65,[398,963,416],{"emptyLinePlaceholder":415},[398,965,967],{"class":400,"line":966},66,[398,968,969],{"class":422},"    # ─── Publishable ─────────────────────────────────────────────────────────\n",[398,971,973,976],{"class":400,"line":972},67,[398,974,975],{"class":404},"    publishable",[398,977,409],{"class":408},[398,979,981],{"class":400,"line":980},68,[398,982,983],{"class":422},"        # Symfony expression: who can read\u002Fwrite draft resources and publish\n",[398,985,987,990,992,995,998],{"class":400,"line":986},69,[398,988,989],{"class":404},"        permission",[398,991,432],{"class":408},[398,993,994],{"class":458}," \"",[398,996,997],{"class":435},"is_granted('ROLE_ADMIN')",[398,999,1000],{"class":458},"\"\n",[398,1002,1004],{"class":400,"line":1003},70,[398,1005,416],{"emptyLinePlaceholder":415},[398,1007,1009],{"class":400,"line":1008},71,[398,1010,1011],{"class":422},"    # ─── Built-in Components ─────────────────────────────────────────────────\n",[398,1013,1015,1018],{"class":400,"line":1014},72,[398,1016,1017],{"class":404},"    enabled_components",[398,1019,409],{"class":408},[398,1021,1023,1026,1028,1031],{"class":400,"line":1022},73,[398,1024,1025],{"class":404},"        form",[398,1027,432],{"class":408},[398,1029,1030],{"class":551}," true",[398,1032,1033],{"class":422},"        # The Form component (Symfony FormType → JSON)\n",[398,1035,1037,1040,1042,1044],{"class":400,"line":1036},74,[398,1038,1039],{"class":404},"        collection",[398,1041,432],{"class":408},[398,1043,1030],{"class":551},[398,1045,1046],{"class":422},"  # The Collection component (resource list proxy)\n",[398,1048,1050],{"class":400,"line":1049},75,[398,1051,416],{"emptyLinePlaceholder":415},[398,1053,1055],{"class":400,"line":1054},76,[398,1056,1057],{"class":422},"    # ─── Refresh Tokens ──────────────────────────────────────────────────────\n",[398,1059,1061,1064],{"class":400,"line":1060},77,[398,1062,1063],{"class":404},"    refresh_token",[398,1065,409],{"class":408},[398,1067,1069],{"class":400,"line":1068},78,[398,1070,1071],{"class":422},"        # Service ID of the refresh token storage handler\n",[398,1073,1075,1078,1080],{"class":400,"line":1074},79,[398,1076,1077],{"class":404},"        handler_id",[398,1079,432],{"class":408},[398,1081,1082],{"class":435}," silverback.api_components.refresh_token.storage.doctrine\n",[398,1084,1086,1089],{"class":400,"line":1085},80,[398,1087,1088],{"class":404},"        options",[398,1090,409],{"class":408},[398,1092,1094],{"class":400,"line":1093},81,[398,1095,1096],{"class":422},"            # Your RefreshToken entity class (from the Flex recipe)\n",[398,1098,1100,1103,1105],{"class":400,"line":1099},82,[398,1101,1102],{"class":404},"            class",[398,1104,432],{"class":408},[398,1106,1107],{"class":435}," App\\Entity\\RefreshToken\n",[398,1109,1111],{"class":400,"line":1110},83,[398,1112,1113],{"class":422},"        # Must match the cookie name in lexik_jwt_authentication.set_cookies\n",[398,1115,1117,1120,1122],{"class":400,"line":1116},84,[398,1118,1119],{"class":404},"        cookie_name",[398,1121,432],{"class":408},[398,1123,1124],{"class":435}," api_components\n",[398,1126,1128],{"class":400,"line":1127},85,[398,1129,1130],{"class":422},"        # Token lifetime in seconds. Default: 604800 (1 week)\n",[398,1132,1134,1137,1139],{"class":400,"line":1133},86,[398,1135,1136],{"class":404},"        ttl",[398,1138,432],{"class":408},[398,1140,1141],{"class":737}," 604800\n",[398,1143,1145],{"class":400,"line":1144},87,[398,1146,1147],{"class":422},"        # The user provider alias used in security.yaml\n",[398,1149,1151,1154,1156],{"class":400,"line":1150},88,[398,1152,1153],{"class":404},"        database_user_provider",[398,1155,432],{"class":408},[398,1157,1158],{"class":435}," database\n",[398,1160,1162],{"class":400,"line":1161},89,[398,1163,416],{"emptyLinePlaceholder":415},[398,1165,1167],{"class":400,"line":1166},90,[398,1168,1169],{"class":422},"    # ─── Mercure ─────────────────────────────────────────────────────────────\n",[398,1171,1173,1176],{"class":400,"line":1172},91,[398,1174,1175],{"class":404},"    mercure",[398,1177,409],{"class":408},[398,1179,1181],{"class":400,"line":1180},92,[398,1182,1183],{"class":422},"        # Name of the Mercure hub (if multiple hubs; null = default hub)\n",[398,1185,1187,1190,1192],{"class":400,"line":1186},93,[398,1188,1189],{"class":404},"        hub_name",[398,1191,432],{"class":408},[398,1193,643],{"class":642},[398,1195,1197,1200],{"class":400,"line":1196},94,[398,1198,1199],{"class":404},"        cookie",[398,1201,409],{"class":408},[398,1203,1205],{"class":400,"line":1204},95,[398,1206,1207],{"class":422},"            # SameSite attribute for the Mercure cookie. Default: 'strict'\n",[398,1209,1211,1214,1216,1218,1221],{"class":400,"line":1210},96,[398,1212,1213],{"class":404},"            samesite",[398,1215,432],{"class":408},[398,1217,459],{"class":458},[398,1219,1220],{"class":435},"%env(JWT_COOKIE_SAMESITE)%",[398,1222,465],{"class":458},[398,1224,1226],{"class":400,"line":1225},97,[398,1227,1228],{"class":422},"        # Scope subscriber JWT tokens to resources the current user can access.\n",[398,1230,1232],{"class":400,"line":1231},98,[398,1233,1234],{"class":422},"        # Recommended in production. Default: false (all topics subscribed).\n",[398,1236,1238,1241,1243],{"class":400,"line":1237},99,[398,1239,1240],{"class":404},"        secure_subscriptions",[398,1242,432],{"class":408},[398,1244,569],{"class":551},[398,1246,1248],{"class":400,"line":1247},100,[398,1249,416],{"emptyLinePlaceholder":415},[398,1251,1253],{"class":400,"line":1252},101,[398,1254,1255],{"class":422},"    # ─── Route Security ──────────────────────────────────────────────────────\n",[398,1257,1259],{"class":400,"line":1258},102,[398,1260,1261],{"class":422},"    # URL pattern → Symfony security expression. Evaluated per-route.\n",[398,1263,1265,1268],{"class":400,"line":1264},103,[398,1266,1267],{"class":404},"    route_security",[398,1269,409],{"class":408},[398,1271,1273,1276,1279,1282,1284,1286,1289,1292,1295,1298,1300,1302,1305,1308],{"class":400,"line":1272},104,[398,1274,1275],{"class":408},"        -",[398,1277,1278],{"class":408}," {",[398,1280,1281],{"class":404}," route",[398,1283,432],{"class":408},[398,1285,459],{"class":458},[398,1287,1288],{"class":435},"\u002Fuser-area*",[398,1290,1291],{"class":458},"'",[398,1293,1294],{"class":408},",",[398,1296,1297],{"class":404}," security",[398,1299,432],{"class":408},[398,1301,994],{"class":458},[398,1303,1304],{"class":435},"is_granted('ROLE_USER')",[398,1306,1307],{"class":458},"\"",[398,1309,1310],{"class":408}," }\n",[398,1312,1314,1316,1318,1320,1322,1324,1327,1329,1331,1333,1335,1337,1339,1341],{"class":400,"line":1313},105,[398,1315,1275],{"class":408},[398,1317,1278],{"class":408},[398,1319,1281],{"class":404},[398,1321,432],{"class":408},[398,1323,459],{"class":458},[398,1325,1326],{"class":435},"\u002Fadmin*",[398,1328,1291],{"class":458},[398,1330,1294],{"class":408},[398,1332,1297],{"class":404},[398,1334,432],{"class":408},[398,1336,994],{"class":458},[398,1338,997],{"class":435},[398,1340,1307],{"class":458},[398,1342,1310],{"class":408},[398,1344,1346],{"class":400,"line":1345},106,[398,1347,416],{"emptyLinePlaceholder":415},[398,1349,1351],{"class":400,"line":1350},107,[398,1352,1353],{"class":422},"    # Expression controlling who can access the route manifest\n",[398,1355,1357,1360,1362,1364,1366],{"class":400,"line":1356},108,[398,1358,1359],{"class":404},"    routable_security",[398,1361,432],{"class":408},[398,1363,994],{"class":458},[398,1365,997],{"class":435},[398,1367,1000],{"class":458},[384,1369,1371],{"id":1370},"mercure-secure-subscriptions","Mercure Secure Subscriptions",[367,1373,1374],{},"By default the subscriber JWT token issued at login includes every resource topic — Mercure will push updates for any resource the front-end subscribes to, regardless of the current user's access level. This is fine for public content but leaks real-time updates for resources that have server-side security expressions.",[367,1376,1377,1378,1381],{},"Set ",[371,1379,1380],{},"mercure.secure_subscriptions: true"," to scope the token: the bundle evaluates each API resource's security expression at token-generation time and omits topics the current user cannot access:",[389,1383,1385],{"className":391,"code":1384,"language":393,"meta":394,"style":394},"silverback_api_components:\n    mercure:\n        secure_subscriptions: true\n",[371,1386,1387,1393,1399],{"__ignoreMap":394},[398,1388,1389,1391],{"class":400,"line":401},[398,1390,405],{"class":404},[398,1392,409],{"class":408},[398,1394,1395,1397],{"class":400,"line":412},[398,1396,1175],{"class":404},[398,1398,409],{"class":408},[398,1400,1401,1403,1405],{"class":400,"line":419},[398,1402,1240],{"class":404},[398,1404,432],{"class":408},[398,1406,552],{"class":551},[367,1408,1409],{},[1410,1411,1412],"strong",{},"Caveats:",[1414,1415,1416,1428],"ul",{},[1417,1418,1419,1420,1423,1424,1427],"li",{},"Security expressions that reference ",[371,1421,1422],{},"object"," (item-level security, e.g. ",[371,1425,1426],{},"object.owner == user",") cannot be evaluated at token time because there is no concrete entity instance. Those resource topics are always included — you cannot scope to specific items, only to the class\u002Frole level.",[1417,1429,1430],{},"The token is generated at login time. If a user's roles change mid-session their subscription scope does not update until they re-authenticate.",[367,1432,1433,1434,1437],{},"Enable in production for any application with role-gated resources. Leave ",[371,1435,1436],{},"false"," (the default) for fully public sites.",[384,1439,1441],{"id":1440},"environment-variables","Environment Variables",[1443,1444,1445,1458],"table",{},[1446,1447,1448],"thead",{},[1449,1450,1451,1455],"tr",{},[1452,1453,1454],"th",{},"Variable",[1452,1456,1457],{},"Purpose",[1459,1460,1461,1472,1482,1492,1506,1526,1536,1546,1556,1566],"tbody",{},[1449,1462,1463,1469],{},[1464,1465,1466],"td",{},[371,1467,1468],{},"DATABASE_URL",[1464,1470,1471],{},"Doctrine connection string",[1449,1473,1474,1479],{},[1464,1475,1476],{},[371,1477,1478],{},"JWT_SECRET_KEY",[1464,1480,1481],{},"Path to private key PEM file",[1449,1483,1484,1489],{},[1464,1485,1486],{},[371,1487,1488],{},"JWT_PUBLIC_KEY",[1464,1490,1491],{},"Path to public key PEM file",[1449,1493,1494,1499],{},[1464,1495,1496],{},[371,1497,1498],{},"JWT_PASSPHRASE",[1464,1500,1501,1502,1505],{},"Private key passphrase (",[371,1503,1504],{},".env.local"," only)",[1449,1507,1508,1513],{},[1464,1509,1510],{},[371,1511,1512],{},"JWT_COOKIE_SAMESITE",[1464,1514,1515,1516,374,1519,374,1522,1525],{},"Cookie SameSite attribute (",[371,1517,1518],{},"strict",[371,1520,1521],{},"lax",[371,1523,1524],{},"none",")",[1449,1527,1528,1533],{},[1464,1529,1530],{},[371,1531,1532],{},"MERCURE_URL",[1464,1534,1535],{},"Internal API → Mercure hub URL",[1449,1537,1538,1543],{},[1464,1539,1540],{},[371,1541,1542],{},"MERCURE_PUBLIC_URL",[1464,1544,1545],{},"Browser → Mercure hub URL",[1449,1547,1548,1553],{},[1464,1549,1550],{},[371,1551,1552],{},"MERCURE_JWT_SECRET",[1464,1554,1555],{},"Shared secret for Mercure publisher JWT",[1449,1557,1558,1563],{},[1464,1559,1560],{},[371,1561,1562],{},"MAILER_DSN",[1464,1564,1565],{},"Symfony Mailer transport",[1449,1567,1568,1573],{},[1464,1569,1570],{},[371,1571,1572],{},"APP_SECRET",[1464,1574,1575],{},"Symfony application secret",[384,1577,1579],{"id":1578},"services-you-can-override","Services You Can Override",[367,1581,1582,1583,1586,1587,432],{},"All ~320 bundle services have stable string IDs in the form ",[371,1584,1585],{},"silverback.api_components.*",". Each service's FQCN is also registered as an alias, so you can decorate using either form in ",[371,1588,1589],{},"config\u002Fservices.yaml",[389,1591,1593],{"className":391,"code":1592,"language":393,"meta":394,"style":394},"# config\u002Fservices.yaml\nservices:\n    App\\YourCustomFilesystemProvider:\n        decorates: Silverback\\ApiComponentsBundle\\Helper\\Uploadable\\FilesystemProvider\n\n    # or equivalently using the stable string ID:\n    App\\YourCustomFilesystemProvider:\n        decorates: silverback.api_components.helper.uploadable.filesystem_provider\n",[371,1594,1595,1600,1607,1614,1624,1628,1633,1639],{"__ignoreMap":394},[398,1596,1597],{"class":400,"line":401},[398,1598,1599],{"class":422},"# config\u002Fservices.yaml\n",[398,1601,1602,1605],{"class":400,"line":412},[398,1603,1604],{"class":404},"services",[398,1606,409],{"class":408},[398,1608,1609,1612],{"class":400,"line":419},[398,1610,1611],{"class":404},"    App\\YourCustomFilesystemProvider",[398,1613,409],{"class":408},[398,1615,1616,1619,1621],{"class":400,"line":426},[398,1617,1618],{"class":404},"        decorates",[398,1620,432],{"class":408},[398,1622,1623],{"class":435}," Silverback\\ApiComponentsBundle\\Helper\\Uploadable\\FilesystemProvider\n",[398,1625,1626],{"class":400,"line":439},[398,1627,416],{"emptyLinePlaceholder":415},[398,1629,1630],{"class":400,"line":444},[398,1631,1632],{"class":422},"    # or equivalently using the stable string ID:\n",[398,1634,1635,1637],{"class":400,"line":450},[398,1636,1611],{"class":404},[398,1638,409],{"class":408},[398,1640,1641,1643,1645],{"class":400,"line":468},[398,1642,1618],{"class":404},[398,1644,432],{"class":408},[398,1646,1647],{"class":435}," silverback.api_components.helper.uploadable.filesystem_provider\n",[367,1649,1650],{},"Commonly overridden services:",[1443,1652,1653,1662],{},[1446,1654,1655],{},[1449,1656,1657,1660],{},[1452,1658,1659],{},"Service ID",[1452,1661,1457],{},[1459,1663,1664,1674,1684,1694],{},[1449,1665,1666,1671],{},[1464,1667,1668],{},[371,1669,1670],{},"Silverback\\ApiComponentsBundle\\Helper\\Uploadable\\FilesystemProvider",[1464,1672,1673],{},"Custom storage adapter resolution",[1449,1675,1676,1681],{},[1464,1677,1678],{},[371,1679,1680],{},"Silverback\\ApiComponentsBundle\\Security\\UserChecker",[1464,1682,1683],{},"Custom account checks on login",[1449,1685,1686,1691],{},[1464,1687,1688],{},[371,1689,1690],{},"silverback.api_components.jwt.authentication.success_handler",[1464,1692,1693],{},"Post-login redirect behaviour",[1449,1695,1696,1701],{},[1464,1697,1698],{},[371,1699,1700],{},"silverback.api_components.jwt.authentication.failure_handler",[1464,1702,1703],{},"Login failure response",[367,1705,1706,1707,1710,1711,1714,1715,1718],{},"The string IDs follow the class namespace: ",[371,1708,1709],{},"Silverback\\ApiComponentsBundle\\Foo\\BarBaz"," → ",[371,1712,1713],{},"silverback.api_components.foo.bar_baz",". Inspect ",[371,1716,1717],{},"vendor\u002Fsilverbackdan\u002Fapi-components-bundle\u002Fsrc\u002FResources\u002Fconfig\u002Fservices.php"," for the full list.",[1720,1721,1722],"style",{},"html pre.shiki code .s-h7I, html code.shiki .s-h7I{--shiki-light:#22863A;--shiki-default:#85E89D;--shiki-dark:#F07178}html pre.shiki code .sOvfz, html code.shiki .sOvfz{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#89DDFF}html pre.shiki code .sTBSN, html code.shiki .sTBSN{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sLL54, html code.shiki .sLL54{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#C3E88D}html pre.shiki code .seSrl, html code.shiki .seSrl{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#89DDFF}html pre.shiki code .swWMF, html code.shiki .swWMF{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#FF9CAC}html pre.shiki code .sBtbT, html code.shiki .sBtbT{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#89DDFF}html pre.shiki code .scSvc, html code.shiki .scSvc{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":394,"searchDepth":412,"depth":412,"links":1724},[1725,1726,1727,1728],{"id":386,"depth":412,"text":387},{"id":1370,"depth":412,"text":1371},{"id":1440,"depth":412,"text":1441},{"id":1578,"depth":412,"text":1579},"Complete reference for all silverback_api_components bundle configuration options.","md",null,{},{"title":129,"description":1729},"Ub6QYJRmAiqXGJoid62l2tr7YFYovGuJrqOk4avnuPY",[1736,1738],{"title":125,"path":126,"stem":127,"description":1737,"children":-1},"Use AbstractCwaScaffold and CwaFixtureBuilder to seed your database with layouts, pages, routes, components, and page data in a fluent API.",{"title":133,"path":134,"stem":135,"description":1739,"children":-1},"Symfony console commands provided by the API Components Bundle for managing users, cleaning up data, and generating component entities.",1782512897235]