Laravel Tutorial : Menggunakan Namespace Pada Aplikasi Berbasis Laravel

Laravel logo

Di tulisan yang kemarin, saya sudah sempat menjelaskan tentang penggunaan namespace di PHP. Monggo diulik-ulik lagi artikelnya :D. Sekarang kita akan mencoba untuk mengimplementasikan namespace di aplikasi laravel yang akan kita buat. Kalau mau dibilang gampang yaw gampang, kalau mau dibilang susah yaw susah juga sih jika belum kenal ;). Tapi disini jika menggunakan namespace pada aplikasi laravel, ada beberapa yang harus kita ubah mulai dari Controller, pemanggilan package untuk package yang akan digunakan sampai perubahan untuk di bagian router.

Silahkan install terlebih dahulu artikel yang membahas instalasi framework laravel. Jika kita lihat di folder /app/controller, ada 2 buah controller yang sudah setia nangkring disana. Yaitu BaseController dan HomeController.

BaseController.php

class BaseController extends Controller {

	/**
	 * Setup the layout used by the controller.
	 *
	 * @return void
	 */
	protected function setupLayout()
	{
		if ( ! is_null($this->layout))
		{
			$this->layout = View::make($this->layout);
		}
	}
}

HomeController.php

class HomeController extends BaseController {

	/*
	|--------------------------------------------------------------------------
	| Default Home Controller
	|--------------------------------------------------------------------------
	|
	| You may wish to use controllers instead of, or in addition to, Closure
	| based routes. That's great! Here is an example controller method to
	| get you started. To route to this controller, just add the route:
	|
	|	Route::get('/', 'HomeController@showWelcome');
	|
	*/

	public function showWelcome()
	{
		return View::make('hello');
	}

}

Sama seperti artikel tentang namespace di PHP yang lalu, kita harus mendeklarasikan namespace pada file BaseController.php atau bahasa kasarnya memberi tahu kepada router, class BaseController terletak di folder mana. Karena file BaseController.php meng-extends class Controller, kita juga harus memanggil class Controller global. Berikut kode tambahannya :

namespace App\Controllers;

use Controller;

class BaseController extends Controller {

	/**
	 * Setup the layout used by the controller.
	 *
	 * @return void
	 */
	protected function setupLayout()
	{
		if ( ! is_null($this->layout))
		{
			$this->layout = View::make($this->layout);
		}
	}

}

Selanjutnya untuk class HomeController, juga kita deklarasikan namespace-nya. Class HomeController meng-extends class BaseController, jadi kita panggil class BaseController dengan use App\Controllers\BaseController;. Selain itu, pada method showWelcome yang mengembalikan View juga memanggil class View, jadi kita juga harus memanggil class View global dengan use View;.

<?php
namespace App\Controllers;

use App\Controllers\BaseController;
use View;

class HomeController extends BaseController {

	/*
	|--------------------------------------------------------------------------
	| Default Home Controller
	|--------------------------------------------------------------------------
	|
	| You may wish to use controllers instead of, or in addition to, Closure
	| based routes. That's great! Here is an example controller method to
	| get you started. To route to this controller, just add the route:
	|
	|	Route::get('/', 'HomeController@showWelcome');
	|
	*/

	public function showWelcome()
	{
		return View::make('hello');
	}

}

Pada router, pemanggilan class pun juga harus diubah, sesuai dengan letak foldernya atau namespace-nya. Seperti berikut :

<?php

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the Closure to execute when that URI is requested.
|
*/

Route::get('/', 'App\\Controllers\\HomeController@showWelcome');

Dan yang terakhir, jangan lupa untuk memberitahukan kepada composer bahwa aplikasi kita menggunakan namespace, dengan perintah berikut via console :

php composer.phar dump-autoload --optimize

Ketika dijalankan di browser hasilnya sama saja dengan yang tidak menggunakan namespace. Cuma dari sisi kode memang kelihatannya lebih terlihat rapi dan terstruktur. Terus terang saja, saya saat ini lebih nyaman dengan penggunaan namespace seperti ini. Setelah lama berkelana kesana-kemari (halaaaahh) mencicipi java, C#, AS 3 yang notabene sudah menggunakan namespace atau sistem package, akhirnya di PHP hadir juga sistem yang serupa 😀

“Stay Foolish, Stay Hungry”

Happy Blogging and Keep Coding

Cheerrrss….!!!!

1 Comment

  1. Edi Reply

    Mantep brow, selalu ditunggu updatenya tentang Laravel, ane dah mulai enjoy nih, ingin cari lebih banyak referensi, o ya share dong Laravel yang code editornya pakai Vim, ane kurang ngerti klo liat videonya Jeff Way.