Files
Obsidian-Vault/Work/Projects/Laravel-v12-Migration/Logs/upgrade-log-goos.md
Vincent Verbruggen 1999dbbc11 Add upgrade logs for Laravel 11 to 12 migration across multiple projects
- Created detailed upgrade log for deversspecialist with phases including Composer updates, Filament upgrades, Tailwind migration, Pest updates, and final verification.
- Added upgrade log for goos project, documenting version changes, encountered issues, and resolutions during the migration process.
- Documented Composer dependency upgrades for qlshandling, highlighting significant changes and necessary code adjustments.
- Introduced a template for future upgrade logs to standardize documentation for Laravel migrations.
2026-02-20 10:43:24 +01:00

10 KiB

Upgrade Log: Goos — Laravel 11 → 12 + Full Ecosystem

Date: 2026-02-10 / 2026-02-11 Branch: laravel-v12


Version Changes

Composer (PHP)

Package Before After Notes
laravel/framework 11.47.0 12.50.0
filament/filament 3.3.45 5.2.1 Via v4 rector then v5 rector
livewire/livewire 3.x 4.1.4
pestphp/pest 2.x 4.3.2 PHPUnit 12
barryvdh/laravel-debugbar 3.x 4.0.7
inertiajs/inertia-laravel 1.3.3 2.1.0
jeffgreco13/filament-breezy 2.6.4 3.1.1
ariaieboy/filament-currency 1.13.0 3.0.0
amidesfahani/filament-tinyeditor 3.0.0 4.0.5
ralphjsmit/laravel-filament-components 2.2.0 3.1.0
mollie/laravel-mollie 3.1.0 4.0.2
symfony/http-client 7.x 8.x
symfony/mailgun-mailer 7.x 8.x
laravel/sanctum 3.x 4.x
nunomaduro/collision 7.x 8.x
codezero/laravel-localized-routes 4.0.1 removed Replaced
codezero/laravel-localizer 3.0.0 removed Unused
opgginc/codezero-laravel-localized-routes 5.x Replacement fork
filament/spatie-laravel-translatable-plugin 3.3.45 removed Deprecated in Filament v4
lara-zeus/spatie-translatable 2.x Replacement
johncarter/filament-focal-point-picker 3.1.0 removed No Filament v5 support
pestphp/pest-plugin-browser 4.2 New — browser testing

NPM (Frontend)

Package Before After Notes
tailwindcss 3.3.2 4.1.18 Manual migration
vite 6.x 7.3.1 Required by laravel-vite-plugin v2
@inertiajs/vue3 1.x 2.x
laravel-vite-plugin 1.x 2.x
@vitejs/plugin-vue 5.x 6.x
@vueuse/core 10.x 14.x
vue-i18n 9.x 11.x
swiper 10.x 12.x
@gtm-support/vue-gtm 2.x 3.x
autoprefixer 10.x removed Not needed with TW v4
@tailwindcss/forms 0.5.x removed Built into TW v4
@tailwindcss/typography 0.5.x removed Built into TW v4
@tailwindcss/aspect-ratio 0.4.x removed Built into TW v4
eslint-plugin-tailwindcss 3.x removed No TW v4 support
@tailwindcss/postcss 0.x New — TW v4 PostCSS plugin
@tailwindcss/vite 4.x New — TW v4 Vite plugin
playwright latest New — browser testing

All Issues Encountered

1. codezero packages block Laravel 12

Error: codezero/laravel-localized-routes ^4 and codezero/laravel-localizer ^3 have no Laravel 12 support.

Fix:

  • Replaced codezero/laravel-localized-routes with opgginc/codezero-laravel-localized-routes ^5.0
  • Removed codezero/laravel-localizer entirely (unused — no PHP code references CodeZero\Localizer)
  • Removed codezero/composer-preload-files from allow-plugins in composer.json

2. codezero/composer-preload-files plugin blocked Composer

Error: After removing from allow-plugins, the plugin still existed in vendor. Composer refused to run any command.

Fix: composer config --no-plugins allow-plugins.codezero/composer-preload-files false

3. Localized routes: /en/ prefix no longer generated

Error: PageTest fails — redirects for English locale no longer have /en/ prefix (e.g., /ds instead of /en/ds).

Status: Open. Needs investigation — may be a config difference in the opgginc v5 fork. The config/localized-routes.php has omitted_locale => 'nl', so English should get prefixed.

File: tests/Feature/Cms/Models/PageTest.php

4. johncarter/filament-focal-point-picker incompatible with Filament v5

Error: Latest v4.1.0 and dev-main only support filament/filament ^3.0|^4.0.

Fix: Removed the package. Replaced FocalPointPicker with TextInput for focal point fields (stores coordinates as string like "50% 50%").

Files:

  • cms/Filament/Form/Fieldset/ImageForBlock.php
  • cms/Filament/Form/Fieldset/ImageVariantForBlock.php

5. filament/spatie-laravel-translatable-plugin deprecated

Error: No v5 release. Package deprecated in Filament v4.

Fix: Replaced with lara-zeus/spatie-translatable ^2.0 (recommended by Filament upgrade rector). Namespace changed from Filament\SpatieLaravelTranslatablePluginLaraZeus\SpatieTranslatable\SpatieLaravelTranslatablePlugin (handled by rector).

File: app/Providers/Filament/AdminPanelProvider.php

6. laravel-vite-plugin v2 requires Vite 7

Error: npm install fails — laravel-vite-plugin ^2 has peer vite@"^7.0.0".

