Cara kerja Laravel: MVC · レッスン 10/16

Controller: tempat logika hidup

Controller mengambil alih pekerjaan dari fungsi di file route, supaya kode yang menentukan isi halaman punya rumah sendiri.

5分 コメント0件

目次

Semakin banyak route yang isinya fungsi panjang, semakin sulit file web.php dibaca. Controller memecahkannya: satu class dengan beberapa method, masing-masing menangani satu alamat. Kita buat satu lewat artisan:

php artisan make:controller NoteController

Laravel membuat file app/Http/Controllers/NoteController.php yang masih kosong. Isi dengan dua method:

<?php

namespace App\Http\Controllers;

class NoteController extends Controller
{
    public function index()
    {
        return 'Daftar catatan dari controller.';
    }

    public function show($id)
    {
        return "Catatan nomor $id dari controller.";
    }
}

Lalu di routes/web.php, ganti route percobaan kemarin supaya menunjuk ke controller. Jangan lupa baris use di atas:

use App\Http\Controllers\NoteController;

Route::get('/catatan', [NoteController::class, 'index'])->name('catatan.index');
Route::get('/catatan/{id}', [NoteController::class, 'show'])->name('catatan.show');

Bentuk [NoteController::class, 'index'] dibaca: "class NoteController, method index". Buka lagi /catatan dan /catatan/5; hasilnya sama seperti sebelumnya, tapi sekarang logikanya punya rumah.

Soal penamaan

Ada kebiasaan yang dipakai hampir semua proyek Laravel, dan sebaiknya kamu ikuti supaya kodemu terasa akrab bagi orang lain:

  • Nama controller tunggal, diakhiri Controller: NoteController, bukan NotesController.
  • Nama method mengikuti tujuh kata ini: index (daftar), create (formulir tambah), store (simpan data baru), show (satu data), edit (formulir ubah), update (simpan perubahan), destroy (hapus).

Tujuh method itu persis yang akan kita isi di bab 4. Laravel bahkan punya jalan pintas untuk mendaftarkan ketujuh route-nya sekaligus, Route::resource, tapi untuk sekarang kita tulis satu per satu supaya kamu tahu apa yang terjadi.

Middleware, sekilas

Kadang kamu ingin sebuah halaman hanya bisa dibuka oleh yang sudah masuk. Di Laravel, penjaga seperti itu disebut middleware, dan sejak Laravel 13 ia bisa ditempel langsung di atas class atau method controller:

use Illuminate\Routing\Attributes\Controllers\Middleware;

#[Middleware('auth')]
class NoteController extends Controller
{
    // ...
}

Jangan tambahkan ini ke proyek kita sekarang, karena kita belum punya fitur login; kamu malah akan terkunci dari halaman sendiri. Saya sebut supaya kamu mengenali bentuknya saat melihatnya di proyek lain.

Controller kita masih mengembalikan teks polos. Materi berikutnya menggantinya dengan HTML sungguhan lewat Blade.

ディスカッション

コメントするにはログインしてください。 ログイン

まだディスカッションはありません。最初の質問をしてみましょう。