Skip to content

Latest commit

 

History

History
375 lines (277 loc) · 13.9 KB

routing.md

File metadata and controls

375 lines (277 loc) · 13.9 KB

Routing

Rute Dasar

Sebagian besar rute untuk aplikasi Anda akan didefinisikan dalam file app/routes.php. Rute Laravel paling sederhana terdiri dari URI dan sebuah Closure callback.

Rute GET Dasar

Route::get('/', function()
{
	return 'Hello World';
});

Rute POST Dasar

Route::post('foo/bar', function()
{
	return 'Hello World';
});

Mendaftarkan sebuah Route yang Menanggapi Setiap Kata Kerja HTTP

Route::any('foo', function()
{
	return 'Hello World';
});

**Memaksa sebuah Route Agar Dilayani Hanya Melalui HTTPS **

Route::get('foo', array('https', function()
{
	return 'Must be over HTTPS';
}));

Sering kali, Anda akan perlu untuk menghasilkan URL untuk rute Anda, Anda dapat melakukannya dengan menggunakan metode URL::to:

$url = URL::to('foo');

Rute dengan Parameter

Route::get('user/{id}', function($id)
{
	return 'User '.$id;
});

Rute dengan Parameter Opsional

Route::get('user/{name?}', function($name = null)
{
	return $name;
});

Rute dengan Parameter Opsional dengan Nilai Default

Route::get('user/{name?}', function($name = 'John')
{
	return $name;
});

Rute dengan Batasan Regular Expression

Route::get('user/{name}', function($name)
{
	//
})
->where('name', '[A-Za-z]+');

Route::get('user/{id}', function($id)
{
	//
})
->where('id', '[0-9]+');

Tentu saja, Anda dapat memberikan sebuah array berisikan batasan-batasan bila diperlukan:

Route::get('user/{id}/{name}', function($id, $name)
{
	//
})
->where(array('id' => '[0-9]+', 'name' => '[a-z]+'))

Rute dengan Filter

Rute dengan Filter memberikan kenyamanan bagi Anda untuk membatasi akses ke rute yang diberikan, yang berguna untuk membuat wilayah-wilayah pada situs yang memerlukan otentikasi. Ada beberapa filter yang terdapat dalam framework Laravel, termasuk filter auth, filter auth.basic, filter guest, dan filter CSRF. Filter-filter tersebut terletak di berkas app/filters.php.

Mendefinisikan Sebuah Filter Route

Route::filter('old', function()
{
	if (Input::get('age') < 200)
	{
		return Redirect::to('home');
	}
});

Jika sebuah respon dikembalikan dari suatu filter, respon tersebut akan dianggap sebagai respon terhadap permintaan dan rute tersebut tidak akan dieksekusi, dan setiap filter after pada rute juga akan dibatalkan.

Melampirkan Filter Untuk Rute

Route::get('user', array('before' => 'old', function()
{
	return 'You are over 200 years old!';
}));

Melampirkan Beberapa Filter untuk Sebuah Route

Route::get('user', array('before' => 'auth|old', function()
{
	return 'You are authenticated and over 200 years old!';
}));

Menentukan Parameter Filter

Route::filter('age', function($route, $request, $value)
{
	//
});

Route::get('user', array('before' => 'age:200', function()
{
	return 'Hello World';
}));

Filter after menerima $response sebagai argumen ketiga ketika dilewatkan ke filter:

Route::filter('log', function($route, $request, $response, $value)
{
	//
});

Filter Berbasis Pola

Anda juga dapat menentukan bahwa filter berlaku untuk seluruh rangkaian rute berdasarkan URI mereka.

Route::filter('admin', function()
{
	//
});

Route::when('admin/*', 'admin');

Dalam contoh di atas, filter admin akan diterapkan ke semua rute yang dimulai dengan admin/. Tanda * digunakan sebagai wildcard, dan akan mencocokkan dengan kombinasi dari karakter-karakter.

Anda juga dapat membatasi pola filter dengan kata kerja HTTP:

Route::when('admin/*', 'admin', array('post'));

Filter Classes

Untuk penyaringan tingkat lanjut, Anda mungkin ingin menggunakan class bukannya Closure. Dikarenakan class-class filter dipisahkan dari aplikasi IOC Container, Anda akan dapat memanfaatkan dependency injection pada filter-filter ini untuk kemampuan testing yang lebih besar.

Mendefinisikan sebuah Filter Class

