jdkweb / rdw-api-filament
Filament extension for rdw-api. rdw-api is a wrapper for RDW API
Requires
- php: >=8.1
- filament/filament: ^3.0
- jdkweb/rdw-api: ^1.2.0
README
Laravel wrapper for the Dutch open mobility data. Basic Vehicle Registration All non-sensitive data of the Dutch vehicle fleet.
Laravel application to get vehicle information from opendata.rdw.nl or overheid.io.
This package extends jdkweb/rdw-api to be used in Filament.
Depends on:
Github: jdkweb/rdw-api
packagist: jdkweb/rdw-api
Table of contents
Installation
Requires PHP 8.1 and Laravel 10 and Filament 3.0 or higher
Install the package via composer:
composer require jdkweb/rdw-api-filament
Translation
Translations available:
See:
Github: jdkweb/rdw-api
Packagist: jdkweb/rdw-api
Usage
Form Field
Basic usage
use Jdkweb\RdwApi\Filament\Forms\Components\RdwApiLicenseplate; ... RdwApiLicenseplate::make('licenseplate') ->label(__('rdw-api::form.licenseplateLabel')) ->default('155GV3') ->licenseplateStyle() // Basic style Dutch licenseplate
- Request to the active API (default: opendata.rdw.nl) \
- All RDW endpoints are selected
All options used
use Jdkweb\RdwApi\Filament\Enums\Endpoints; use Jdkweb\RdwApi\Filament\Enums\OutputFormats; use Jdkweb\RdwApi\Filament\Forms\Components\RdwApiLicenseplate; ... RdwApiLicenseplate::make('licenseplate') ->label(__('rdw-api::form.licenseplateLabel')) ->default('155GV3') ->setApi(1) ->setEndpoints(Endpoints::cases()) ->setOutputformat(OutputFormats::ARRAY) ->setLanguage('en') ->licenseplateStyle()
Options
Select other API than default
->setApi(int|string|\Closure) // 0 | opendata | 1 | overheid
Overwrite the config settings
- 0 or 'opendata' for using the RDW API opendata.rdw.nl [default]
- 1 or 'overheidio' for using the overheid.io API
Select endpoints for request
use \Jdkweb\RdwApi\Enums\Endpoints; ... ->setEndpoints(string|array|Endpoints|\Closure) #examples # one string ->setEndpoints('vehicle') # array with strings ->setEndpoints([ 'vehicle', 'fuel' ]) # array with endpoints ->setEndpoints([ Endpoints::VEHICLE, Endpoints::FUEL, ]) # closure ->setEndpoints(fn() => ($when ? Endpoints::cases() : Endpoints::BODYWORK)) # select all ->setEndpoints(Endpoints::cases())
Available endpoints (not case sensitive):
- Endpoints::VEHICLE | vehicle
- Endpoints::VEHICLE_CLASS |vehicle_class
- Endpoints::FUEL | fuel
- Endpoints::BODYWORK | bodywork
- Endpoints::BODYWORK_SPECIFIC | bodywork_specific
- Endpoints::AXLES | axles
- Endpoints::cases() [default]
Format of the response output
->outputFormat(string|OutputFormat|\Closure) #examples ->outputFormat('array') ->outputFormat(OutputFormat::ARRAY) ->setOutputformat(fn(Forms\Get $get) => $get('output_format'))
- OutputFormat::ARRAY | array [default]
- OutputFormat::JSON | json
- OutputFormat::AML | xml
by using this method the response contains a formated output. see RdwApiResponse
Set output language
->setLanguage(string|\Closure)
Force output language, so form can be English and RDW response in Dutch.
Available:
- nl
- en
Basic style for Dutch licenseplate
->licenseplateStyle() ->licenseplateStyle('taxi') // blue taxi plate
Handle RDW response
RDW API request with to filament form data
public function handleForm(string $form): void { $result = RdwApiRequest::make() ->setFormData($this->form) ->fetch();
RDW Response
Response data form the RDW API request in $result:
Jdkweb\RdwApi\Controllers\RdwApiResponse {#2800 ▼ +response: array:2 [▶] // API response +request: {#3036 ▶} // Request vars +output: array:2 [▶] // Formated output when setOutputFormat is used +status: true }
See rdw-api for the response methods
Example
Create Filament form
use Jdkweb\RdwApi\Filament\Enums\Endpoints; use Jdkweb\RdwApi\Filament\Enums\OutputFormats; use Jdkweb\RdwApi\Controllers\RdwApiRequest; use Jdkweb\RdwApi\Filament\Forms\Components\RdwApiLicenseplate; use Jdkweb\RdwApi\Filament\Forms\Components\RdwApiResponse; ... /** * Dataset Selectbox */ Forms\Components\Select::make('datasets') ->label(__('rdw-api::form.selectdatasetLabel')) ->multiple() ->options(Endpoints::class) ->default([ Endpoints::VEHICLE, Endpoints::FUEL ]) ->hintAction(selectAllDatasets()) // Helper function for select all link ->reactive() // Enables reactivity ->required(), //----------------------------------------------------------------------------- /** * Licenseplate * * Extra reactive data for Endpoints and outputFormat */ RdwApiLicenseplate::make('licenseplate') ->label(__('rdw-api::form.licenseplateLabel')) ->setOutputformat(fn(Forms\Get $get) => $get('output_format')) ->setEndpoints(fn(Forms\Get $get) => $get('datasets')) ->required() ->licenseplateStyle() ->live(true) ->afterStateUpdated(function ($state, Forms\Set $set) use ($form) { $result = \Jdkweb\RdwApi\Controllers\RdwApiRequest::make() ->setFormData($form) ->fetch(); if ($result->status === false) { return; } // Handle data // $set('merk', $result->quickSearch('merk')); // $set('voertuigsoort', $result->quickSearch('voertuigsoort')); // $set('brandstof_omschrijving', $result->quickSearch('1.brandstof_omschrijving')); // type or hybrid: first type // $set('aslast', $result->quickSearch('2.wettelijk_toegestane_maximum_aslast')); // second axle // ... }), //----------------------------------------------------------------------------- /** * Selectbox for the output format */ Forms\Components\Select::make('output_format') ->label(__('rdw-api::form.formatLabel')) ->required() ->default(OutputFormats::XML) ->options(OutputFormats::class) ->reactive() // Enables reactivity
Handle Form data
... public function handleForm(string $form): void { // Get RDW data $result = RdwApiRequest::make() ->setFormData($this->form) ->fetch(); ... .. // Handle data format switch ($data->request->outputformat) { case OutputFormat::XML: $data->toXml(true) ...
Demo
There is a demo available to test this wrapper
Two options to use the demo:
-
.env
RDW_API_DEMO=1
Add this value to .env -
config
Import the rwd-api config en set the value to 1 (Installation)rdw_api_demo => 1,
Demo: 0 = Off | 1 = On
Demo url
http://[domainname]/rdw-api/demo