Last active
September 12, 2025 07:53
-
-
Save larsbo/5bba54b3ce8c7903b3ac96316cbbbf80 to your computer and use it in GitHub Desktop.
Laravel 12 + Filament v4 example repo creater
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
set -euo pipefail | |
APP_NAME="${1:-filament-v4-repro}" | |
rm -rf "${APP_NAME}" | |
echo "==> Creating Laravel app: ${APP_NAME}" | |
composer create-project laravel/laravel "${APP_NAME}" | |
cd "${APP_NAME}" | |
echo "==> Configure .env for SQLite + APP_URL" | |
mkdir -p database && touch database/database.sqlite | |
cp .env .env.backup | |
php -r ' | |
$env=file_get_contents(".env"); | |
$env=preg_replace("/^DB_CONNECTION=.*/m","DB_CONNECTION=sqlite",$env); | |
$env=preg_replace("/^DB_HOST=.*/m","DB_HOST=",$env); | |
$env=preg_replace("/^DB_PORT=.*/m","DB_PORT=",$env); | |
$env=preg_replace("/^DB_DATABASE=.*/m","DB_DATABASE=" . getcwd() . "/database/database.sqlite",$env); | |
$env=preg_replace("/^DB_USERNAME=.*/m","DB_USERNAME=",$env); | |
$env=preg_replace("/^DB_PASSWORD=.*/m","DB_PASSWORD=",$env); | |
if (!preg_match("/^APP_URL=/m",$env)) { $env .= PHP_EOL."APP_URL=http://127.0.0.1:8000".PHP_EOL; } | |
file_put_contents(".env",$env); | |
' | |
echo "==> Require Filament v4" | |
composer require filament/filament:"^4.0" -W | |
echo "==> Run Filament installer (panels)" | |
php artisan filament:install --panels -n | |
echo "==> Ensure provider is default() & registered" | |
P="app/Providers/Filament/AdminPanelProvider.php" | |
if [ -f "$P" ]; then | |
php -r ' | |
$p="'$P'"; | |
$s=file_get_contents($p); | |
if (strpos($s,"->default()")===false) { | |
$s=preg_replace("/return\\s*\\$panel\\s*\\n\\s*/","return \$panel\n ->default()\n ",$s,1); | |
file_put_contents($p,$s); | |
}' | |
fi | |
# Laravel 11: Provider wird in bootstrap/providers.php registriert. | |
if [ -f bootstrap/providers.php ] && ! grep -Fq "AdminPanelProvider::class" bootstrap/providers.php; then | |
awk 'BEGIN{a=0} /\]\s*;\s*$/ && !a{print " App\\Providers\\Filament\\AdminPanelProvider::class,"; a=1} {print}' bootstrap/providers.php > bp.tmp && mv bp.tmp bootstrap/providers.php | |
fi | |
echo "==> Key + migrate" | |
php artisan key:generate | |
php artisan migrate -n | |
echo "==> Create Filament admin user" | |
php artisan make:filament-user --name="Admin User" --email="[email protected]" --password="password" -n | |
echo "==> Demo model + resource" | |
php artisan make:model Post -m -n >/dev/null || true | |
php artisan make:filament-resource Post --generate --panel=admin -n >/dev/null || true | |
# simple posts migration if missing | |
if ! ls database/migrations/*create_posts_table*.php >/dev/null 2>&1; then | |
NOW=$(date +"%Y_%m_%d_%H%M%S") | |
cat > "database/migrations/${NOW}_create_posts_table.php" <<'PHP' | |
<?php | |
use Illuminate\Database\Migrations\Migration; | |
use Illuminate\Database\Schema\Blueprint; | |
use Illuminate\Support\Facades\Schema; | |
return new class extends Migration { | |
public function up(): void { | |
Schema::create('posts', function (Blueprint $table) { | |
$table->id(); $table->string('title'); $table->text('body')->nullable(); $table->timestamps(); | |
}); | |
} | |
public function down(): void { Schema::dropIfExists('posts'); } | |
}; | |
PHP | |
fi | |
php artisan migrate -n | |
echo "==> Clear caches" | |
php artisan optimize:clear | |
echo "==> README" | |
cat > README.md <<'MD' | |
# Filament v4 Minimal Reproduction | |
Run: | |
composer install | |
php artisan key:generate | |
touch database/database.sqlite | |
php artisan migrate | |
php artisan serve | |
Open http://127.0.0.1:8000/admin | |
Login: [email protected] / password | |
MD | |
echo "==> Git init (optional)" | |
git init >/dev/null || true | |
git add . | |
git commit -m "Filament v4 installation" >/dev/null || true | |
cat <<'DONE' | |
All set. | |
Start: php artisan serve | |
Panel: http://127.0.0.1:8000/admin | |
Login: [email protected] / password | |
DONE |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment