6.9 KiB
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
# Das gesamte Package-Verzeichnis ins neue Projekt kopieren
cp -r altes-projekt/package/ neues-projekt/package/
Schritt 2 — composer.json anpassen
{
"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"]
}
}
composer update
Schritt 3 — Konfiguration und Migrations
# 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:
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).
composer dump-autoload
Schritt 5 — Livewire-Komponenten kopieren
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:
namespace App\Livewire\Admin\Cms;
Schritt 6 — Admin-Views einrichten
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 anpassenroute('dashboard')im Layout ggf. anpassen (Redirect nach Login)
Schritt 7 — Routes registrieren
In routes/web.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
php artisan storage:link
Schritt 9 — Seeders kopieren (optional)
Falls Inhalte aus dem alten Projekt übernommen werden sollen:
# 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:
$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:
# 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:
php artisan db:seed --class=CmsMediaSeeder
Schritt 11 — Vite Build
npm install
npm run build
# oder für Entwicklung:
npm run dev
Schritt 12 — Tests einrichten (optional)
# 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.jsonangepasst (Repository, Require, Autoload)composer updateausgeführt- Config publiziert (
vendor:publish --tag=flux-cms-config) - Migrations ausgeführt (inkl. projektspezifische)
app/helpers.phperstelltcomposer dump-autoloadausgeführt- Livewire-Komponenten kopiert + Namespace angepasst
- Admin-Views kopiert
- Layout angepasst (Branding, Route-Namen)
- Routes registriert
storage:linkausgefü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:
->withMiddleware(function (Middleware $middleware) {
$middleware->trustProxies(at: '*');
})
Und in AppServiceProvider::boot():
if (request()->header('X-Forwarded-Proto') === 'https') {
URL::forceScheme('https');
}
Flux UI <flux:toast /> fehlt
→ Das Layout resources/views/components/layouts/cms.blade.php muss <flux:toast /> enthalten (bereits im Referenz-Layout vorhanden).
Weiterführende Dokumentation
- README.md — Überblick, alle Features, Helper-Funktionen
- SETUP.md — Detaillierte Schritt-für-Schritt-Anleitung
- ARCHITECTURE.md — Datenbankschema, Datenfluss, Komponenten-Architektur
- README-FILE-UPLOAD.md — Medienbibliothek im Detail