Weave 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

Variator Bundle Laravel Package

coshi/variator-bundle

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation:

    composer require coshi/variator-bundle
    

    Register the bundle in config/bundles.php:

    return [
        // ...
        Coshi\VariatorBundle\CoshiVariatorBundle::class => ['all' => true],
    ];
    
  2. First Use Case: Define a simple variation in config/packages/coshi_variator.yaml:

    coshi_variator:
        variations:
            random_number:
                type: int
                min: 1
                max: 100
    

    Fetch variations via the builder:

    $builder = $this->container->get('coshi.variator_bundle.builder');
    $variations = $builder->build(['random_number']);
    $randomValue = $variations['random_number'];
    

Implementation Patterns

Core Workflows

  1. Service-Based Callbacks: Use service methods for dynamic values (e.g., fetching IDs from a repository):

    coshi_variator:
        variations:
            user_ids:
                type: iteratorResult
                callback: ['@user.repository', 'getActiveUserIds']
    
  2. Chunked Data Fetching: Optimize large datasets with chunked: true and chunk_size:

    coshi_variator:
        variations:
            paginated_ids:
                type: iteratorResult
                callback: ['@product.repository', 'findAllIds']
                chunked: true
                chunk_size: 500
    
  3. Conditional Variations: Combine with Symfony’s dependency injection to pass runtime data:

    $config = [
        'dynamic_range' => [
            'type' => 'int',
            'min' => 0,
            'max' => ['@some.service', 'getDynamicMax', ['arg1', 'arg2']],
        ],
    ];
    

Integration Tips

  • Doctrine Integration: Use iteratorResult with Doctrine\ORM\QueryBuilder for seamless pagination:

    $qb = $entityManager->getRepository(User::class)->createQueryBuilder('u');
    $config = ['users' => ['type' => 'iteratorResult', 'callback' => [$qb, 'getQuery']]];
    
  • Event-Driven Updates: Rebuild variations dynamically in event listeners (e.g., KernelEvents::REQUEST).


Gotchas and Tips

Pitfalls

  1. Deprecated Symfony Version: The bundle was last updated in 2016 and may not support Symfony 5/6+. Test thoroughly or fork for compatibility.

  2. Lazy-Loading Overhead: iteratorResult with chunked: true adds SQL overhead. Benchmark for large datasets.

  3. Service Unavailability: If a callback service fails, the builder throws an exception. Handle gracefully:

    try {
        $builder->build($config);
    } catch (\Exception $e) {
        $this->logger->error('Variator failed', ['error' => $e->getMessage()]);
        // Fallback logic
    }
    

Debugging

  • Configuration Validation: Use var_dump($builder->getConfig()) to verify loaded variations.

  • Chunking Issues: If chunked data appears incomplete, check:

    • The repository method returns a valid IterableResult.
    • chunk_size aligns with your database’s LIMIT/OFFSET behavior.

Extension Points

  1. Custom Variation Types: Extend the builder to support new types (e.g., array, float):

    // In a custom service
    $builder->addVariationType('custom', function ($config) {
        return new CustomVariation($config);
    });
    
  2. Configuration Overrides: Override bundle config via environment variables (e.g., .env):

    # config/packages/coshi_variator.yaml
    coshi_variator:
        variations: '%env(resolve:VARIATOR_CONFIG)%'
    
  3. Caching: Cache variations for performance (e.g., with Symfony’s cache system):

    $cache = $container->get('coshi.variator_bundle.cache');
    $variations = $cache->get('variations_key', function() use ($builder) {
        return $builder->build($config);
    });
    
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.
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator