laravel-dadata-sdk/laravel-dadata-fixed
Installation Run:
composer require laravel-dadata-sdk/laravel-dadata-fixed
For Laravel <5.5, manually register DaDataServiceProvider in config/app.php.
Publish Config Publish the default config:
php artisan vendor:publish --provider="MoveMoveIo\DaData\DaDataServiceProvider"
Update .env with your DaData API key:
DADATA_API_KEY=your_api_key_here
First Use Case Autocomplete a query (e.g., address):
use MoveMoveIo\DaData\Facades\DaData;
$results = DaData::suggest('address', 'ул.');
dd($results);
Suggestions (Autocomplete) Fetch suggestions for addresses, companies, or other entities:
// Address suggestions
$addresses = DaData::suggest('address', 'Москва, ул.');
// Company suggestions
$companies = DaData::suggest('company', 'ООО');
Validation Validate and clean data (e.g., address):
$cleaned = DaData::clean('address', 'г. Москва, ул. Ленина, д. 10');
$validated = DaData::validate('address', $cleaned);
Geocoding Convert addresses to coordinates:
$geoData = DaData::geocode('address', 'ул. Арбат, д. 43');
Batch Processing Process multiple queries efficiently:
$batchResults = DaData::batch([
['method' => 'suggest', 'query' => 'address', 'query' => 'ул.'],
['method' => 'clean', 'query' => 'address', 'query' => 'г. Москва'],
]);
Form Handling Use DaData for real-time validation in forms (e.g., address fields):
public function store(Request $request) {
$cleanedAddress = DaData::clean('address', $request->address);
// Save $cleanedAddress to DB
}
API Responses Normalize DaData responses in API controllers:
public function search(Request $request) {
$results = DaData::suggest('address', $request->query);
return response()->json($results->data);
}
Caching Cache frequent queries (e.g., autocomplete) to reduce API calls:
$results = Cache::remember("dadata_{$query}", now()->addHours(1), function() use ($query) {
return DaData::suggest('address', $query);
});
Rate Limits DaData has strict rate limits. Monitor usage via:
$rateLimit = DaData::getRateLimit(); // Check remaining requests
Implement exponential backoff for retries:
try {
$result = DaData::suggest('address', 'ул.');
} catch (RateLimitExceededException $e) {
sleep(2); // Wait before retrying
retry();
}
Query Length Long queries may fail. Trim inputs:
$query = Str::limit($request->input, 100);
Locale Mismatch
Ensure the locale in config matches your data (e.g., ru for Russian addresses).
Deprecated Methods
Avoid DaData::find() (if present in older versions). Use suggest + validate instead.
Enable Debugging
Set debug to true in config/dadata.php to log API responses:
'debug' => env('DADATA_DEBUG', false),
Error Handling Catch specific exceptions:
try {
$result = DaData::clean('address', 'invalid');
} catch (InvalidQueryException $e) {
// Handle invalid input
} catch (ApiException $e) {
// Handle API errors
}
Custom Responses
Extend the DaData facade to transform responses:
DaData::extend(function ($client) {
$client->afterResponse(function ($response) {
return collect($response->data)->map(function ($item) {
return (object) array_merge($item, ['custom_field' => true]);
});
});
});
Middleware Add middleware to validate DaData responses globally:
DaData::middleware(function ($response) {
if ($response->status !== 'success') {
throw new \Exception('DaData validation failed');
}
return $response;
});
Testing Mock DaData in tests:
$mock = Mockery::mock('overload:' . MoveMoveIo\DaData\DaData::class);
$mock->shouldReceive('suggest')->andReturn(['data' => []]);
How can I help you explore Laravel packages today?