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

Dadatata Bundle Laravel Package

asoc/dadatata-bundle

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation Add the bundle to your composer.json:

    composer require asoc/dadatata-bundle:dev-master
    

    Enable the bundle in config/bundles.php:

    return [
        // ...
        AStateOfCode\DadatataBundle\DadatataBundle::class => ['all' => true],
    ];
    
  2. Configuration Define your Dadatata API credentials and default settings in config/packages/dadatata.yaml:

    dadatata:
        api_key: '%env(DADATATA_API_KEY)%'
        base_url: 'https://api.dadatata.example.com'
        default_filters: ['active', 'published']
    
  3. First Use Case Fetch filtered data in a controller:

    use AStateOfCode\DadatataBundle\Service\DadatataClient;
    
    class MyController extends AbstractController
    {
        public function index(DadatataClient $client)
        {
            $data = $client->get('products', ['filter' => ['category' => 'electronics']]);
            return $this->render('index.html.twig', ['data' => $data]);
        }
    }
    

Implementation Patterns

Core Workflows

  1. Service Integration Inject DadatataClient into controllers/services to interact with Dadatata:

    public function __construct(private DadatataClient $client) {}
    
  2. Configuration-Driven Filtering Use YAML/environment variables for reusable filters:

    dadatata:
        variants:
            featured: ['filter' => ['featured' => true], 'sort' => 'price']
    

    Apply in code:

    $client->get('products', ['variant' => 'featured']);
    
  3. Event-Driven Extensions Listen to dadatata.pre_request and dadatata.post_response events to modify requests/responses:

    // src/EventListener/DadatataListener.php
    public function onPreRequest(PreRequestEvent $event) {
        $event->getRequest()->setHeader('X-Custom-Header', 'value');
    }
    
  4. Twig Integration Pass Dadatata data directly to templates:

    {% for item in dadatata_data %}
        {{ item.name }} ({{ item.price }})
    {% endfor %}
    

Advanced Patterns

  • Caching Responses Cache API responses using Symfony’s cache system:

    $client->get('products', ['cache' => true, 'ttl' => 3600]);
    
  • Batch Processing Use getBatch() for paginated data:

    $batch = $client->getBatch('orders', ['limit' => 100]);
    foreach ($batch as $page) { /* ... */ }
    
  • Webhook Handling Validate and process Dadatata webhook payloads:

    public function handleWebhook(Request $request, DadatataClient $client) {
        $client->validateWebhook($request->getContent());
    }
    

Gotchas and Tips

Common Pitfalls

  1. Deprecated Symfony Version The bundle requires Symfony 2.4+, which is extremely outdated. Test thoroughly in a modern environment or fork the package for compatibility.

  2. Missing Documentation

    • No clear examples for complex queries (e.g., nested filters).
    • Undocumented error handling (e.g., rate limits, invalid responses).
    • Tip: Use var_dump($client->getLastResponse()) to debug raw API responses.
  3. Hardcoded Dependencies

    • Directly depends on asoc/dadatata (dev-master). Pin the version in composer.json:
      "require": {
          "asoc/dadatata": "dev-master#abc123"
      }
      
  4. No Type Safety Responses are returned as raw arrays. Cast to objects/DTOs for type safety:

    $data = json_decode(json_encode($client->get('products')), true);
    

Debugging Tips

  • Enable API Logging Configure Monolog to log Dadatata requests/responses:

    monolog:
        handlers:
            dadatata:
                type: stream
                path: "%kernel.logs_dir%/dadatata.log"
                level: debug
                channels: ["dadatata"]
    
  • Validate API Key Test connectivity early:

    try {
        $client->ping();
    } catch (\Exception $e) {
        // Handle auth failures
    }
    

Extension Points

  1. Custom Request Factories Override DadatataClient to add headers/middleware:

    // src/Service/CustomDadatataClient.php
    class CustomDadatataClient extends DadatataClient {
        protected function createRequest($method, $endpoint, $data) {
            $request = parent::createRequest($method, $endpoint, $data);
            $request->setHeader('X-App-Version', '1.0');
            return $request;
        }
    }
    
  2. Response Transformers Extend DadatataResponse to parse custom fields:

    class CustomResponse extends DadatataResponse {
        public function getFormattedPrice() {
            return $this->data['price'] * 1.1; // Apply tax
        }
    }
    
  3. Event Subscribers Modify responses globally:

    // config/services.yaml
    services:
        App\EventListener\DadatataSubscriber:
            tags:
                - { name: kernel.event_subscriber }
    

Configuration Quirks

  • Environment Variables Ensure DADATATA_API_KEY is set in .env or passed via parameters.yaml:

    parameters:
        dadatata.api_key: '%env(DADATATA_API_KEY)%'
    
  • Default Filters Override defaults per endpoint in config:

    dadatata:
        endpoints:
            products:
                default_filters: ['in_stock']
    
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.
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle