alexskoromnui/symfony-entity-serve-classes-generator
Installation Add the package to your Laravel project via Composer:
composer require alexskoromnui/symfony-entity-serve-classes-generator
(Note: This package is originally Symfony-focused, but Laravel developers can adapt it via Symfony’s HttpKernel or standalone usage.)
Understand the Core Purpose The package generates server-side classes (e.g., DTOs, API responses) from entity definitions (e.g., Doctrine ORM entities). It’s useful for:
First Use Case: Generate a Response Class
User.php).UserResponse.php).use AlexSk\Generator\Generator;
$generator = new Generator();
$generator->generateFromEntity(User::class, 'app/Responses/UserResponse.php');
Model-to-Response Pipeline
#[ApiResource] or custom attributes).post-update Composer script or Artisan command:
// app/Console/Commands/GenerateResponses.php
public function handle() {
$generator = new Generator();
$generator->generateFromEntities([
User::class => 'app/Responses/UserResponse.php',
Post::class => 'app/Responses/PostResponse.php',
]);
}
return new UserResponse(User::find(1));
Integration with API Resources
JsonResource with generated classes:
public function toArray($request) {
return new UserResponse($this->resource);
}
Dynamic Generation
bootstrap/cache/ to avoid runtime overhead.ServiceProvider to auto-load responses:
$this->app->bind(UserResponse::class, function () {
return new UserResponse(User::find(1));
});
ModelEvent listeners.UserResponse instead of UserDto).Doctrine Dependency
Mapping\ClassMetadata or write a bridge layer.getTable() from Eloquent instead of Doctrine’s metadata.Runtime Overhead
post-update Composer script.Attribute Conflicts
#[ApiResource] vs. #[AsRequest]).$metadata = $generator->getMetadata(User::class);
\Log::info($metadata);
Resources/views/).Custom Field Mappings
getPropertyMappings() to handle Laravel-specific fields (e.g., timestamps):
$generator->setPropertyMappings([
'created_at' => ['type' => 'datetime', 'serialized_name' => 'createdAt'],
]);
Add Methods to Generated Classes
{# app/Responses/UserResponse.php.twig #}
public function isAdmin(): bool {
return $this->role === 'admin';
}
Conditional Generation
#[HideFromApi] or similar attributes:
if (in_array(HideFromApi::class, class_uses_recursive($entityClass))) {
return;
}
App\Responses).storage/ or app/).How can I help you explore Laravel packages today?