- Basic Routing
- Route Parameters
- Route Filters
- Named Routes
- Route Groups
- Sub-Domain Routing
- Route Prefixing
- Route Model Binding
- Throwing 404 Errors
- Routing To Controllers
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');
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 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 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();
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 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)
{
//
});
});
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()
{
//
});
});
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();
});
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.
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.