memio/pretty-printer
Memio PrettyPrinter is an opinionated PHP code generator that takes a Model and uses a TemplateEngine to produce “pretty” code. Outputs a string you can save to files, print to console, or render in web pages.
Enhanced Developer Experience:
make generate, make test-generated), aligning with Laravel’s ecosystem (e.g., Laravel’s own Makefile patterns).Laravel Synergy (Updated):
phpstan.neon) to validate generated code against project-specific rules (e.g., custom Eloquent constraints).Route::resource() to Route::apiResource() in generated controllers).collect($model)->toArray()) to generated boilerplate, reducing manual imports.laravel preset) out-of-the-box.Limitations (Updated):
phpstan, rector, swiss-knife) may increase build times and require maintenance (e.g., updating rulesets).Core Laravel Compatibility:
make generate:api User → triggers php artisan generate:api User).phpstan, rector) are already used in Laravel’s ecosystem (e.g., Laravel Shift uses Rector for migrations).Dependencies (Updated):
Testing (Updated):
rules.phpstan.neon).rector/sets/generated-code.yaml).tests/Feature/GeneratedCodeTest.php to assert generated files match expectations (e.g., assertFileExists(app_path('Http/Controllers/UserController.php'))).Generated Code Quality (Updated):
ignoreFiles in phpstan.neon).skip rules for generated code (e.g., @skip(Rector\Rector\*GeneratedCode)).tmp/generated/) and copy only the final output.Template Maintenance (Updated):
composer.json (e.g., php-cs-fixer: ^3.0)..php-cs-fixer.dist.php to explicitly define Laravel-compatible rules.docker-compose.yml (e.g., resources/views/templates:/app/resources/views/templates).Build Process Overhead (Updated):
make generate --jobs=4).Makefile.local for non-Docker setups (e.g., make generate-local).Dependency Isolation (Updated):
dev Composer platform (e.g., require-dev phpstan/phpstan:^1.0 --platform).config/rector.php to scope Rector rules to generated directories only.main) or on every PR?#[Spatie\LaravelModelGenerator\Attributes\ApiResource])?Route::controller() → Route::apiResource())?inertiajs/inertia-laravel)?Laravel Ecosystem (Updated):
phpstan.neon to enforce project-wide rules (e.g., disallow new Collection() in generated code).Route::get() to Route::get()->name()).swissknife()->eloquent($model)->toArray()).docker-compose.yml.on: [push] with if: github.ref == 'refs/heads/main').Template Engine (Updated):
{{ to {{ }} spacing).generate:php generate:api generate:livewire
generate:php
@php artisan generate:php User Post
generate:api
@php artisan generate:api User --resource=true
test-generated:
@phpstan analyse tmp/generated/ --level=max
@./vendor/bin/rector process tmp/generated/ --dry-run
Tooling:
How can I help you explore Laravel packages today?