[{"data":1,"prerenderedAt":946},["ShallowReactive",2],{"navigation":3,"\u002Fupgrade\u002Fv1-to-v2":101,"\u002Fupgrade\u002Fv1-to-v2-surround":943},[4,21,38,70,90],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Introduction","\u002Fgetting-started","1.getting-started\u002F1.index",[9,11,16],{"title":5,"path":6,"stem":7,"icon":10},"i-lucide-house",{"title":12,"path":13,"stem":14,"icon":15},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":17,"path":18,"stem":19,"icon":20},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-rocket",{"title":22,"path":23,"stem":24,"children":25,"icon":27},"What are Layers?","\u002Flayers","2.layers\u002F1.index",[26,28,33],{"title":22,"path":23,"stem":24,"icon":27},"i-lucide-layers",{"title":29,"path":30,"stem":31,"icon":32},"Creating Layers","\u002Flayers\u002Fcreating-layers","2.layers\u002F2.creating-layers","i-lucide-plus-circle",{"title":34,"path":35,"stem":36,"icon":37},"Layer Service Provider","\u002Flayers\u002Fservice-provider","2.layers\u002F3.service-provider","i-lucide-plug",{"title":39,"path":40,"stem":41,"children":42,"icon":44},"Commands Overview","\u002Fcommands","3.commands\u002F1.index",[43,45,50,55,60,65],{"title":39,"path":40,"stem":41,"icon":44},"i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"osdd:start","\u002Fcommands\u002Fosdd-start","3.commands\u002F2.osdd-start","i-lucide-play",{"title":51,"path":52,"stem":53,"icon":54},"osdd:layer","\u002Fcommands\u002Fosdd-layer","3.commands\u002F3.osdd-layer","i-lucide-package-plus",{"title":56,"path":57,"stem":58,"icon":59},"osdd:seed","\u002Fcommands\u002Fosdd-seed","3.commands\u002F4.osdd-seed","i-lucide-database",{"title":61,"path":62,"stem":63,"icon":64},"osdd:phpunit","\u002Fcommands\u002Fosdd-phpunit","3.commands\u002F5.osdd-phpunit","i-lucide-flask-conical",{"title":66,"path":67,"stem":68,"icon":69},"Make Commands","\u002Fcommands\u002Fmake-commands","3.commands\u002F6.make-commands","i-lucide-wand",{"title":71,"path":72,"stem":73,"children":74,"icon":76},"API Reference","\u002Fapi","4.api\u002F1.index",[75,77,81,85],{"title":71,"path":72,"stem":73,"icon":76},"i-lucide-book-open",{"title":78,"path":79,"stem":80,"icon":37},"LayerServiceProvider","\u002Fapi\u002Flayer-service-provider","4.api\u002F2.layer-service-provider",{"title":82,"path":83,"stem":84,"icon":59},"SeederRegistry","\u002Fapi\u002Fseeder-registry","4.api\u002F3.seeder-registry",{"title":86,"path":87,"stem":88,"icon":89},"LayersCollection & Layer","\u002Fapi\u002Flayers-collection","4.api\u002F4.layers-collection","i-lucide-folder-search",{"title":91,"path":92,"stem":93,"children":94,"page":100},"Upgrade","\u002Fupgrade","5.upgrade",[95],{"title":96,"path":97,"stem":98,"icon":99},"v1 → v2","\u002Fupgrade\u002Fv1-to-v2","5.upgrade\u002F1.v1-to-v2","i-lucide-arrow-up-circle",false,{"id":102,"title":96,"body":103,"description":936,"extension":937,"links":938,"meta":939,"navigation":940,"path":97,"seo":941,"stem":98,"__hash__":942},"docs\u002F5.upgrade\u002F1.v1-to-v2.md",{"type":104,"value":105,"toc":920},"minimark",[106,127,130,135,161,171,193,210,213,303,318,330,340,374,443,449,516,526,535,563,570,596,599,627,638,644,661,675,679,686,742,754,762,786,790,838,842,913,916],[107,108,109,110,114,115,118,119,122,123,126],"p",{},"v2 introduces layer-scoped routing via ",[111,112,113],"code",{},"withRouting()",", runs config overrides during ",[111,116,117],{},"register()"," (instead of after ",[111,120,121],{},"app->booted()","), keeps the ",[111,124,125],{},"App\\"," PSR-4 mapping in place, and ships a handful of new generator behaviours.",[107,128,129],{},"This page lists every change a v1 project must make to upgrade.",[131,132,134],"h2",{"id":133},"_1-bump-the-dependency","1. Bump the dependency",[136,137,143],"pre",{"className":138,"code":139,"filename":140,"language":141,"meta":142,"style":142},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","composer require xefi\u002Flaravel-osdd:^2.0\n","Terminal","bash","",[111,144,145],{"__ignoreMap":142},[146,147,150,154,158],"span",{"class":148,"line":149},"line",1,[146,151,153],{"class":152},"sBMFI","composer",[146,155,157],{"class":156},"sfazB"," require",[146,159,160],{"class":156}," xefi\u002Flaravel-osdd:^2.0\n",[131,162,164,165,168,169],{"id":163},"_2-breaking-move-overrideconfigfrom-to-register","2. Breaking — move ",[111,166,167],{},"overrideConfigFrom()"," to ",[111,170,117],{},[107,172,173,174,176,177,180,181,185,186,188,189,192],{},"In v1, ",[111,175,167],{}," deferred its work to ",[111,178,179],{},"app()->booted()",". In v2 it applies the merge ",[182,183,184],"strong",{},"immediately"," inside the calling provider's lifecycle — and must therefore run during ",[111,187,117],{},", before any other package's ",[111,190,191],{},"boot()"," reads the config.",[194,195,196],"warning",{},[107,197,198,199,201,202,205,206,209],{},"Leaving the call in ",[111,200,191],{}," is not a fatal error, but it defeats the whole point of the helper: other packages will have already read their defaults by the time the override applies. Symptoms are subtle — Horizon ignoring ",[111,203,204],{},"horizon.path",", Telescope ignoring ",[111,207,208],{},"telescope.middleware",", etc.",[107,211,212],{},"In every layer service provider:",[136,214,219],{"className":215,"code":216,"filename":217,"language":218,"meta":142,"style":142},"language-diff shiki shiki-themes material-theme-lighter material-theme material-theme-palenight"," class OsddServiceProvider extends LayerServiceProvider\n {\n     public function boot(): void\n     {\n-        $this->overrideConfigFrom(__DIR__ . '\u002F..\u002F..\u002Fconfig\u002Fosdd.php', 'osdd');\n+        \u002F\u002F\n     }\n\n     public function register(): void\n     {\n-        \u002F\u002F\n+        $this->overrideConfigFrom(__DIR__ . '\u002F..\u002F..\u002Fconfig\u002Fosdd.php', 'osdd');\n     }\n }\n","src\u002FProviders\u002FOsddServiceProvider.php","diff",[111,220,221,226,232,238,244,250,256,262,269,275,280,286,292,297],{"__ignoreMap":142},[146,222,223],{"class":148,"line":149},[146,224,225],{}," class OsddServiceProvider extends LayerServiceProvider\n",[146,227,229],{"class":148,"line":228},2,[146,230,231],{}," {\n",[146,233,235],{"class":148,"line":234},3,[146,236,237],{},"     public function boot(): void\n",[146,239,241],{"class":148,"line":240},4,[146,242,243],{},"     {\n",[146,245,247],{"class":148,"line":246},5,[146,248,249],{},"-        $this->overrideConfigFrom(__DIR__ . '\u002F..\u002F..\u002Fconfig\u002Fosdd.php', 'osdd');\n",[146,251,253],{"class":148,"line":252},6,[146,254,255],{},"+        \u002F\u002F\n",[146,257,259],{"class":148,"line":258},7,[146,260,261],{},"     }\n",[146,263,265],{"class":148,"line":264},8,[146,266,268],{"emptyLinePlaceholder":267},true,"\n",[146,270,272],{"class":148,"line":271},9,[146,273,274],{},"     public function register(): void\n",[146,276,278],{"class":148,"line":277},10,[146,279,243],{},[146,281,283],{"class":148,"line":282},11,[146,284,285],{},"-        \u002F\u002F\n",[146,287,289],{"class":148,"line":288},12,[146,290,291],{},"+        $this->overrideConfigFrom(__DIR__ . '\u002F..\u002F..\u002Fconfig\u002Fosdd.php', 'osdd');\n",[146,293,295],{"class":148,"line":294},13,[146,296,261],{},[146,298,300],{"class":148,"line":299},14,[146,301,302],{}," }\n",[107,304,305,306,309,310,313,314,317],{},"Repeat for every ",[111,307,308],{},"overrideConfigFrom(...)"," call across your ",[111,311,312],{},"functional\u002F"," and ",[111,315,316],{},"technical\u002F"," layers.",[319,320,321],"tip",{},[107,322,323,325,326,329],{},[111,324,167],{}," is now a no-op when ",[111,327,328],{},"config:cache"," has produced a cached config — same contract as Laravel's own merge helpers.",[131,331,333,334,336,337],{"id":332},"_3-recommended-adopt-withrouting-over-loadroutesfrom","3. Recommended — adopt ",[111,335,113],{}," over ",[111,338,339],{},"loadRoutesFrom()",[107,341,342,343,345,346,348,349,352,353,356,357,356,360,356,363,366,367,370,371,373],{},"v2 ships a ",[111,344,113],{}," helper on ",[111,347,78],{}," that mirrors Laravel's ",[111,350,351],{},"Application::configure()->withRouting(...)",". It loads ",[111,354,355],{},"web",", ",[111,358,359],{},"api",[111,361,362],{},"commands",[111,364,365],{},"channels",", and an optional ",[111,368,369],{},"health"," endpoint with the right middleware groups and the standard ",[111,372,359],{}," prefix.",[136,375,378],{"className":215,"code":376,"filename":377,"language":218,"meta":142,"style":142}," public function boot(): void\n {\n     $this->loadMigrationsFrom(__DIR__ . '\u002F..\u002F..\u002Fdatabase\u002Fmigrations');\n-    $this->loadRoutesFrom(__DIR__ . '\u002F..\u002F..\u002Froutes\u002Fweb.php');\n-    $this->loadRoutesFrom(__DIR__ . '\u002F..\u002F..\u002Froutes\u002Fapi.php');\n+\n+    $this->withRouting(\n+        web:      __DIR__ . '\u002F..\u002F..\u002Froutes\u002Fweb.php',\n+        api:      __DIR__ . '\u002F..\u002F..\u002Froutes\u002Fapi.php',\n+        commands: __DIR__ . '\u002F..\u002F..\u002Froutes\u002Fconsole.php',\n+        channels: __DIR__ . '\u002F..\u002F..\u002Froutes\u002Fchannels.php',\n+    );\n }\n","src\u002FProviders\u002FOrdersServiceProvider.php",[111,379,380,385,389,394,399,404,409,414,419,424,429,434,439],{"__ignoreMap":142},[146,381,382],{"class":148,"line":149},[146,383,384],{}," public function boot(): void\n",[146,386,387],{"class":148,"line":228},[146,388,231],{},[146,390,391],{"class":148,"line":234},[146,392,393],{},"     $this->loadMigrationsFrom(__DIR__ . '\u002F..\u002F..\u002Fdatabase\u002Fmigrations');\n",[146,395,396],{"class":148,"line":240},[146,397,398],{},"-    $this->loadRoutesFrom(__DIR__ . '\u002F..\u002F..\u002Froutes\u002Fweb.php');\n",[146,400,401],{"class":148,"line":246},[146,402,403],{},"-    $this->loadRoutesFrom(__DIR__ . '\u002F..\u002F..\u002Froutes\u002Fapi.php');\n",[146,405,406],{"class":148,"line":252},[146,407,408],{},"+\n",[146,410,411],{"class":148,"line":258},[146,412,413],{},"+    $this->withRouting(\n",[146,415,416],{"class":148,"line":264},[146,417,418],{},"+        web:      __DIR__ . '\u002F..\u002F..\u002Froutes\u002Fweb.php',\n",[146,420,421],{"class":148,"line":271},[146,422,423],{},"+        api:      __DIR__ . '\u002F..\u002F..\u002Froutes\u002Fapi.php',\n",[146,425,426],{"class":148,"line":277},[146,427,428],{},"+        commands: __DIR__ . '\u002F..\u002F..\u002Froutes\u002Fconsole.php',\n",[146,430,431],{"class":148,"line":282},[146,432,433],{},"+        channels: __DIR__ . '\u002F..\u002F..\u002Froutes\u002Fchannels.php',\n",[146,435,436],{"class":148,"line":288},[146,437,438],{},"+    );\n",[146,440,441],{"class":148,"line":294},[146,442,302],{},[107,444,445,446,448],{},"What changes vs. raw ",[111,447,339],{},":",[450,451,452,462,487,497,509],"ul",{},[453,454,455,458,459,461],"li",{},[111,456,457],{},"web:"," files are wrapped in the ",[111,460,355],{}," middleware group.",[453,463,464,467,468,470,471,474,475,478,479,482,483,486],{},[111,465,466],{},"api:"," files are wrapped in ",[111,469,359],{}," middleware ",[182,472,473],{},"and"," prefixed with ",[111,476,477],{},"apiPrefix"," (default ",[111,480,481],{},"'api'",") — drop any ",[111,484,485],{},"Route::prefix('api')"," from inside the file.",[453,488,489,492,493,496],{},[111,490,491],{},"commands:"," is ",[111,494,495],{},"require","d only when running in console.",[453,498,499,492,502,504,505,508],{},[111,500,501],{},"channels:",[111,503,495],{},"d on every request (for ",[111,506,507],{},"Broadcast::channel(...)"," definitions).",[453,510,511,512,515],{},"The whole call is a no-op when ",[111,513,514],{},"route:cache"," has produced a cached route file.",[107,517,518,519,522,523,525],{},"For anything beyond these conventions — custom prefixes, domains, named groups — keep using the ",[111,520,521],{},"Route"," facade directly in ",[111,524,191],{},".",[107,527,528,530,531,534],{},[111,529,51],{}," also gained a ",[111,532,533],{},"routes"," generator that scaffolds the four standard files from stubs:",[136,536,538],{"className":138,"code":537,"filename":140,"language":141,"meta":142,"style":142},"php artisan osdd:layer functional\u002Forders --generators=routes\n# Creates routes\u002Fweb.php, routes\u002Fapi.php, routes\u002Fconsole.php, routes\u002Fchannels.php\n",[111,539,540,557],{"__ignoreMap":142},[146,541,542,545,548,551,554],{"class":148,"line":149},[146,543,544],{"class":152},"php",[146,546,547],{"class":156}," artisan",[146,549,550],{"class":156}," osdd:layer",[146,552,553],{"class":156}," functional\u002Forders",[146,555,556],{"class":156}," --generators=routes\n",[146,558,559],{"class":148,"line":228},[146,560,562],{"class":561},"sHwdD","# Creates routes\u002Fweb.php, routes\u002Fapi.php, routes\u002Fconsole.php, routes\u002Fchannels.php\n",[131,564,566,567,569],{"id":565},"_4-restore-the-app-psr-4-mapping","4. Restore the ",[111,568,125],{}," PSR-4 mapping",[107,571,173,572,574,575,577,578,581,582,313,585,588,589,591,592,595],{},[111,573,46],{}," stripped the ",[111,576,125],{}," PSR-4 entry from root ",[111,579,580],{},"composer.json"," along with ",[111,583,584],{},"Database\\Factories\\",[111,586,587],{},"Database\\Seeders\\",". v2 keeps the ",[111,590,125],{}," mapping in place so Laravel's ",[111,593,594],{},"Application::getNamespace()"," still works (some third-party packages call it during bootstrap).",[107,597,598],{},"If your project was bootstrapped with v1 and the entry was removed, put it back:",[136,600,602],{"className":215,"code":601,"filename":580,"language":218,"meta":142,"style":142}," \"autoload\": {\n     \"psr-4\": {\n+        \"App\\\\\": \"app\u002F\"\n     }\n }\n",[111,603,604,609,614,619,623],{"__ignoreMap":142},[146,605,606],{"class":148,"line":149},[146,607,608],{}," \"autoload\": {\n",[146,610,611],{"class":148,"line":228},[146,612,613],{},"     \"psr-4\": {\n",[146,615,616],{"class":148,"line":234},[146,617,618],{},"+        \"App\\\\\": \"app\u002F\"\n",[146,620,621],{"class":148,"line":240},[146,622,261],{},[146,624,625],{"class":148,"line":246},[146,626,302],{},[107,628,629,630,633,634,637],{},"Then run ",[111,631,632],{},"composer dump-autoload",". No code should live under ",[111,635,636],{},"app\u002F"," in an OSDD project, but the mapping itself stays.",[131,639,641,642],{"id":640},"_5-recommended-re-run-osddphpunit","5. Recommended — re-run ",[111,643,61],{},[107,645,646,647,649,650,653,654,657,658,660],{},"v2 of ",[111,648,61],{}," adds a ",[111,651,652],{},"\u003Csource>\u003Cexclude>\u003Cdirectory>**\u002Fdatabase\u002Fmigrations\u003C\u002Fdirectory>\u003C\u002Fexclude>\u003C\u002Fsource>"," block to ",[111,655,656],{},"phpunit.xml"," so layer migrations don't count against code coverage. The change is idempotent — running it on a v1 ",[111,659,656],{}," simply adds the exclusion if missing.",[136,662,664],{"className":138,"code":663,"filename":140,"language":141,"meta":142,"style":142},"php artisan osdd:phpunit\n",[111,665,666],{"__ignoreMap":142},[146,667,668,670,672],{"class":148,"line":149},[146,669,544],{"class":152},[146,671,547],{"class":156},[146,673,674],{"class":156}," osdd:phpunit\n",[131,676,678],{"id":677},"_6-optional-let-make-commands-wire-your-layer-provider","6. Optional — let make commands wire your layer provider",[107,680,681,682,685],{},"v2 introduces a ",[111,683,684],{},"RegistersInLayerProvider"," helper used by three make commands. They each inject a line into the resolved layer's service provider when the file doesn't already contain it:",[687,688,689,702],"table",{},[690,691,692],"thead",{},[693,694,695,699],"tr",{},[696,697,698],"th",{},"Command",[696,700,701],{},"Statement injected",[703,704,705,718,730],"tbody",{},[693,706,707,713],{},[708,709,710],"td",{},[111,711,712],{},"osdd:config \u003Cname>",[708,714,715],{},[111,716,717],{},"$this->overrideConfigFrom(__DIR__ . '\u002F..\u002F..\u002Fconfig\u002F\u003Cname>.php', '\u003Cname>');",[693,719,720,725],{},[708,721,722],{},[111,723,724],{},"osdd:migration",[708,726,727],{},[111,728,729],{},"$this->loadMigrationsFrom(__DIR__ . '\u002F..\u002F..\u002Fdatabase\u002Fmigrations');",[693,731,732,737],{},[708,733,734],{},[111,735,736],{},"osdd:seeder",[708,738,739],{},[111,740,741],{},"$this->loadSeeders([\\Vendor\\Package\\…\\YourSeeder::class]);",[107,743,744,745,747,748,750,751,753],{},"All three injections are idempotent. Existing v1 projects need no changes — the helper only affects newly generated files. Note that the injected ",[111,746,308],{}," lands in ",[111,749,191],{},"; move it to ",[111,752,117],{}," manually when cross-package boot timing matters (see step 2).",[131,755,757,758,761],{"id":756},"_7-optional-ide-helpermodels-now-sees-layers","7. Optional — ",[111,759,760],{},"ide-helper:models"," now sees layers",[107,763,764,765,356,774,777,778,781,782,785],{},"If you use ",[766,767,771],"a",{"href":768,"rel":769},"https:\u002F\u002Fgithub.com\u002Fbarryvdh\u002Flaravel-ide-helper",[770],"nofollow",[111,772,773],{},"barryvdh\u002Flaravel-ide-helper",[111,775,776],{},"php artisan ide-helper:models"," now picks up every layer's ",[111,779,780],{},"src\u002F"," directory automatically. Existing ",[111,783,784],{},"ide-helper.model_locations"," entries are preserved and merged — no config change needed.",[131,787,789],{"id":788},"_8-other-changes","8. Other changes",[450,791,792,815,828],{},[453,793,794,800,801,803,804,807,808,811,812,814],{},[182,795,796,799],{},[111,797,798],{},"functional\u002Fusers"," stub"," — ",[111,802,46],{}," now scaffolds a ",[111,805,806],{},"UsersServiceProvider::register()"," that rebinds Laravel's auth user model with ",[111,809,810],{},"config(['auth.providers.users.model' => \\Functional\\Users\\Models\\User::class])",". Existing v1 projects can either copy that line into their own provider's ",[111,813,117],{}," or keep their current configuration — both work.",[453,816,817,800,820,823,824,827],{},[182,818,819],{},"Hyphenated layer names",[111,821,822],{},"osdd:layer external-accounts"," now produces a migration that creates the ",[111,825,826],{},"external_accounts"," table (v1 produced an invalid table name on some setups). No action needed for layers already in the repo.",[453,829,830,833,834,837],{},[182,831,832],{},"Generated provider"," — newly scaffolded providers include the ",[111,835,836],{},"withRouting(...)"," call by default. Layers generated under v1 keep working unchanged.",[131,839,841],{"id":840},"checklist","Checklist",[450,843,846,858,871,883,897,907],{"className":844},[845],"contains-task-list",[453,847,850,854,855],{"className":848},[849],"task-list-item",[851,852],"input",{"disabled":267,"type":853},"checkbox"," ",[111,856,857],{},"composer require xefi\u002Flaravel-osdd:^2.0",[453,859,861,863,864,866,867,168,869],{"className":860},[849],[851,862],{"disabled":267,"type":853}," Move every ",[111,865,308],{}," from ",[111,868,191],{},[111,870,117],{},[453,872,874,876,877,880,881],{"className":873},[849],[851,875],{"disabled":267,"type":853}," (Recommended) Replace ",[111,878,879],{},"loadRoutesFrom(...)"," calls with ",[111,882,836],{},[453,884,886,888,889,168,892,894,895],{"className":885},[849],[851,887],{"disabled":267,"type":853}," (If v1 stripped it) Re-add ",[111,890,891],{},"\"App\\\\\": \"app\u002F\"",[111,893,580],{}," and run ",[111,896,632],{},[453,898,900,902,903,906],{"className":899},[849],[851,901],{"disabled":267,"type":853}," Re-run ",[111,904,905],{},"php artisan osdd:phpunit"," to add the migrations coverage exclusion",[453,908,910,912],{"className":909},[849],[851,911],{"disabled":267,"type":853}," Run your test suite — particularly anything that depends on third-party config overrides",[107,914,915],{},"Once each step is done you're on v2.",[917,918,919],"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 .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":142,"searchDepth":149,"depth":228,"links":921},[922,923,925,927,929,931,932,934,935],{"id":133,"depth":228,"text":134},{"id":163,"depth":228,"text":924},"2. Breaking — move overrideConfigFrom() to register()",{"id":332,"depth":228,"text":926},"3. Recommended — adopt withRouting() over loadRoutesFrom()",{"id":565,"depth":228,"text":928},"4. Restore the App\\ PSR-4 mapping",{"id":640,"depth":228,"text":930},"5. Recommended — re-run osdd:phpunit",{"id":677,"depth":228,"text":678},{"id":756,"depth":228,"text":933},"7. Optional — ide-helper:models now sees layers",{"id":788,"depth":228,"text":789},{"id":840,"depth":228,"text":841},"Migrate an existing Laravel OSDD v1 project to v2.","md",null,{},{"icon":99},{"title":96,"description":936},"hqyj2hL4kMmEkIluCVlmjbanTdv0qspSjXXlcX7j5ws",[944,938],{"title":86,"path":87,"stem":88,"description":945,"icon":89,"children":-1},"Classes for discovering and inspecting layers programmatically.",1780332648508]