Laravel Development Workflow yang Saya Pakai

Mulai mengenal Laravel setahun belakangan, mencoba berbagai struktur dan workflow project, dan akhirnya stick dengan yang berikut ini.
Membuat Project via Composer
composer create-project laravel/laravel path/to/project/root
Belum kenal Composer? You should — anggap saja menambah satu seatbelt di toolchain. Setiap detik dan byte yang dihabiskan untuknya, sepadan.
Konfigurasi Development Environment
Saya selalu pakai .dev sebagai hostname untuk environment lokal. Edit bootstrap/start.php:
$env = $app->detectEnvironment([
'local' => ['*.dev', '*.local'],
'staging' => ['staging.*'],
]);
Artinya semua akses ke .dev dan .local akan menggunakan environment local.
- Tambahkan direktori
app/config/local, dan buat.gitignore— biar tidakditracking git. - Kopi
app/config/app.phpkeapp/config/local/, edit sesuai kebutuhan. Tidak perlu mengkopi semua isinya, cukup item yang ingin di-override — biasanya hanyadebugdanurl. - Kopi
app/config/database.phpdengan cara yang sama:
return [
'default' => 'pgsql',
'connections' => [
'pgsql' => [
'driver' => 'pgsql',
'host' => '127.0.0.1',
'database' => 'project_dev',
'username' => 'iamdev',
'password' => '',
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
],
],
];
- Kopi
app/config/session.php— biasanya saya hanya overridedriverdandomain. Intinya: file dan konfigurasi yang berbeda antara production dan development.
Persiapkan vhost Lokal
Karena saya pegang beberapa project paralel, saya pakai vhost untuk development. Setiap project punya hostname .dev lokal yang saya setup di nginx, dengan dnsmasq sebagai local DNS server. Cara yang lebih sederhana: tinggal register di /etc/hosts. Sudah cukup.
Mulai dengan Workbench
Sekecil apapun aplikasinya, saya selalu mulai dari workbench — membuatpackage terpisah, daripada menumpuk file project di direktori app. Ini adalahpemisahan antara Laravel sebagai wrapper dan file project saya sendiri. Kalau sudah cukup stabil, workbench tinggal saya export jadi package, dimaintain via Composer.
1. Membuat workbench baru
php artisan workbench --resources nama_vendor/nama_project
2. Routes, filters, dan helpers
Workbench seharusnya bersifat terisolasi — module yang bisa berdiri sendiri, re-usable, dengan dependensi sendiri. Itu sebabnya workbench juga punya composer.json sendiri; dependensi workbench dimaintain dari sana, bukan dari composer.json di approot.
Buat workbench/nama_vendor/nama_project/src/routes.php:
$router = App::make('router');
$namespace = 'Chz\Website\Controller\\';
// Homepage
$router->get('/', ['as' => 'website.home', 'uses' => "{$namespace}IndexController@index"]);
// Authentication
$router->controller('/auth', "{$namespace}AuthController");
// Protected Area
$router->group(['prefix' => 'protected', 'before' => 'website.auth'], function () use ($router, $namespace) {
$router->controller('/', "{$namespace}ProtectedController");
});
Buat workbench/nama_vendor/nama_project/src/filters.php:
$router = App::make('router');
$router->filter('website.auth', function () use ($router) {
$permitted = false;
if (Auth::check()) {
$user = Auth::user();
$operation = strtolower($router->getCurrentRequest()->getMethod());
$resource = "website:{$router->getCurrentRoute()->getUri()}";
if ($user->can($operation, $resource)) $permitted = true;
}
if (!$permitted) {
$referer = $router->getCurrentRequest()->headers->get('referer');
if ($referer === URL::current() || empty($referer)) {
$referer = URL::route('website.home');
}
return Redirect::guest($referer)->withErrors(['error' => 'You have not enough permission to perform this action']);
}
});
Optional, workbench/nama_vendor/nama_project/src/helpers.php:
function isHomepage()
{
return \Route::currentRouteNamed('website.home');
}
Registrasikan di ServiceProvider workbench, biasanya di method boot():
public function boot()
{
$this->package('chz/website');
include __DIR__ . '/../../filters.php';
include __DIR__ . '/../../routes.php';
include __DIR__ . '/../../helpers.php';
}
3. Bersihkan routing default
Hapus (atau comment) isi default app/routes.php, in favour of routing yang baru di workbench.
4. Registrasikan Service Provider
Daftarkan service provider workbench di app/config/app.php pada section providers.
Initialize Git + Git Flow
git init
git flow init
git add .
git commit -a -m "initial codebase"
Selanjutnya — happy coding, web artisans.
