# Flux CMS — Migration in ein neues Projekt Diese Checkliste führt dich durch alle Schritte, um Flux CMS aus einem bestehenden Projekt in ein neues Laravel-Projekt zu migrieren. > **Voraussetzungen:** Das neue Projekt benötigt Laravel 11+, Livewire 3, Volt, Flux UI (Free oder Pro) und Tailwind CSS v4. --- ## Schritt 1 — Package-Verzeichnis kopieren ```bash # Das gesamte Package-Verzeichnis ins neue Projekt kopieren cp -r altes-projekt/package/ neues-projekt/package/ ``` --- ## Schritt 2 — composer.json anpassen ```json { "repositories": [ { "type": "path", "url": "package/flux-cms/core" } ], "require": { "flux-cms/core": "@dev", "intervention/image": "^3.0", "blade-ui-kit/blade-heroicons": "^2.0" }, "autoload": { "files": ["app/helpers.php"] } } ``` ```bash composer update ``` --- ## Schritt 3 — Konfiguration und Migrations ```bash # Config publizieren php artisan vendor:publish --tag=flux-cms-config # Migrations ausführen (erstellt alle flux_cms_* Tabellen) php artisan migrate ``` **Hinweis:** Falls das Quell-Projekt zusätzliche Migrations enthält (z.B. `add_detail_columns_to_flux_cms_downloads_table`), diese ebenfalls kopieren: ```bash cp altes-projekt/database/migrations/*flux_cms*.php neues-projekt/database/migrations/ php artisan migrate ``` --- ## Schritt 4 — Helper-Funktionen einrichten Datei `app/helpers.php` erstellen (vollständiger Inhalt in [SETUP.md](SETUP.md#21-datei-erstellen)). ```bash composer dump-autoload ``` --- ## Schritt 5 — Livewire-Komponenten kopieren ```bash mkdir -p app/Livewire/Admin/Cms # Aus Package-Referenz kopieren cp package/flux-cms/core/src/Helpers/MediaLibraryUploader.php app/Livewire/Admin/Cms/ cp package/flux-cms/core/src/Helpers/MediaPicker.php app/Livewire/Admin/Cms/ cp package/flux-cms/core/src/Helpers/MediaUploader.php app/Livewire/Admin/Cms/ ``` Namespace in allen drei Dateien anpassen: ```php namespace App\Livewire\Admin\Cms; ``` --- ## Schritt 6 — Admin-Views einrichten ```bash mkdir -p resources/views/livewire/admin/cms mkdir -p resources/views/components/layouts # Alle Admin-Views kopieren cp package/flux-cms/core/resources/views/admin-reference/cms/*.blade.php \ resources/views/livewire/admin/cms/ # Admin-Layout kopieren cp package/flux-cms/core/resources/views/admin-reference/layout-cms.blade.php \ resources/views/components/layouts/cms.blade.php ``` **Anpassen:** - `resources/views/components/layouts/cms.blade.php`: Branding/Logo anpassen - `route('dashboard')` im Layout ggf. anpassen (Redirect nach Login) --- ## Schritt 7 — Routes registrieren In `routes/web.php`: ```php use Livewire\Volt\Volt; Route::middleware(['auth'])->group(function () { Volt::route('admin/cms', 'admin.cms.dashboard')->name('cms.dashboard'); Volt::route('admin/cms/content', 'admin.cms.content-index')->name('cms.content.index'); Volt::route('admin/cms/media', 'admin.cms.media-index')->name('cms.media.index'); Volt::route('admin/cms/news', 'admin.cms.news-index')->name('cms.news.index'); Volt::route('admin/cms/industries', 'admin.cms.industries-index')->name('cms.industries.index'); Volt::route('admin/cms/faqs', 'admin.cms.faqs-index')->name('cms.faqs.index'); Volt::route('admin/cms/linkedin', 'admin.cms.linkedin-index')->name('cms.linkedin.index'); Volt::route('admin/cms/downloads', 'admin.cms.downloads-index')->name('cms.downloads.index'); Volt::route('admin/cms/team', 'admin.cms.team-index')->name('cms.team.index'); Volt::route('admin/cms/search-index', 'admin.cms.search-index')->name('cms.search-index'); }); ``` --- ## Schritt 8 — Storage-Link erstellen ```bash php artisan storage:link ``` --- ## Schritt 9 — Seeders kopieren (optional) Falls Inhalte aus dem alten Projekt übernommen werden sollen: ```bash # Referenz-Seeders als Ausgangspunkt cp package/flux-cms/core/database/seeders-reference/*.php database/seeders/ ``` Die Seeders müssen für das neue Projekt angepasst werden (andere Inhalte, andere Bilder). Ausführungsreihenfolge in `DatabaseSeeder`: ```php $this->call([ CmsContentSeeder::class, CmsMediaSeeder::class, CmsNewsItemSeeder::class, CmsIndustrySeeder::class, CmsFaqSeeder::class, CmsLinkedinPostSeeder::class, CmsDownloadSeeder::class, CmsSearchIndexSeeder::class, ]); ``` --- ## Schritt 10 — Medien migrieren (optional) Falls Medien aus dem alten Projekt übernommen werden sollen: ```bash # Storage-Verzeichnis kopieren cp -r altes-projekt/storage/app/public/cms/ neues-projekt/storage/app/public/cms/ ``` Dann den `CmsMediaSeeder` ausführen, um die DB-Einträge wiederherzustellen: ```bash php artisan db:seed --class=CmsMediaSeeder ``` --- ## Schritt 11 — Vite Build ```bash npm install npm run build # oder für Entwicklung: npm run dev ``` --- ## Schritt 12 — Tests einrichten (optional) ```bash # Referenz-Tests kopieren cp -r package/flux-cms/core/tests-reference/Feature/Cms tests/Feature/Cms # Tests ausführen php artisan test --filter=Cms ``` --- ## Checkliste - [ ] Package-Verzeichnis kopiert (`package/flux-cms/`) - [ ] `composer.json` angepasst (Repository, Require, Autoload) - [ ] `composer update` ausgeführt - [ ] Config publiziert (`vendor:publish --tag=flux-cms-config`) - [ ] Migrations ausgeführt (inkl. projektspezifische) - [ ] `app/helpers.php` erstellt - [ ] `composer dump-autoload` ausgeführt - [ ] Livewire-Komponenten kopiert + Namespace angepasst - [ ] Admin-Views kopiert - [ ] Layout angepasst (Branding, Route-Namen) - [ ] Routes registriert - [ ] `storage:link` ausgeführt - [ ] Seeders angepasst und ausgeführt (optional) - [ ] Medien migriert (optional) - [ ] Vite Build ausgeführt - [ ] Admin-Login testen: `/admin/cms` --- ## Häufige Probleme ### "View not found" für `livewire.admin.cms.*` → Prüfen ob Volt-Mount-Path `resources/views/livewire/` in `VoltServiceProvider` registriert ist. ### Bilder werden nicht angezeigt → `php artisan storage:link` ausführen. Prüfen ob `APP_URL` in `.env` korrekt gesetzt ist. ### "Route [cms.dashboard] not defined" → Sicherstellen dass alle CMS-Routes in `routes/web.php` registriert sind. ### Bilder hinter HTTPS-Proxy haben falsche URLs → In `bootstrap/app.php`: ```php ->withMiddleware(function (Middleware $middleware) { $middleware->trustProxies(at: '*'); }) ``` Und in `AppServiceProvider::boot()`: ```php if (request()->header('X-Forwarded-Proto') === 'https') { URL::forceScheme('https'); } ``` ### Flux UI `` fehlt → Das Layout `resources/views/components/layouts/cms.blade.php` muss `` enthalten (bereits im Referenz-Layout vorhanden). --- ## Weiterführende Dokumentation - [README.md](README.md) — Überblick, alle Features, Helper-Funktionen - [SETUP.md](SETUP.md) — Detaillierte Schritt-für-Schritt-Anleitung - [ARCHITECTURE.md](ARCHITECTURE.md) — Datenbankschema, Datenfluss, Komponenten-Architektur - [README-FILE-UPLOAD.md](README-FILE-UPLOAD.md) — Medienbibliothek im Detail