
Dasar - Dasar Routing pada Laravel 10
Pengantar Routing Laravel 10.x
Routing merupakan aspek fundamental dalam membangun aplikasi web dengan Laravel. Routing memungkinkan Anda menghubungkan URL dengan tindakan yang ingin Anda lakukan. Artikel ini akan memandu Anda memahami dasar-dasar routing Laravel 10.x, termasuk cara mendefinisikan route, menangani request, dan menggunakan fitur-fitur routing yang lebih canggih.
Mendefinisikan Route Laravel 10.x
Route didefinisikan dalam file .php
yang terletak di direktori routes
. Laravel menyediakan dua file route default:
routes/web.php
: Untuk route yang digunakan pada web interface.routes/api.php
: Untuk route yang digunakan pada API.
Contoh:
// routes/web.php
Route::get('/', function () {
return view('welcome');
});
Route::get('/users/{id}', function ($id) {
return User::find($id);
});
Penjelasan:
Route::get
mendefinisikan route dengan method HTTP GET.- Parameter pertama adalah URI route.
- Parameter kedua adalah closure yang akan dijalankan ketika route diakses.
- Closure dapat menerima parameter dari URI route.
Menangani Request Laravel 10.x
Ketika sebuah request masuk ke aplikasi Laravel, Laravel akan mencari route yang cocok dengan URI request. Jika route ditemukan, Laravel akan menjalankan closure yang didefinisikan untuk route tersebut.
Contoh:
// routes/web.php
Route::post('/users', function (Request $request) {
$user = User::create($request->all());
return redirect('/users');
});
Penjelasan:
Route::post
mendefinisikan route dengan method HTTP POST.- Closure menerima parameter
Request
yang berisi informasi tentang request. - Closure dapat menggunakan data dari request untuk melakukan berbagai operasi, seperti membuat data baru.
Fitur Routing Laravel 10.x
Laravel menyediakan berbagai fitur routing yang canggih, seperti:
- Named Routes: Memberikan nama unik untuk route sehingga mudah dirujuk.
- Route Groups: Mengelompokkan route berdasarkan kesamaan fungsionalitas.
- Middleware: Menjalankan middleware sebelum atau setelah route dijalankan.
- Route Parameters: Menangkap parameter dari URI route.
- Route Controllers: Mendefinisikan route untuk controller.
Contoh Code Program
Berikut adalah contoh code program yang menunjukkan penggunaan fitur-fitur routing Laravel 10.x:
1. Named Routes:
// routes/web.php
Route::get('/profile', ['as' => 'profile', function () {
// ...
}]);
// ...
return redirect()->route('profile');
2. Route Groups:
// routes/web.php
Route::prefix('admin')->group(function () {
Route::get('/users', function () {
// ...
});
Route::get('/posts', function () {
// ...
});
});
3. Middleware:
// routes/web.php
Route::get('/profile', ['middleware' => 'auth', function () {
// ...
}]);
4. Route Parameters:
// routes/web.php
Route::get('/users/{id}', function ($id) {
// ...
});
5. Route Controllers:
// routes/web.php
Route::resource('users', 'UserController');
Routing merupakan aspek penting dalam membangun aplikasi web dengan Laravel. Artikel ini telah membahas dasar-dasar routing Laravel 10.x, termasuk cara mendefinisikan route, menangani request, dan menggunakan fitur-fitur routing yang lebih canggih. Untuk mempelajari lebih lanjut tentang routing Laravel, Anda dapat mengunjungi dokumentasi resmi Laravel: https://laravel.com/docs/10.x/routing.
Tabel dalam database sering kali saling berhubungan. Misalnya, sebuah postingan blog mungkin memiliki banyak komentar, atau sebuah pesanan mungkin terkait dengan pengguna yang membuatnya. Eloquent memudahkan pengelolaan dan pengoperasian hubungan ini, serta mendukung berbagai jenis hubungan umum:
- One To One (Satu ke Satu)
- One To Many (Satu ke Banyak)
- Many To Many (Banyak ke Banyak)
- Has One Through (Memiliki Satu Melalui)
- Has Many Through (Memiliki Banyak Melalui)
- One To One (Polimorfik)
- One To Many (Polimorfik)
- Many To Many (Polimorfik)
Mendefinisikan Relasi
Relasi Eloquent didefinisikan sebagai metode pada class model Eloquent Anda. Karena relasi juga berfungsi sebagai pembangun query yang kuat, mendefinisikan relasi sebagai metode menyediakan kemampuan chaining dan query yang kuat. Misalnya, kita dapat menambahkan batasan query tambahan pada relasi `posts` ini:
$user->posts()->where('active', 1)->get();
One to One / Has One
Relasi satu-ke-satu adalah jenis relasi database yang sangat dasar. Misalnya, model `User` mungkin terkait dengan satu model `Phone`. Untuk mendefinisikan relasi ini, kita akan menambahkan metode `phone` pada model `User`. Metode `phone` harus memanggil metode `hasOne` dan mengembalikan hasilnya. Metode `hasOne` tersedia di model Anda melalui class dasar `Illuminate\Database\Eloquent\Model`:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* Dapatkan telepon yang terkait dengan pengguna.
*/
public function phone()
{
return $this->hasOne(Phone::class);
}
}
Argumen pertama yang diteruskan ke metode `hasOne` adalah nama class model terkait. Setelah relasi didefinisikan, kita dapat mengambil catatan terkait menggunakan properti dinamis Eloquent. Properti dinamis memungkinkan Anda mengakses metode relasi seolah-olah mereka adalah properti yang didefinisikan pada model:
$phone = User::find(1)->phone;
Eloquent menentukan kunci asing dari relasi berdasarkan nama model induk. Dalam kasus ini, model `Phone` secara otomatis diasumsikan memiliki kunci asing `user_id`. Jika Anda ingin mengganti konvensi ini, Anda dapat meneruskan argumen kedua ke metode `hasOne`:
return $this->hasOne(Phone::class, 'foreign_key');
Jika model induk tidak menggunakan `id` sebagai kunci primernya, atau Anda ingin menemukan model terkait menggunakan kolom yang berbeda, Anda dapat meneruskan argumen ketiga ke metode `hasOne` yang menentukan kunci lokal:
return $this->hasOne(Phone::class, 'foreign_key', 'local_key');
Mendefinisikan Inverse dari Relasi
Jadi, kita telah mendefinisikan metode `phone` pada model `User` untuk menunjukkan bahwa model `User` memiliki satu `Phone`. Sekarang, untuk mendefinisikan relasi sebaliknya, kita akan mendefinisikan metode `user` pada model `Phone` yang memanggil metode `belongsTo`:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Phone extends Model
{
/**
* Dapatkan pengguna yang memiliki telepon.
*/
public function user()
{
return $this->belongsTo(User::class);
}
}
Dalam relasi ini, model `Phone` memiliki kunci asing `user_id` yang menunjukkan pengguna yang memilikinya. Metode `belongsTo` digunakan untuk mendefinisikan relasi dari model yang memiliki kunci asing ke model yang menjadi induknya.
Dengan mendefinisikan kedua metode ini, Anda dapat mengakses data terkait dengan cara berikut:
// Mendapatkan telepon yang terkait dengan pengguna dengan ID 1
$phone = User::find(1)->phone;
// Mendapatkan pengguna yang memiliki telepon dengan ID 1
$user = Phone::find(1)->user;