Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Symfony Extra Laravel Package

axstrad/symfony-extra

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation Add the package via Composer:

    composer require axstrad/symfony-extra
    

    No additional configuration is required—it’s a standalone utility package.

  2. 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
            // ...
        }
    }
    
  3. Key Entry Points

    • Traits: Use RequestValidator, ResponseBuilder, or LoggerHelper in any class.
    • Abstract Classes: Extend AbstractController or AbstractCommand for pre-built functionality.
    • Symfony Components: Directly access Symfony’s Validator, Serializer, or HttpFoundation via traits.

Implementation Patterns

Workflows

  1. 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
        }
    }
    
  2. 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 }
        }
    }
    
  3. 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}");
            // ...
        }
    }
    

Integration Tips

  • Laravel-Symfony Bridge: Use Symfony’s 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
        }
    }
    
  • Dependency Injection: Bind Symfony services (e.g., Validator) to Laravel’s container via AppServiceProvider:
    $this->app->singleton(ValidatorInterface::class, function ($app) {
        return ValidatorBuilder::create()
            ->enableAutoMapping()
            ->getValidator();
    });
    
  • Command Bus: Extend 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...");
            // ...
        }
    }
    

Gotchas and Tips

Pitfalls

  1. Symfony Version Mismatch

    • The package assumes Symfony components (e.g., symfony/validator) are installed. If missing, add them manually:
      composer require symfony/validator symfony/serializer
      
    • Debug Tip: Check composer.json for required Symfony packages if traits fail to load.
  2. Laravel-Symfony Namespace Collisions

    • Avoid naming conflicts by prefixing classes (e.g., Axstrad\SymfonyExtra\Traits\RequestValidator).
    • Fix: Use fully qualified trait names or aliases in composer.json:
      "autoload": {
          "psr-4": {
              "App\\": "app/",
              "Axstrad\\": "vendor/axstrad/symfony-extra/src/"
          }
      }
      
  3. Overhead in Simple Projects

    • The package adds abstraction layers. For small projects, consider using Symfony components directly (e.g., validator.validate()).

Debugging

  • 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;
    }
    

Extension Points

  1. 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([]))
        }
    }
    
  2. 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
    });
    
  3. Logging Context Enhance LoggerHelper to include Laravel’s context:

    $this->logger->info("Action", [
        'user_id' => auth()->id(),
        'ip' => request()->ip(),
    ]);
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
terminal42/code-quality-tools
codifyo/ts-generator-bundle
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky
spatie/mailcoach-vapor