Installation:
composer require ais/provinsibundle:dev-master
Ensure your composer.json includes the required dependencies (fos/rest-bundle, jms/serializer-bundle, nelmio/api-doc-bundle).
Register the Bundle:
Add to app/AppKernel.php:
new Ais\ProvinsiBundle\AisProvinsiBundle(),
Configure Routing:
In app/config/routing.yml:
ais_provinsis:
type: rest
prefix: /api
resource: "@AisProvinsiBundle/Resources/config/routes.yml"
Access API Docs:
Visit /api/doc (e.g., http://localhost/web/app_dev.php/api/doc) to explore endpoints.
Fetch all Indonesian provinces via the API:
curl http://localhost/web/app_dev.php/api/provinsi
Expected response: A JSON array of province data (e.g., {"id": 1, "name": "DKI Jakarta", ...}).
Data Retrieval:
GET /api/provinsi/{id}) for province data.FOSRestBundle for serialization/deserialization.Integration with Doctrine:
$provinsi = $this->getDoctrine()->getRepository('AisProvinsiBundle:Provinsi')->findAll();
API Documentation:
NelmioApiDocBundle auto-generates Swagger docs. Extend with custom annotations:
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
/**
* @ApiDoc(...)
*/
Form Handling:
FOSRestBundle's form handlers for province creation/updates:
$form = $this->createForm(ProvinsiType::class);
Service Provider:
Register the bundle in config/app.php:
'providers' => [
Ais\ProvinsiBundle\AisProvinsiServiceProvider::class,
],
Route Service Provider:
Add routes in routes/api.php:
Route::group(['prefix' => 'api', 'namespace' => 'Ais\ProvinsiBundle\Http\Controllers'], function () {
$router->resource('provinsi', 'ProvinsiController');
});
Dependency Injection:
Bind the ProvinsiRepository in AppServiceProvider:
$this->app->bind('provinsi.repository', function ($app) {
return new ProvinsiRepository($app['db']);
});
API Resources:
Use Laravel's ApiResource for JSON responses:
namespace Ais\ProvinsiBundle\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class ProvinsiResource extends JsonResource {
public function toArray($request) {
return ['id' => $this->id, 'name' => $this->name];
}
}
Symfony 2.7 Dependency:
symfony/console-bridge) if migrating to Laravel/Symfony 4+:
composer require symfony/console-bridge:^4.0
Missing Doctrine Entities:
// config/database.php
'default' => 'mysql',
'connections' => [
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'database' => env('DB_DATABASE'),
// ...
],
],
NelmioApiDocBundle Conflicts:
darkaonline/l5-swagger as a drop-in:
composer require darkaonline/l5-swagger
Hardcoded Routes:
routes.yml may not work in Laravel. Recreate routes manually in routes/api.php.Check Bundle Structure:
AisProvinsiBundle/Resources/config/doctrine/Provinsi.orm.yml for entity definitions. Replicate in Laravel’s database/migrations.Enable API Debugging:
php artisan route:list to verify routes.app_dev.php/_profiler for errors.Database Seeding:
// database/seeds/ProvinsiTableSeeder.php
public function run() {
Provinsi::create(['name' => 'DKI Jakarta']);
}
Customize Province Model:
Provinsi entity in Laravel:
namespace Ais\ProvinsiBundle\Models;
use Illuminate\Database\Eloquent\Model;
class Provinsi extends Model {
protected $fillable = ['name', 'code'];
}
Add Validation:
namespace Ais\ProvinsiBundle\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreProvinsiRequest extends FormRequest {
public function rules() {
return ['name' => 'required|string|max:255'];
}
}
Localization:
resources/lang/id/provinsi.php):
return [
'DKI Jakarta' => 'Daerah Khusus Ibukota Jakarta',
];
Testing:
public function test_provinsi_api() {
$response = $this->getJson('/api/provinsi');
$response->assertStatus(200);
}
How can I help you explore Laravel packages today?