Fix: Updated vite from ^6.2.0 to ^7.0.0 in package.json.

7. eslint-plugin-tailwindcss incompatible with Tailwind v4

Error: npm install fails — eslint-plugin-tailwindcss ^3 requires tailwindcss ^3.4.0.

Fix: Removed from devDependencies. TW v4 ESLint plugin support does not exist yet.

8. Tailwind v3 → v4: manual migration required

Error: The automated @tailwindcss/upgrade tool fails with callback-based theme extensions, FormKit plugin, and @apply in @layer base.

Fix: Manual migration:

  • postcss.config.js — replaced tailwindcss + autoprefixer with @tailwindcss/postcss
  • resources/css/app.css — replaced @tailwind directives with @import "tailwindcss", added @theme {} block with custom colors/fonts/spacing
  • resources/css/utility.css — converted all @layer base classes using @apply to @utility blocks with plain CSS (including media queries for responsive values)
  • Removed tailwind.config.js configuration (moved to CSS-first config)
  • Removed plugins: @tailwindcss/forms, @tailwindcss/typography, @tailwindcss/aspect-ratio, autoprefixer

9. Inertia v2 SSR config change

Error: @inertiajs/server no longer exists in Inertia v2.

Fix: Changed ssr.noExternal from ['@inertiajs/server'] to ['@inertiajs/vue3'] in vite.config.js.

10. Filament v5: Component::$container uninitialized error

Error: Typed property Filament\Schemas\Components\Component::$container must not be accessed before initialization — thrown when calling getChildComponents() on Filament form components outside a Livewire context (during frontend page rendering via the CMS Block system).

Root cause: Filament v5's getChildComponents() creates a Schema wrapper that requires getLivewire(), which fails outside Filament admin panel context.

Fix: Replace getChildComponents() with getDefaultChildComponents() which returns raw component arrays without requiring a Schema/Livewire container.

File: cms/Filament/Blocks/Block.php — methods getSchema() and hasSettings()

11. Filament v5: Field::make() signature change

Error: Declaration of DisplayText::make(string $name = ''): static must be compatible with Field::make(?string $name = null): static

Fix: Changed make(string $name = '') to make(?string $name = null) and pass $name ?? '' to parent.

File: app/Forms/Components/DisplayText.php

12. PHPUnit 12 drops @test annotation support

Error: Tests using /** @test */ are silently not discovered — INFO No tests found.

Fix: Replaced all /** @test */ annotations with #[PHPUnit\Framework\Attributes\Test] attribute in all 7 test files. Added use PHPUnit\Framework\Attributes\Test; import to each.

Files:

  • tests/Feature/Cms/Models/PageTest.php
  • tests/Feature/Cms/Models/RedirectTest.php
  • tests/Feature/Models/UserTest.php
  • tests/Feature/Services/Filament/HelperTest.php
  • tests/Feature/Commerce/Actions/Order/CreateOrderFromCheckoutTest.php
  • tests/Feature/Http/Controller/Public/FormControllerTest.php
  • tests/Feature/Http/Controllers/Api/V0/AddressCheckControllerTest.php

13. PHPUnit 12 / Pest v4: setUp() must be protected

Error: Access level to Pest\Concerns\Testable::setUp() must be public (as in class Tests\TestCase) — fatal error on any test run.

Fix: Changed public function setUp(): void to protected function setUp(): void.

File: tests/TestCase.php

14. Filament v5: ViewAction on ListRecords pages crashes

Error: Resource::getViewAuthorizationResponse(): Argument #1 ($record) must be of type Model, null given — thrown when rendering ViewAction header actions on list pages.

Root cause: In v5, ViewAction tries to authorize against a record, but list pages have no record (null).

Fix: Replace ViewAction::make() with Action::make('name') for navigation-only header actions that don't operate on a record.

File: cms/Filament/Resources/BlogResource/Pages/ListBlogs.php

15. Filament v4/v5 rector scripts

Note: Rector must run for EACH custom namespace directory separately: app/, cms/, commerce/, modules/, support/. No manual $navigationGroup/$navigationIcon type fixes needed in this project (uses method overrides).

Files: 112+ files modified by rector across all directories.


Files Modified (manual changes only, excluding rector)

File Change
composer.json Version constraints, package replacements
package.json Version constraints, removed TW plugins, cleanup
postcss.config.js TW v4 PostCSS plugin
resources/css/app.css TW v4 directives + @theme block
resources/css/utility.css @layer base@utility blocks
vite.config.js SSR noExternal fix
cms/Filament/Blocks/Block.php getChildComponents()getDefaultChildComponents()
cms/Filament/Form/Fieldset/ImageForBlock.php FocalPointPicker → TextInput
cms/Filament/Form/Fieldset/ImageVariantForBlock.php FocalPointPicker → TextInput
cms/Filament/Resources/BlogResource/Pages/ListBlogs.php ViewAction → Action
app/Forms/Components/DisplayText.php make() signature fix
tests/TestCase.php setUp() visibility
tests/Pest.php Browser test suite binding
phpunit.xml Browser test suite
tests/Browser/PageTest.php New — browser smoke tests
tests/Feature/**/*Test.php (7 files) @test#[Test] attribute

Final State

  • Feature/Unit tests: 15 passed, 1 failed (PageTest locale prefix — codezero fork issue)
  • Browser tests: 4 passed (homepage, terms, contact, products)
  • Frontend build: Clean (client + SSR), 0 npm vulnerabilities
  • 169 files changed total (including rector, vendor assets, lock files)