Laravel Tutorial : Membuat Package Dengan Workbench di Laravel 4

Laravel logo

Haaahhh, sudah sebulan gak nongol. Dan tahun juga sudah berganti ke 2014. Tahun yang baru untuk semangat yang baru untuk saya dan rekan-rekan tentunya. Di tulisan kali ini saya akan kembali mengulik-ngulik sedikit fitur canggih yang ada di framework laravel, salah satunya ialah kita bisa membuat package sendiri dengan fitur workbench milik laravel. Biasanya kita mendefinisikan package yang akan kita install dari packagist di composer.json, nah sekarang kita akan membuat package sendiri untuk kebutuhan project kita nantinya.

Disini saya contohkan dengan membuat sebuah package yang sifatnya adalah modul-modul khusus yang terpisah untuk aplikasi kita. Contohnya, seperti modul kepegawaian, modul pembayaran, modul laporan dan lain sebagainya. Kita buat terpisah, agar strukturnya lebih enak dilihat dan dirawat untuk ke depannya. Juga sangat memudahkan untuk kita yang bekerja secara tim. Nantinya, modul dalam bentuk package ini kita push ke git repo seperti bitbucket atau github. Dan kita hanya definisikan di file composer.json, jadi akan di-install otomatis ketika kita menjalankan perintah php composer install atau php composer update. Yukk ahhh, kita langsung aja ke prakteknya.

Di dokumentasi resminya http://laravel.com/docs/packages, sudah disediakan penjelasannya. Walaupun banyak yang bilang penjelasannya kurang jelas ;). Untuk membuat package baru, kita akan menggunakan artisan command.

php artisan workbench lumbung/laporan –resources

Maksud dari perintah di atas, akan dibuat sebuah package dengan nama “Laporan” dan nama vendor atau pembuatnya adalah “Lumbung”. Tambahan –resources di belakangnya, untuk membuat direktori spesifik khusus untuk laravel seperti migrations, views, dan lainnya. Jika dilihat ke direktori aplikasi, akan terdapat folder workbench di root direktori aplikasi.

laravel - workbench folder

Konfigurasi local/development mode

Package belum bisa diakses dari browser, kita harus mendaftakan Service Provider-nya ke dalam file app/config/app.php. Karena masih dalam tahap develop, kita buat sebuah folder “local” di dalam folder app/config. Semua konfigurasi selama tahap develop kita definisikan disana. Memang secara default laravel telah menyediakan siklus pengembangan aplikasi yang benar-benar pro menurut saya. Copy file app/config/app.php ke folder app/config/local/app.php. Buka file app/config/local/app.php, tambahkan script berikut :

‘Lumbung\Laporan\LaporanServiceProvider’

Routes.php

Sekarang kita juga akan membuat sebuah file routes.php untuk mengatur routing dari package yang kita buat, di dalam folder workbench/lumbung/laporan/src/routes.php.

Route::get(‘/’, array(‘uses’ => ‘Lumbung\Laporan\Controller\IndexController@index’));
Route::get(‘/detail’, array(‘uses’ => ‘Lumbung\Laporan\Controller\IndexController@detail’));

Agar routing di atas dapat dikenali, kita harus mendaftarkan file routes.php di atas ke dalam file LaporanServiceProvider.php, tepatnya pada function boot(). Yang akan memanggil file routes.php saat package ini dijalankan.

public function boot()
{
	$this->package('lumbung/laporan', 'Laporan');
	include __DIR__.'/../../routes.php';
}

Controller Packages

Pada routes.php, kita akan mengarahkan request dari user ke sebuah controller yang telah kita definisikan di atas. Buat sebuah controller dengan nama IndexController di dalam folder workbench/lumbung/laporan/src/Lumbung/Laporan/Controller/IndexController.php.

<?php namespace Lumbung\Laporan\Controller;

use Controller;
use View;

class IndexController extends Controller {

    public function index()
    {
        return View::make('Laporan::index.index');
    }

    public function detail()
    {
        return View::make('Laporan::index.detail');
    }

}

View packages

Kita dapat menambahkan view yang dibalut dengan template engine bawaan laravel, yaitu Blade. Disini saya membuat layout terpisah yang berfungsi sebagai frame/master dan template masing-masing view yang akan dipanggil di setiap function dari controller. Mirip seperti di Yii :).

laravel - blade views

master.blade.php

<!doctype html>
<html ng-app="App">
    <head>
        <meta charset="iso8859">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <title>
            @section('page_title')
                Header Title
            @show
        </title>
        <meta name="description" content="@section('meta_description')
            Meta Description
        @show">
        <meta name="keywords" content="@section('meta_keywords')
            Meta Keywords
        @show">
        @section('header')

        @show
        <style>
            body {
                padding-top: 50px;
                padding-bottom: 20px;
            }
        </style>
    </head>
    <body>

        @section('menu')

        @show

        @yield('content')

        </body>

    @section('footer')

    @show

</html>

index.blade.php

@extends('Laporan::layout.master')

@section('page_title')
    Index
@stop

@section('meta_description')Ini halaman index @stop

@section('meta_keywords')Ini keywords @stop

@section('header')
  @parent
@stop

@section('menu')
  @parent

  <ul>
    <li><a href="/">Home</a></li>
    <li><a href="/index.php/detail">Detail</a></li>
  </ul>

@stop

@section('content')

  <h2>Ini halaman index</h2>

@stop

@section('footer')
    @parent
    Workbench - Laravel
@stop

detail.blade.php

@extends('Laporan::layout.master')

@section('page_title')
    Index
@stop

@section('meta_description')Ini halaman index @stop

@section('meta_keywords')Ini keywords @stop

@section('header')
  @parent
@stop

@section('menu')
  @parent

  <ul>
    <li><a href="/">Home</a></li>
    <li><a href="/index.php/detail">Detail</a></li>
  </ul>

@stop

@section('content')

  <h2>Ini halaman detail</h2>

@stop

@section('footer')
    @parent
    Workbench - Laravel
@stop

Jalankan built-up server yang disediakan oleh laravel dengan perintah php artisan serve. Aplikasi dapat dijalankan dari browser dengan alamat http://localhost:8000.

Nah, gampang kan membuat package sendiri di laravel? Masih banyak yang bisa kita tambahkan, seperti menambahkan koneksi ke database dan menampilkan data dari database sampai ke pengolahan data. Tentunya dengan modul yang terpisah-pisah, dan kita bisa fokus ke satu modul saja. Ok deh, sekian dulu tulisan saya kali ini. Semoga bisa bermanfaat untuk rekan-rekan.

4 comments

  1. Ekalaya Reply

    Halo mblo..
    Dah saya komen yakh.. 😀
    Bagus tulisannya mblo..
    Dasar mblo.. mblo.. hahaha

Leave a Reply

Your email address will not be published. Required fields are marked *