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],
];
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']
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]);
}
}
Service Integration
Inject DadatataClient into controllers/services to interact with Dadatata:
public function __construct(private DadatataClient $client) {}
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']);
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');
}
Twig Integration Pass Dadatata data directly to templates:
{% for item in dadatata_data %}
{{ item.name }} ({{ item.price }})
{% endfor %}
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());
}
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.
Missing Documentation
var_dump($client->getLastResponse()) to debug raw API responses.Hardcoded Dependencies
asoc/dadatata (dev-master). Pin the version in composer.json:
"require": {
"asoc/dadatata": "dev-master#abc123"
}
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);
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
}
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;
}
}
Response Transformers
Extend DadatataResponse to parse custom fields:
class CustomResponse extends DadatataResponse {
public function getFormattedPrice() {
return $this->data['price'] * 1.1; // Apply tax
}
}
Event Subscribers Modify responses globally:
// config/services.yaml
services:
App\EventListener\DadatataSubscriber:
tags:
- { name: kernel.event_subscriber }
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']
How can I help you explore Laravel packages today?