class FooFilter {

	public function filter()
	{
		// Filter logic...
	}

}

Mendaftarkan Filter Berbasis Class

Route::filter('foo', 'FooFilter');

Rute yang Diberi Nama

Rute bernama membuat lebih nyaman dalam mengacu pada rute saat membuat pengalihan atau membuat URL. Anda dapat menentukan nama untuk rute seperti berikut:

Route::get('user/profile', array('as' => 'profile', function()
{
	//
}));

Anda juga dapat menentukan nama rute untuk action-action (metode) pada controller:

Route::get('user/profile', array('as' => 'profile', 'uses' => 'UserController@showProfile'));

Sekarang, Anda dapat menggunakan nama rute itu saat membuat URL atau pengalihan:

$url = URL::route('profile');

$redirect = Redirect::route('profile');

Anda dapat mengakses nama rute yang sedang berjalan melalui metode currentRouteName:

$name = Route::currentRouteName();

Kelompok Rute

Kadang-kadang Anda mungkin perlu untuk menerapkan filter untuk sekelompok rute. Alih-alih menentukan filter pada setiap rute, Anda dapat menggunakan kelompok rute:

Route::group(array('before' => 'auth'), function()
{
	Route::get('/', function()
	{
		// Has Auth Filter
	});

	Route::get('user/profile', function()
	{
		// Has Auth Filter
	});
});

Rute Sub-Domain

Rute Laravel juga mampu menangani wildcard sub​​-domain, dan memberikan Anda parameter wildcard dari domain:

Mendaftarkan Rute Sub-Domain

Route::group(array('domain' => '{account}.myapp.com'), function()
{

	Route::get('user/{id}', function($account, $id)
	{
		//
	});

});

Pemberian Awalan pada Rute

Sekelompok rute dapat diberikan awalan dengan menggunakan opsi prefix pada atribut array dari sebuah kelompok:

Pemberian Awalan pada Kelompok Rute

Route::group(array('prefix' => 'admin'), function()
{

	Route::get('user', function()
	{
		//
	});

});

Mengikat Model pada Rute

Pengikatan Model (model binding) menyediakan cara yang nyaman untuk menyuntikkan pewujudan (instance) model ke rute Anda. Misalnya, daripada menyuntikkan ID pengguna, Anda bisa menyuntikkan seluruh pewujudan model User yang cocok dengan ID yang diberikan. Pertama, gunakan metode Route::model untuk menentukan model yang harus digunakan untuk parameter yang diberikan:

Parameter Binding Untuk Sebuah Model

Route::model('user', 'User');

Selanjutnya, menentukan rute yang berisi parameter {user}:

Route::get('profile/{user}', function(User $user)
{
	//
});

Karena kita telah mengikat parameter {user} ke model User, sebuah pewujudan User akan disuntikkan ke rute. Jadi, misalnya, permintaan untuk profile/1 akan menyuntikkan pewujudan User yang memiliki ID 1.

** Catatan: ** Jika pewujudan model yang sesuai tidak ditemukan dalam database, pesan kesalahan 404 akan diberikan.

Jika Anda ingin menentukan sendiri perilaku "tidak ditemukan", Anda dapat memberikan sebuah Closure sebagai argumen ketiga untuk metode Model:

Route::model('user', 'User', function()
{
	throw new NotFoundException;
});

Kadang-kadang Anda mungkin ingin menggunakan resolver sendiri untuk parameter-parameter rute. Cukup menggunakan metode Route::bind:

Route::bind('user', function($value, $route)
{
	return User::where('name', $value)->first();
});

Mengeluarkan Pesan Kesalahan 404

Ada dua cara manual untuk memicu pesan kesalahan 404 dari rute. Pertama, Anda dapat menggunakan metode App::abort:

App::abort(404);

Kedua, Anda dapat melemparkan sebuah pewujudan (instance) dari Symfony\Component\HttpKernel\Exception\NotFoundHttpException.

Informasi lebih lanjut tentang penanganan pengecualian 404 dan menggunakan respon kustom untuk kesalahan ini dapat ditemukan pada bagian dokumentasi kesalahan.

Rute ke Controller

Laravel memungkinkan Anda untuk tidak hanya membuat rute ke Closure, tetapi juga untuk class controller, dan bahkan memungkinkan penciptaan dari resource controllers.

Untuk lebih jelasnya lihat dokumentasi pada Controller.