metapixel/postcodeapi

该包最新版本(1.0.0)的许可证信息不可用。

通用PHP邮编API。

1.0.0 2023-05-20 07:18 UTC

This package is auto-updated.

Last update: 2024-09-20 10:27:46 UTC


README

Tests

此包实现了一种基于邮编和门牌号检索地址详情的通用方法,以执行地址验证。此包的目标是拥有一个支持您最喜欢的邮编API提供商的单个包,这样您就可以轻松地在提供商之间切换,而无需重写所有代码或需要深入了解所有提供商,因为此包会为您处理这些。

此包是平台无关的,可以在任何现代PHP应用程序中使用。

提供商

以下是目前支持的提供商:

事件

使用Symfony事件调度器组件分发搜索前和搜索后事件。

PreSearchRequestEventPostSearchRequestEvent允许您添加一些额外的自定义逻辑,例如添加自己的缓存机制。

如果在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。

捐赠


如果您喜欢这个项目——或者只是想表现得大方,请考虑为我买一杯啤酒。干杯!🍻