silalahi/wilayah-php
Composer 安装命令:
composer require silalahi/wilayah-php
包简介
PHP wrapper for wilayah.id API - Indonesian administrative regions data (provinces, regencies, districts, villages)
README 文档
README
A PHP wrapper for the wilayah.id API, providing easy access to Indonesian administrative regions data including provinces, regencies/cities, districts, and villages.
Features
- 🎯 Clean, fluent API with separated resource classes
- 📦 PSR-4 autoloading compatible
- 🛡️ Exception handling
- 💡 Type hints for better IDE support
- 🔍 Search by name or code
- 🇮🇩 Multi-byte safe (supports Indonesian characters)
- 🚀 Supports PHP 7.4 and above
- 📝 Zero dependencies (except ext-json)
Installation
You can install this package via Composer:
composer require silalahi/wilayah-php
Usage
Basic Usage
<?php require 'vendor/autoload.php'; use Silalahi\Wilayah\Client; use Silalahi\Wilayah\Exceptions\WilayahException; // Create client instance $wilayah = new Client(); try { // Get all provinces $provinces = $wilayah->provinces()->all(); print_r($provinces); // Get regencies from DKI Jakarta (code: 31) $regencies = $wilayah->regencies()->byProvince('31'); print_r($regencies); // Get districts from Jakarta Selatan (code: 31.74) $districts = $wilayah->districts()->byRegency('31.74'); print_r($districts); // Get villages from Jagakarsa (code: 31.74.09) $villages = $wilayah->villages()->byDistrict('31.74.09'); print_r($villages); } catch (WilayahException $e) { echo "Error: " . $e->getMessage(); }
Response Format
All methods return an array with the following structure:
[
'data' => [
[
'code' => '31',
'name' => 'DKI Jakarta'
],
// ... more items
],
'meta' => [
'administrative_area_level' => 1,
'updated_at' => '2025-07-04'
]
]
Working with Provinces
// Get all provinces $provinces = $wilayah->provinces()->all(); // Find province by code $province = $wilayah->provinces()->find('31'); // Find province by name $province = $wilayah->provinces()->findByName('Jakarta'); // Returns: ['code' => '31', 'name' => 'DKI Jakarta'] // Search provinces (returns multiple results) $provinces = $wilayah->provinces()->search('jawa'); // Returns all provinces containing "jawa" in their name
Working with Regencies
// Get regencies in a province $regencies = $wilayah->regencies()->byProvince('31'); // Find regency by code $regency = $wilayah->regencies()->find('31', '31.74'); // Find regency by name within a province $regency = $wilayah->regencies()->findByName('31', 'Jakarta Selatan'); // Find regency by name across all provinces (slower) $regency = $wilayah->regencies()->findByNameGlobal('Bandung'); // Search regencies within a province $regencies = $wilayah->regencies()->search('31', 'jakarta');
Working with Districts
// Get districts in a regency $districts = $wilayah->districts()->byRegency('31.74'); // Find district by code $district = $wilayah->districts()->find('31.74', '31.74.09'); // Find district by name $district = $wilayah->districts()->findByName('31.74', 'Jagakarsa'); // Search districts within a regency $districts = $wilayah->districts()->search('31.74', 'cilandak');
Working with Villages
// Get villages in a district $villages = $wilayah->villages()->byDistrict('31.74.09'); // Find village by code $village = $wilayah->villages()->find('31.74.09', '31.74.09.1001'); // Find village by name $village = $wilayah->villages()->findByName('31.74.09', 'Cipedak'); // Search villages within a district $villages = $wilayah->villages()->search('31.74.09', 'raya');
Fluent Chaining Example
// Find a complete address hierarchy $wilayah = new Client(); // Start from province $province = $wilayah->provinces()->findByName('Jakarta'); if ($province) { // Get regency within that province $regency = $wilayah->regencies()->findByName($province['code'], 'Jakarta Selatan'); if ($regency) { // Get district within that regency $district = $wilayah->districts()->findByName($regency['code'], 'Jagakarsa'); if ($district) { // Get all villages in that district $villages = $wilayah->villages()->byDistrict($district['code']); } } }
Setting Timeout
// Set timeout in constructor (default is 30 seconds) $wilayah = new Client(60); // Or use setter method $wilayah->setTimeout(60);
API Reference
Client Methods
provinces(): Province- Get Province resourceregencies(): Regency- Get Regency resourcedistricts(): District- Get District resourcevillages(): Village- Get Village resourcesetTimeout(int $timeout): self- Set request timeout
Province Resource
all(): array- Get all provincesfind(string $code): ?array- Find province by codefindByName(string $name): ?array- Find province by namesearch(string $name): array- Search provinces by name pattern
Regency Resource
byProvince(string $provinceCode): array- Get regencies by provincefind(string $provinceCode, string $code): ?array- Find regency by codefindByName(string $provinceCode, string $name): ?array- Find regency by namefindByNameGlobal(string $name): ?array- Find regency across all provincessearch(string $provinceCode, string $name): array- Search regencies
District Resource
byRegency(string $regencyCode): array- Get districts by regencyfind(string $regencyCode, string $code): ?array- Find district by codefindByName(string $regencyCode, string $name): ?array- Find district by namesearch(string $regencyCode, string $name): array- Search districts
Village Resource
byDistrict(string $districtCode): array- Get villages by districtfind(string $districtCode, string $code): ?array- Find village by codefindByName(string $districtCode, string $name): ?array- Find village by namesearch(string $districtCode, string $name): array- Search villages
Error Handling
The library throws WilayahException when an error occurs. Always wrap your API calls in try-catch blocks:
use Silalahi\Wilayah\Exceptions\WilayahException; try { $provinces = $wilayah->provinces()->all(); } catch (WilayahException $e) { // Handle the error error_log($e->getMessage()); }
Testing
composer test
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This package is open-sourced software licensed under the MIT license.
silalahi/wilayah-php 适用场景与选型建议
silalahi/wilayah-php 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 3 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 10 月 27 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「api」 「indonesia」 「provinces」 「administrative」 「districts」 「regencies」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 silalahi/wilayah-php 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 silalahi/wilayah-php 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 silalahi/wilayah-php 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Manage regions in magento2 addresses
iPay88 integration with Magento 2
List of Italian Regioni (Regions), Province (Provinces), and Comuni (Municipalities) with data from Istat
A PSR-7 compatible library for making CRUD API endpoints
Iran Provinces, Counties and Cities with a Google Map Location for Laravel.
Tripay Payment Gateway SDK for Laravel 10, 11, 12 and PHP 8.2+
统计信息
- 总下载量: 3
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 24
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-10-27