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

Laravel Dadata Fixed Laravel Package

laravel-dadata-sdk/laravel-dadata-fixed

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation Run:

    composer require laravel-dadata-sdk/laravel-dadata-fixed
    

    For Laravel <5.5, manually register DaDataServiceProvider in config/app.php.

  2. 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
    
  3. First Use Case Autocomplete a query (e.g., address):

    use MoveMoveIo\DaData\Facades\DaData;
    
    $results = DaData::suggest('address', 'ул.');
    dd($results);
    

Implementation Patterns

Core Workflows

  1. Suggestions (Autocomplete) Fetch suggestions for addresses, companies, or other entities:

    // Address suggestions
    $addresses = DaData::suggest('address', 'Москва, ул.');
    
    // Company suggestions
    $companies = DaData::suggest('company', 'ООО');
    
  2. Validation Validate and clean data (e.g., address):

    $cleaned = DaData::clean('address', 'г. Москва, ул. Ленина, д. 10');
    $validated = DaData::validate('address', $cleaned);
    
  3. Geocoding Convert addresses to coordinates:

    $geoData = DaData::geocode('address', 'ул. Арбат, д. 43');
    
  4. Batch Processing Process multiple queries efficiently:

    $batchResults = DaData::batch([
        ['method' => 'suggest', 'query' => 'address', 'query' => 'ул.'],
        ['method' => 'clean', 'query' => 'address', 'query' => 'г. Москва'],
    ]);
    

Integration Tips

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

Gotchas and Tips

Pitfalls

  1. 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();
    }
    
  2. Query Length Long queries may fail. Trim inputs:

    $query = Str::limit($request->input, 100);
    
  3. Locale Mismatch Ensure the locale in config matches your data (e.g., ru for Russian addresses).

  4. Deprecated Methods Avoid DaData::find() (if present in older versions). Use suggest + validate instead.

Debugging

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

Extension Points

  1. 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]);
            });
        });
    });
    
  2. Middleware Add middleware to validate DaData responses globally:

    DaData::middleware(function ($response) {
        if ($response->status !== 'success') {
            throw new \Exception('DaData validation failed');
        }
        return $response;
    });
    
  3. Testing Mock DaData in tests:

    $mock = Mockery::mock('overload:' . MoveMoveIo\DaData\DaData::class);
    $mock->shouldReceive('suggest')->andReturn(['data' => []]);
    
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