> For the complete documentation index, see [llms.txt](https://belajarlaravel.abdasis.my.id/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://belajarlaravel.abdasis.my.id/bab-2-dasar-routing/membangun-controller-yang-rapi.md).

# Membangun Controller yang Rapi

***

### Mengenal Route di Laravel

Route adalah gerbang utama aplikasi Kamu. Setiap kali user membuka URL tertentu, Laravel akan mencocokkannya dengan route yang sudah ditentukan, lalu menjalankan fungsinya.

```php
Route::get('/', function () {
    return 'Selamat datang di Laravel!';
});
```

Kamu bisa menggunakan berbagai method HTTP seperti `GET`, `POST`, `PUT`, `DELETE`, dan lainnya.

***

### Jenis-Jenis Route

#### Route Dasar

```php
Route::get('/home', function () {
    return view('home');
});
```

#### Route dengan Parameter

```php
Route::get('/user/{id}', function ($id) {
    return "User ID: $id";
});
```

#### Route dengan Parameter Opsional

```php
Route::get('/kategori/{slug?}', function ($slug = 'umum') {
    return "Kategori: $slug";
});
```

***

### Membuat Controller

Untuk membuat controller baru, gunakan perintah artisan berikut:

```bash
php artisan make:controller ArticleController
```

Perintah ini akan membuat file `ArticleController.php` di folder `app/Http/Controllers`.

#### Contoh Controller

```php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ArticleController extends Controller
{
    public function index()
    {
        return view('articles.index');
    }

    public function show($id)
    {
        return "Menampilkan artikel dengan ID: $id";
    }
}
```

***

### Menghubungkan Route ke Controller

Setelah controller dibuat, Kamu bisa menghubungkannya ke route seperti ini:

```php
use App\Http\Controllers\ArticleController;

Route::get('/articles', [ArticleController::class, 'index']);
Route::get('/articles/{id}', [ArticleController::class, 'show']);
```

***

### Resource Controller

Laravel menyediakan cara cepat untuk membuat seluruh route CRUD dengan satu baris:

```bash
php artisan make:controller PostController --resource
```

Lalu daftarkan route-nya:

```php
Route::resource('posts', PostController::class);
```

Laravel akan otomatis membuat route untuk method seperti:

* `index`
* `create`
* `store`
* `show`
* `edit`
* `update`
* `destroy`

***

### Route Group

#### Group dengan Prefix

```php
Route::prefix('admin')->group(function () {
    Route::get('/dashboard', [AdminController::class, 'index']);
});
```

#### Group dengan Middleware

```php
Route::middleware(['auth'])->group(function () {
    Route::get('/profile', [UserController::class, 'profile']);
});
```

***

### Memberi Nama pada Route

Agar mudah digunakan, Kamu bisa memberi nama pada route:

```php
Route::get('/login', [AuthController::class, 'showLogin'])->name('login');
```

Penggunaannya:

```php
return redirect()->route('login');
```

***

### Kesimpulan

Dengan menggunakan route dan controller, Kamu bisa membangun struktur aplikasi yang rapi dan terorganisir. Gunakan `make:controller` untuk mempercepat pekerjaan, dan manfaatkan fitur seperti resource controller serta route grouping agar aplikasi Laravel Kamu semakin efisien.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://belajarlaravel.abdasis.my.id/bab-2-dasar-routing/membangun-controller-yang-rapi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
