Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Provinsibundle Laravel Package

ais/provinsibundle

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Steps

  1. 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).

  2. Register the Bundle: Add to app/AppKernel.php:

    new Ais\ProvinsiBundle\AisProvinsiBundle(),
    
  3. Configure Routing: In app/config/routing.yml:

    ais_provinsis:
      type: rest
      prefix: /api
      resource: "@AisProvinsiBundle/Resources/config/routes.yml"
    
  4. Access API Docs: Visit /api/doc (e.g., http://localhost/web/app_dev.php/api/doc) to explore endpoints.


First Use Case

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", ...}).


Implementation Patterns

Core Workflows

  1. Data Retrieval:

    • Use RESTful endpoints (e.g., GET /api/provinsi/{id}) for province data.
    • Leverage FOSRestBundle for serialization/deserialization.
  2. Integration with Doctrine:

    • The bundle likely uses Doctrine ORM. Query provinces via:
      $provinsi = $this->getDoctrine()->getRepository('AisProvinsiBundle:Provinsi')->findAll();
      
  3. API Documentation:

    • NelmioApiDocBundle auto-generates Swagger docs. Extend with custom annotations:
      use Nelmio\ApiDocBundle\Annotation\ApiDoc;
      /**
       * @ApiDoc(...)
       */
      
  4. Form Handling:

    • Use FOSRestBundle's form handlers for province creation/updates:
      $form = $this->createForm(ProvinsiType::class);
      

Laravel-Specific Adaptations

  1. Service Provider: Register the bundle in config/app.php:

    'providers' => [
        Ais\ProvinsiBundle\AisProvinsiServiceProvider::class,
    ],
    
  2. Route Service Provider: Add routes in routes/api.php:

    Route::group(['prefix' => 'api', 'namespace' => 'Ais\ProvinsiBundle\Http\Controllers'], function () {
        $router->resource('provinsi', 'ProvinsiController');
    });
    
  3. Dependency Injection: Bind the ProvinsiRepository in AppServiceProvider:

    $this->app->bind('provinsi.repository', function ($app) {
        return new ProvinsiRepository($app['db']);
    });
    
  4. 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];
        }
    }
    

Gotchas and Tips

Pitfalls

  1. Symfony 2.7 Dependency:

    • The bundle targets Symfony 2.7.4. Use a compatibility layer (e.g., symfony/console-bridge) if migrating to Laravel/Symfony 4+:
      composer require symfony/console-bridge:^4.0
      
  2. Missing Doctrine Entities:

    • The bundle assumes Doctrine ORM. In Laravel, use Eloquent instead:
      // config/database.php
      'default' => 'mysql',
      'connections' => [
          'mysql' => [
              'driver' => 'mysql',
              'url' => env('DATABASE_URL'),
              'database' => env('DB_DATABASE'),
              // ...
          ],
      ],
      
  3. NelmioApiDocBundle Conflicts:

    • Laravel lacks native Swagger support. Use darkaonline/l5-swagger as a drop-in:
      composer require darkaonline/l5-swagger
      
  4. Hardcoded Routes:

    • The bundle’s routes.yml may not work in Laravel. Recreate routes manually in routes/api.php.

Debugging Tips

  1. Check Bundle Structure:

    • Inspect AisProvinsiBundle/Resources/config/doctrine/Provinsi.orm.yml for entity definitions. Replicate in Laravel’s database/migrations.
  2. Enable API Debugging:

    • Laravel: Use php artisan route:list to verify routes.
    • Symfony: Check app_dev.php/_profiler for errors.
  3. Database Seeding:

    • The bundle may include fixtures. Seed Laravel’s DB via:
      // database/seeds/ProvinsiTableSeeder.php
      public function run() {
          Provinsi::create(['name' => 'DKI Jakarta']);
      }
      

Extension Points

  1. Customize Province Model:

    • Extend the Provinsi entity in Laravel:
      namespace Ais\ProvinsiBundle\Models;
      use Illuminate\Database\Eloquent\Model;
      
      class Provinsi extends Model {
          protected $fillable = ['name', 'code'];
      }
      
  2. Add Validation:

    • Use Laravel’s form requests:
      namespace Ais\ProvinsiBundle\Http\Requests;
      use Illuminate\Foundation\Http\FormRequest;
      
      class StoreProvinsiRequest extends FormRequest {
          public function rules() {
              return ['name' => 'required|string|max:255'];
          }
      }
      
  3. Localization:

    • Override province names via language files (resources/lang/id/provinsi.php):
      return [
          'DKI Jakarta' => 'Daerah Khusus Ibukota Jakarta',
      ];
      
  4. Testing:

    • Write Laravel feature tests:
      public function test_provinsi_api() {
          $response = $this->getJson('/api/provinsi');
          $response->assertStatus(200);
      }
      
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
comsave/common
alecsammon/php-raml-parser
chrome-php/wrench
lendable/composer-license-checker
typhoon/reflection
mesilov/moneyphp-percentage
mike42/gfx-php
bookdown/themes
aura/view
aura/html
aura/cli
povils/phpmnd
nayjest/manipulator
omnipay/tests
psr-mock/http-message-implementation
psr-mock/http-factory-implementation
psr-mock/http-client-implementation
voku/email-check
voku/urlify
rtheunissen/guzzle-log-middleware