Installation Add the package via Composer:
composer require axstrad/symfony-extra
No additional configuration is required—it’s a standalone utility package.
First Use Case: Abstract Controller
Extend Axstrad\SymfonyExtra\AbstractController in a Laravel controller to leverage built-in Symfony component helpers:
use Axstrad\SymfonyExtra\AbstractController;
class UserController extends AbstractController
{
public function index()
{
$this->validateRequest(); // Built-in request validation
// ...
}
}
Key Entry Points
RequestValidator, ResponseBuilder, or LoggerHelper in any class.AbstractController or AbstractCommand for pre-built functionality.Validator, Serializer, or HttpFoundation via traits.Request Validation
Use RequestValidator trait to validate incoming requests with Symfony’s Validator:
use Axstrad\SymfonyExtra\Traits\RequestValidator;
class UserController
{
use RequestValidator;
public function store(Request $request)
{
$this->validateRequest($request, User::class); // Validates against User entity constraints
}
}
Response Handling
Standardize API responses with ResponseBuilder:
use Axstrad\SymfonyExtra\Traits\ResponseBuilder;
class UserController
{
use ResponseBuilder;
public function show(User $user)
{
return $this->successResponse($user); // Returns JSON: { "success": true, "data": $user }
}
}
Logging
Integrate Symfony’s Logger via LoggerHelper:
use Axstrad\SymfonyExtra\Traits\LoggerHelper;
class UserService
{
use LoggerHelper;
public function __construct(private LoggerInterface $logger) {}
public function delete(User $user)
{
$this->logger->info("Deleted user {$user->id}");
// ...
}
}
Serializer for complex data transformation:
use Axstrad\SymfonyExtra\Traits\SerializerHelper;
class UserController
{
use SerializerHelper;
public function show(User $user)
{
return $this->serialize($user, 'json'); // Serializes to JSON
}
}
Validator) to Laravel’s container via AppServiceProvider:
$this->app->singleton(ValidatorInterface::class, function ($app) {
return ValidatorBuilder::create()
->enableAutoMapping()
->getValidator();
});
AbstractCommand for Artisan commands with built-in logging/validation:
use Axstrad\SymfonyExtra\AbstractCommand;
class SendEmailCommand extends AbstractCommand
{
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->logger->info("Sending email...");
// ...
}
}
Symfony Version Mismatch
symfony/validator) are installed. If missing, add them manually:
composer require symfony/validator symfony/serializer
composer.json for required Symfony packages if traits fail to load.Laravel-Symfony Namespace Collisions
Axstrad\SymfonyExtra\Traits\RequestValidator).composer.json:
"autoload": {
"psr-4": {
"App\\": "app/",
"Axstrad\\": "vendor/axstrad/symfony-extra/src/"
}
}
Overhead in Simple Projects
validator.validate()).Trait Not Found? Verify the package is autoloaded:
composer dump-autoload
Clear Laravel’s cache:
php artisan cache:clear
php artisan config:clear
Validator Errors
Ensure constraints are defined in your entities (e.g., #[Assert\NotBlank]). Example:
use Symfony\Component\Validator\Constraints as Assert;
class User
{
#[Assert\Email]
public string $email;
}
Custom Traits
Extend existing traits (e.g., RequestValidator) to add Laravel-specific logic:
use Axstrad\SymfonyExtra\Traits\RequestValidator;
trait CustomRequestValidator extends RequestValidator
{
public function validateLaravelRules(Request $request, string $class)
{
$this->validateRequest($request, $class);
// Add Laravel-specific rules (e.g., $request->validate([]))
}
}
Symfony Component Swapping
Replace Symfony services (e.g., Validator) with Laravel equivalents in the container:
$this->app->bind(ValidatorInterface::class, function ($app) {
return Validator::make([], [])->getValidator(); // Hypothetical Laravel bridge
});
Logging Context
Enhance LoggerHelper to include Laravel’s context:
$this->logger->info("Action", [
'user_id' => auth()->id(),
'ip' => request()->ip(),
]);
How can I help you explore Laravel packages today?