[{"data":1,"prerenderedAt":624},["ShallowReactive",2],{"navigation":3,"\u002Fguides\u002Fconfiguration":193,"\u002Fguides\u002Fconfiguration-surround":619},[4,27,49,99,149,169,183],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":26},"Getting Started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,14,18,22],{"title":11,"path":12,"stem":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":15,"path":16,"stem":17},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":19,"path":20,"stem":21},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start",{"title":23,"path":24,"stem":25},"Existing Application","\u002Fgetting-started\u002Fexisting-application","1.getting-started\u002F4.existing-application",false,{"title":28,"icon":29,"path":30,"stem":31,"children":32,"page":26},"Concepts","i-lucide-layers","\u002Fconcepts","2.concepts",[33,37,41,45],{"title":34,"path":35,"stem":36},"Layers","\u002Fconcepts\u002Flayers","2.concepts\u002F1.layers",{"title":38,"path":39,"stem":40},"Buckets","\u002Fconcepts\u002Fbuckets","2.concepts\u002F2.buckets",{"title":42,"path":43,"stem":44},"Boundaries","\u002Fconcepts\u002Fboundaries","2.concepts\u002F3.boundaries",{"title":46,"path":47,"stem":48},"Service Providers","\u002Fconcepts\u002Fservice-providers","2.concepts\u002F4.service-providers",{"title":50,"icon":51,"path":52,"stem":53,"children":54,"page":26},"Guides","i-lucide-book-marked","\u002Fguides","3.guides",[55,59,63,67,71,75,79,83,87,91,95],{"title":56,"path":57,"stem":58},"Add a Domain","\u002Fguides\u002Fadd-a-domain","3.guides\u002F01.add-a-domain",{"title":60,"path":61,"stem":62},"Share Code Between Layers","\u002Fguides\u002Fshare-code-between-layers","3.guides\u002F02.share-code-between-layers",{"title":64,"path":65,"stem":66},"Routes","\u002Fguides\u002Froutes","3.guides\u002F03.routes",{"title":68,"path":69,"stem":70},"Views and Components","\u002Fguides\u002Fviews-and-components","3.guides\u002F04.views-and-components",{"title":72,"path":73,"stem":74},"Seeders","\u002Fguides\u002Fseeders","3.guides\u002F05.seeders",{"title":76,"path":77,"stem":78},"Configuration","\u002Fguides\u002Fconfiguration","3.guides\u002F06.configuration",{"title":80,"path":81,"stem":82},"Events","\u002Fguides\u002Fevents","3.guides\u002F07.events",{"title":84,"path":85,"stem":86},"Tests and CI","\u002Fguides\u002Ftesting-and-ci","3.guides\u002F08.testing-and-ci",{"title":88,"path":89,"stem":90},"Production","\u002Fguides\u002Fproduction","3.guides\u002F09.production",{"title":92,"path":93,"stem":94},"Remove a Layer","\u002Fguides\u002Fremoving-a-layer","3.guides\u002F10.removing-a-layer",{"title":96,"path":97,"stem":98},"Multi-tenancy","\u002Fguides\u002Fmulti-tenancy","3.guides\u002F11.multi-tenancy",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":26},"Commands","i-lucide-terminal","\u002Fcommands","4.commands",[105,109,113,117,121,125,129,133,137,141,145],{"title":106,"path":107,"stem":108},"Overview","\u002Fcommands\u002Foverview","4.commands\u002F01.overview",{"title":110,"path":111,"stem":112},"osdd:start","\u002Fcommands\u002Fosdd-start","4.commands\u002F02.osdd-start",{"title":114,"path":115,"stem":116},"osdd:layer","\u002Fcommands\u002Fosdd-layer","4.commands\u002F03.osdd-layer",{"title":118,"path":119,"stem":120},"osdd:list","\u002Fcommands\u002Fosdd-list","4.commands\u002F04.osdd-list",{"title":122,"path":123,"stem":124},"osdd:check","\u002Fcommands\u002Fosdd-check","4.commands\u002F05.osdd-check",{"title":126,"path":127,"stem":128},"osdd:graph","\u002Fcommands\u002Fosdd-graph","4.commands\u002F06.osdd-graph",{"title":130,"path":131,"stem":132},"osdd:seed","\u002Fcommands\u002Fosdd-seed","4.commands\u002F07.osdd-seed",{"title":134,"path":135,"stem":136},"osdd:phpunit","\u002Fcommands\u002Fosdd-phpunit","4.commands\u002F08.osdd-phpunit",{"title":138,"path":139,"stem":140},"osdd:remove","\u002Fcommands\u002Fosdd-remove","4.commands\u002F09.osdd-remove",{"title":142,"path":143,"stem":144},"osdd:cache","\u002Fcommands\u002Fosdd-cache","4.commands\u002F10.osdd-cache",{"title":146,"path":147,"stem":148},"Generators","\u002Fcommands\u002Fmake-commands","4.commands\u002F11.make-commands",{"title":150,"icon":151,"path":152,"stem":153,"children":154,"page":26},"API Reference","i-lucide-book-open","\u002Fapi-reference","5.api-reference",[155,159,162,166],{"title":156,"path":157,"stem":158},"LayerServiceProvider","\u002Fapi-reference\u002Flayer-service-provider","5.api-reference\u002F1.layer-service-provider",{"title":34,"path":160,"stem":161},"\u002Fapi-reference\u002Flayers","5.api-reference\u002F2.layers",{"title":163,"path":164,"stem":165},"SeederRegistry","\u002Fapi-reference\u002Fseeder-registry","5.api-reference\u002F3.seeder-registry",{"title":76,"path":167,"stem":168},"\u002Fapi-reference\u002Fconfiguration","5.api-reference\u002F4.configuration",{"title":170,"icon":171,"path":172,"stem":173,"children":174,"page":26},"Integrations","i-lucide-puzzle","\u002Fintegrations","6.integrations",[175,179],{"title":176,"path":177,"stem":178},"Laravel Boost","\u002Fintegrations\u002Flaravel-boost","6.integrations\u002F1.laravel-boost",{"title":180,"path":181,"stem":182},"Tinker and IDE Helper","\u002Fintegrations\u002Ftinker-and-ide-helper","6.integrations\u002F2.tinker-and-ide-helper",{"title":184,"icon":185,"path":186,"stem":187,"children":188,"page":26},"Upgrade","i-lucide-arrow-up-circle","\u002Fupgrade","7.upgrade",[189],{"title":190,"path":191,"stem":192},"Upgrade from 2.x","\u002Fupgrade\u002Ffrom-2x","7.upgrade\u002F1.from-2x",{"id":194,"title":76,"body":195,"description":611,"extension":612,"links":613,"meta":614,"navigation":615,"path":77,"seo":616,"sitemap":617,"stem":78,"__hash__":618},"docs\u002F3.guides\u002F06.configuration.md",{"type":196,"value":197,"toc":604},"minimark",[198,215,220,251,262,306,312,316,330,397,473,524,551,556,559,580,583,587,600],[199,200,201,202,205,206,209,210,214],"p",{},"A project converted by ",[203,204,110],"code",{}," has no root ",[203,207,208],{},"config\u002F"," folder. Each layer brings the config it needs, and overrides the config of other packages, through its provider. The settings of OSDD itself are in the ",[211,212,213],"a",{"href":167},"configuration reference",".",[216,217,219],"h2",{"id":218},"give-a-layer-its-own-config-file","Give a layer its own config file",[221,222,227],"pre",{"className":223,"code":224,"language":225,"meta":226,"style":226},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","php artisan osdd:config orders --layer=functional\u002Forders\n","bash","",[203,228,229],{"__ignoreMap":226},[230,231,234,238,242,245,248],"span",{"class":232,"line":233},"line",1,[230,235,237],{"class":236},"sBMFI","php",[230,239,241],{"class":240},"sfazB"," artisan",[230,243,244],{"class":240}," osdd:config",[230,246,247],{"class":240}," orders",[230,249,250],{"class":240}," --layer=functional\u002Forders\n",[199,252,253,254,257,258,261],{},"The command creates ",[203,255,256],{},"functional\u002Forders\u002Fconfig\u002Forders.php"," and adds this line to the ",[203,259,260],{},"register()"," method of the layer provider:",[221,263,266],{"className":264,"code":265,"language":237,"meta":226,"style":226},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","$this->overrideConfigFrom(__DIR__ . '\u002F..\u002F..\u002Fconfig\u002Forders.php', 'orders');\n",[203,267,268],{"__ignoreMap":226},[230,269,270,274,278,281,284,287,290,293,296,298,301,303],{"class":232,"line":233},[230,271,273],{"class":272},"sMK4o","$this->",[230,275,277],{"class":276},"s2Zo4","overrideConfigFrom",[230,279,280],{"class":272},"(__DIR__",[230,282,283],{"class":272}," .",[230,285,286],{"class":272}," '",[230,288,289],{"class":240},"\u002F..\u002F..\u002Fconfig\u002Forders.php",[230,291,292],{"class":272},"'",[230,294,295],{"class":272},",",[230,297,286],{"class":272},[230,299,300],{"class":240},"orders",[230,302,292],{"class":272},[230,304,305],{"class":272},");\n",[199,307,308,309,214],{},"Read it as usual: ",[203,310,311],{},"config('orders.reminder_days')",[216,313,315],{"id":314},"override-another-packages-config","Override another package's config",[199,317,318,319,322,323,326,327,329],{},"Laravel's ",[203,320,321],{},"mergeConfigFrom()"," keeps the values that are already loaded: a package uses it to fill in its defaults. ",[203,324,325],{},"overrideConfigFrom()"," does the opposite: the layer's values win, like a file in the application's ",[203,328,208],{}," folder.",[221,331,334],{"className":264,"code":332,"filename":333,"language":237,"meta":226,"style":226},"public function register(): void\n{\n    $this->overrideConfigFrom(__DIR__ . '\u002F..\u002F..\u002Fconfig\u002Fhorizon.php', 'horizon');\n}\n","technical\u002Fhorizon\u002Fsrc\u002FProviders\u002FHorizonServiceProvider.php",[203,335,336,355,361,391],{"__ignoreMap":226},[230,337,338,342,345,348,351],{"class":232,"line":233},[230,339,341],{"class":340},"spNyl","public",[230,343,344],{"class":340}," function",[230,346,347],{"class":276}," register",[230,349,350],{"class":272},"():",[230,352,354],{"class":353},"sbssI"," void\n",[230,356,358],{"class":232,"line":357},2,[230,359,360],{"class":272},"{\n",[230,362,364,367,369,371,373,375,378,380,382,384,387,389],{"class":232,"line":363},3,[230,365,366],{"class":272},"    $this->",[230,368,277],{"class":276},[230,370,280],{"class":272},[230,372,283],{"class":272},[230,374,286],{"class":272},[230,376,377],{"class":240},"\u002F..\u002F..\u002Fconfig\u002Fhorizon.php",[230,379,292],{"class":272},[230,381,295],{"class":272},[230,383,286],{"class":272},[230,385,386],{"class":240},"horizon",[230,388,292],{"class":272},[230,390,305],{"class":272},[230,392,394],{"class":232,"line":393},4,[230,395,396],{"class":272},"}\n",[221,398,401],{"className":264,"code":399,"filename":400,"language":237,"meta":226,"style":226},"return [\n    'path' => 'admin\u002Fhorizon',\n    'middleware' => ['web', 'auth'],\n];\n","technical\u002Fhorizon\u002Fconfig\u002Fhorizon.php",[203,402,403,412,435,468],{"__ignoreMap":226},[230,404,405,409],{"class":232,"line":233},[230,406,408],{"class":407},"s7zQu","return",[230,410,411],{"class":272}," [\n",[230,413,414,417,420,422,425,427,430,432],{"class":232,"line":357},[230,415,416],{"class":272},"    '",[230,418,419],{"class":240},"path",[230,421,292],{"class":272},[230,423,424],{"class":272}," =>",[230,426,286],{"class":272},[230,428,429],{"class":240},"admin\u002Fhorizon",[230,431,292],{"class":272},[230,433,434],{"class":272},",\n",[230,436,437,439,442,444,446,449,451,454,456,458,460,463,465],{"class":232,"line":363},[230,438,416],{"class":272},[230,440,441],{"class":240},"middleware",[230,443,292],{"class":272},[230,445,424],{"class":272},[230,447,448],{"class":272}," [",[230,450,292],{"class":272},[230,452,453],{"class":240},"web",[230,455,292],{"class":272},[230,457,295],{"class":272},[230,459,286],{"class":272},[230,461,462],{"class":240},"auth",[230,464,292],{"class":272},[230,466,467],{"class":272},"],\n",[230,469,470],{"class":232,"line":393},[230,471,472],{"class":272},"];\n",[474,475,476,492],"table",{},[477,478,479],"thead",{},[480,481,482,486,489],"tr",{},[483,484,485],"th",{},"Method",[483,487,488],{},"Who wins",[483,490,491],{},"Runs",[493,494,495,510],"tbody",{},[480,496,497,502,505],{},[498,499,500],"td",{},[203,501,321],{},[498,503,504],{},"The values already loaded",[498,506,507,508],{},"In ",[203,509,260],{},[480,511,512,516,519],{},[498,513,514],{},[203,515,325],{},[498,517,518],{},"The layer's values",[498,520,507,521,523],{},[203,522,260],{},", skipped when the config is cached",[525,526,527],"warning",{},[199,528,529,530,532,533,535,536,539,540,543,544,547,548,550],{},"Call ",[203,531,325],{}," from ",[203,534,260],{},", not ",[203,537,538],{},"boot()",". Packages read their config while they boot: Horizon reads ",[203,541,542],{},"horizon.path"," and ",[203,545,546],{},"horizon.middleware"," to register its routes. An override applied in ",[203,549,538],{}," may come too late.",[552,553,555],"h3",{"id":554},"maps-and-lists","Maps and lists",[199,557,558],{},"Maps are merged key by key, at every depth: nested keys you leave out keep their value. A list replaces the loaded list as a whole, and an empty array clears the loaded value:",[221,560,562],{"className":264,"code":561,"language":237,"meta":226,"style":226},"\u002F\u002F loaded:          ['queues' => ['default', 'low'], 'timeout' => 60]\n\u002F\u002F layer file:      ['queues' => ['high']]\n\u002F\u002F result:          ['queues' => ['high'], 'timeout' => 60]\n",[203,563,564,570,575],{"__ignoreMap":226},[230,565,566],{"class":232,"line":233},[230,567,569],{"class":568},"sHwdD","\u002F\u002F loaded:          ['queues' => ['default', 'low'], 'timeout' => 60]\n",[230,571,572],{"class":232,"line":357},[230,573,574],{"class":568},"\u002F\u002F layer file:      ['queues' => ['high']]\n",[230,576,577],{"class":232,"line":363},[230,578,579],{"class":568},"\u002F\u002F result:          ['queues' => ['high'], 'timeout' => 60]\n",[199,581,582],{},"Write the full list in the layer file when you want to keep some of the loaded items.",[216,584,586],{"id":585},"cached-configuration","Cached configuration",[199,588,589,592,593,595,596,599],{},[203,590,591],{},"php artisan config:cache"," stores the merged result. ",[203,594,325],{}," does nothing once the config is cached, so run ",[203,597,598],{},"config:cache"," again after changing a layer's config file.",[601,602,603],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":226,"searchDepth":233,"depth":357,"links":605},[606,607,610],{"id":218,"depth":357,"text":219},{"id":314,"depth":357,"text":315,"children":608},[609],{"id":554,"depth":363,"text":555},{"id":585,"depth":357,"text":586},"Give a layer its own config file, and override the config of Laravel or any package from a layer.","md",null,{},true,{"title":76,"description":611},{"loc":77},"hXxD1NaTmmql8Ug8NAt6di_MufhHjfgtdN8yyPD6EJ8",[620,622],{"title":72,"path":73,"stem":74,"description":621,"children":-1},"Give each layer its own seeders, order them across layers, and run them from osdd:seed, db:seed or your tests.",{"title":80,"path":81,"stem":82,"description":623,"children":-1},"Register the listeners of every layer without Event::listen(), like the ones of app\u002FListeners.",1794437211493]