Fitur Redirect Routes dan View Routes di Laravel 5.5
Untuk membuat sebuah redirect (pengalihan) halaman, umumnya kita menggunakan fungsi redirect()
dalam controller. Agar controller yang sudah dibuat dapat diakses, maka harus didaftarkan terlebih dahulu pada route.
Mari kita mulai dari sebuah method pada contoh controller sederhana seperti di bawah.
/**
* Store a newly created user in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(\Illuminate\Http\Request $request): \Illuminate\Http\RedirectResponse
{
// process
// another process
return redirect()->back();
}
Pada potongan skrip, langkah terakhir yang dijalankan akan mengalihkan route (halaman saat ini) ke halaman sebelumnya.
Dalam route, method dalam controller tersebut dapat didefinisikan sebagai berikut. Mari asumsikan nama controller-nya adalah UserController
.
Route::post('user', 'UserController@store')->name('user.store');
Apabila tanpa menggunakan controller, atau proses di dalamnya tidak terlalu kompleks, kalian juga dapat langsung menuliskannya pada definisi route. Penggunaan contoh skrip di bawah jauh lebih sederhana dibandingkan dengan contoh skrip di atas yang menggunakan controller.
Route::get('/contact-form', function(){
// url has been moved
return redirect('/contact');
});
Redirect Routes
Di Laravel 5.5, Taylor Otwell selaku pengembang framework tersebut mengenalkan method baru pada class Route
, yaitu redirect()
. Method ini merupakan pintasan (shortcut) dari contoh kedua skrip di atas.
Method redirect()
menerima tiga buah argumen. Argumen pertama merupakan status URI asal, argumen kedua merupakan URI tujuan, sedangkan argumen ketiga merupakan kode status HTTP.
Route::redirect('/contact-form', '/contact', 308); // Permanent Redirect
Route::get('/contact', 'ContactController@form')->name('contact.form');
Route::redirect('/me', '/my-profile', 307); // Temporary Redirect
Route::get('/my-profile', 'UserController@profile')->name('user.profile');
Kekurangan dalam menggunakan method redirect()
adalah kita tidak dapat merangkainya (chain) dengan method flash session layaknya di controller.
Route::redirect('/about-us', '/about') ->with('alert', 'We are moving!');BadMethodCallException: Method with does not exist.
Dalam kasus nyata, method redirect()
digunakan untuk peralihan URI lama ke URI baru tanpa menghilangkan langsung URI lama secara tiba-tiba. Di aplikasi web, tentunya kita dengan leluasa mengarahkan pengguna untuk menuju ke URI baru.
Lain cerita ketika pengguna tersebut datang dari tautan yang sudah lama dibagikan, atau didapat dari hasil mesin pencari. Untuk menghindari halaman tidak ditemukan oleh aplikasi, maka redirect ini dibutuhkan sampai pengguna atau mesin pencari memahami URI lama sudah digantikan.
View Routes
Tak hanya method redirect()
yang dikenalkan, ada juga method baru lain yang ditambahkan, yaitu view()
. Umumnya, method view()
pada route digunakan untuk membuat tampilan statis. Walau pada implementasinya juga mendukung data dinamis.
Sebagai contoh, cara yang biasa digunakan adalah memuatnya langsung melalui route.
Route::get('/about', function(){
return view('static.about', ['title' => 'Tentang Kami']);
});
Dengan method view()
, skrip yang ditulis bakal menjadi lebih ringkas.
Route::view('/about', 'static.about', [
'title' => 'Tentang Kami',
'me' => \Auth::user()
]);
Jika kalian perhatikan, pada argumen ketiga saya melempar sebuah data dengan tipe array. Tentunya, data tersebut dapat digunakan pada view seperti dalam bahasan Passing Data to Views.
Originally published at www.laravel.web.id on November 1, 2017.