metapixel / postcodeapi
该包最新版本(1.0.0)的许可证信息不可用。
通用PHP邮编API。
1.0.0
2023-05-20 07:18 UTC
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.5
- symfony/event-dispatcher: ^6.2
Requires (Dev)
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.1
- symplify/easy-coding-standard: ^11.3
README
此包实现了一种基于邮编和门牌号检索地址详情的通用方法,以执行地址验证。此包的目标是拥有一个支持您最喜欢的邮编API提供商的单个包,这样您就可以轻松地在提供商之间切换,而无需重写所有代码或需要深入了解所有提供商,因为此包会为您处理这些。
此包是平台无关的,可以在任何现代PHP应用程序中使用。
提供商
以下是目前支持的提供商:
- Apicheck.nl
- Postcodeapi.nu
- Postcode.nl
- Postcodeservice.com
- Postcodes.nu
- Postcode.tech
- PostNL
- Pro6PP
- Spikkl
事件
使用Symfony事件调度器组件分发搜索前和搜索后事件。
PreSearchRequestEvent和PostSearchRequestEvent允许您添加一些额外的自定义逻辑,例如添加自己的缓存机制。
如果在PreSearchRequestEvent中设置了地址,则搜索方法将返回地址对象,这将阻止进行API调用。
class PostcodeAPISubscriber implements EventSubscriberInterface { public static function getSubscribedEvents() { return [ PreSearchRequestEvent::NAME => 'onPreSearchRequestEvent', ]; } public function onPreSearchRequestEvent(PreSearchRequestEvent $event): void { $cachedAddress = new Address(); $cachedAddress->setCountry('Nederland'); $cachedAddress->setCountryCode('nl'); $cachedAddress->setCity('Amsterdam'); $event->setAddress($cachedAddress); } }
待开发的功能
- 添加可选的缓存层以缓存地址响应(可能是数据库)?
- 在检索响应之前或之后添加事件。
使用示例
请参阅以下示例了解如何使用此包。请注意,始终将提供商提供为{locale}.{Provider class}。
use Metapixel\PostcodeAPI\Provider\nl_NL\Pro6PP; /** @var Pro6PP $provider */ $provider = ProviderFactory::create('nl_NL.Pro6PP'); $provider->setApiKey('YOUR_API_KEY'); // Optionally add an event subscriber or event listener. $subscriber = new PostcodeAPISubscriber(); $provider->dispatcher->addSubscriber($subscriber); $address = $provider->findByZipcodeAndHouseNumber('1068NM', '461');
搜索方法
$provider = ProviderFactory::create('nl_NL.Pro6PP'); $provider->setApiKey('YOUR_API_KEY'); $provider->find('1068NM'); $provider->findByZipcode('1068NM'); $provider->findByZipcodeAndHousenumber('1068NM', '461'); // Using the more dynamic SearchRequest entity $searchRequest = (new SearchRequest()) ->setZipcode($zipcode) ->setHouseNumber($houseNumber); $provider->findBySearchRequest($searchRequest);
如果不支持搜索方法,则抛出MethodNotSupportedException,例如,对于荷兰地址,通常需要邮编和门牌号字段,因此在不提供门牌号的情况下搜索可能会抛出MethodNotSupportedException异常。
SearchRequest实体用于更灵活的邮编API实现,这些实现需要更灵活地传递数据到API。