Validasi, Create, Update dan Delete data pada Laravel 10 #7

Selanjutnya kita akan menambahkan form edit data agar bisa melakukan update pada field yang sudah kita tambahkan. Langkah awal kita akan menambahkan route sebagai berikut :

    Route::get('/students/edit/{idstudents}', [StudentsController::class, 'edit'])->name('students/edit');
    Route::get('/update/{idstudents}', [StudentsController::class, 'update'])->name('update');

Penjelasan :

Route::get('/students/edit/{idstudents}', [StudentsController::class, 'edit'])->name('students/edit');Baris kode ini berarti bahwa ketika pengguna melihat URL /students/edit/{idstudents} (di mana {idstudents} adalah variabel untuk ID siswa yang akan diedit) di browser mereka, Laravel akan menjalankan metode edit yang ada di StudentsController. Metode ini biasanya digunakan untuk menampilkan halaman web yang berisi formulir pengeditan data siswa. Kode ->name('students/edit') memberikan panggilan nama alias atau alias untuk rute ini sehingga bisa dipanggil dengan mudah nanti.

Selanjutnya kita akan membuat halaman edit.blade.php pada folder views/students berikut adalah code didalamnya :

<x-app-layout>
    <x-slot name="header">
        <h2 class="font-semibold text-xl text-gray-800 leading-tight">
            {{ __('Edit Data Students') }}
        </h2>
    </x-slot>

    <div class="py-12">
        <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
            <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg p-3">
                <div class="card">
                    <div class="card-header">
                        <button type="button " class="btn btn-sm btn-warning" onclick="window.location='{{ url('students') }}'" >
                            <i class="fa fa-arrow-circle-left" aria-hidden="true"></i> Back
                        </button>
                    </div>
                    <div class="card-body">
                        <form action="{{ url('update/'. $txtid) }}">
                            @csrf
                            <div class="row mb-2">
                                <label for="txtid" class="col-sm-2 col-form-label">ID Students</label>
                                <div class="col-sm-2 mt-auto">
                                  {{$txtid}}
                                </div>
                            </div>
                            <div class="row mb-2">
                                <label for="txtfullname" class="col-sm-2 col-form-label">Full Name</label>
                                <div class="col-sm-10">
                                  <input type="text" class="form-control form-control-sm" id="txtfullname" name="txtfullname" value="{{$txtfullname}}" required>
                                </div>
                            </div>
                            <div class="row mb-2">
                                <label for="txtgender" class="col-sm-2 col-form-label">Gender</label>
                                <div class="col-sm-2">
                                  <select class="form-select form-select-sm" name="txtgender" id="txtgender" required>
                                    <option value="">--Choose--</option>
                                    <option value="M" {{ ($txtgender=='M') ? 'selected' : '' }}>Male</option>
                                    <option value="F" {{ ($txtgender=='F') ? 'selected' : '' }}>Female</option>
                                  </select>
                                </div>
                            </div>
                            <div class="row mb-2">
                                <label for="txtemail" class="col-sm-2 col-form-label">Email</label>
                                <div class="col-sm-10">
                                    <input type="email" class="form-control form-control-sm" id="txtemail" name="txtemail" value="{{$txtemail}}" required>
                                </div>
                            </div>
                            <div class="row mb-2">
                                <label for="txtphone" class="col-sm-2 col-form-label">Phone Number</label>
                                <div class="col-sm-2">
                                    <input type="text" class="form-control form-control-sm" id="txtphone" name="txtphone" value="{{$txtphone}}" required>
                                </div>
                            </div>
                            <div class="row mb-4">
                                <label for="txtaddress" class="col-sm-2 col-form-label">Address</label>
                                <div class="col-sm-10">
                                  <textarea class="form-control form-control-sm" name="txtaddress" id="txtaddress" cols="30" rows="10">{{$txtaddress}}</textarea>
                                </div>
                            </div>
                            <div class="row mb-2">
                                <label for="" class="col-sm-2 col-form-label"></label>
                                <div class="col-sm-10">
                                  <button type="submit" class="btn btn-sm btn-warning bg-warning"><i class="fa fa-floppy-o" aria-hidden="true"></i>   Update</button>
                                </div>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
</x-app-layout>

Selanjutnya tambahkan methode edit pada StudenstController seperti dibawah ini :

    public function edit(Students $students, $idstudents)
    {
        $data = $students->find($idstudents);

        return view('students/edit')->with([
            'txtid' => $idstudents,
            'txtfullname' => $data->fullname,
            'txtaddress' => $data->address,
            'txtemail' => $data->emailaddress,
            'txtphone' => $data->phone,
            'txtgender' => $data->gender,
        ]);
    }

Penjelasan :

public function edit(Students $students, $idstudents) Mendeklarasikan fungsi publik bernama ‘edit’ yang menerima dua argumen. Argumen pertama adalah instance dari kelas ‘Students’ dan argumen kedua adalah ID siswa yang akan diedit.

$data = $students->find($idstudents); Di baris ini, kita mencari siswa dengan ID yang diberikan di database. find($idstudents) adalah fungsi Laravel Eloquent yang digunakan untuk mencari dan mengambil data dari database berdasarkan ID yang diberikan.

Kemudian, kita mengembalikan view students/edit, yang berarti bahwa kita ingin menampilkan halaman ‘edit’ yang ada di direktori ‘students’.

Fungsi with() digunakan untuk mengirim data ke view tersebut. Dalam hal ini, kita mengirimkan array asosiatif berisi data siswa yang ingin kita edit.

Kuncinya, ‘txtid’, ‘txtfullname’, dll, akan menjadi variabel yang dapat diakses di dalam view itu.

Pada intinya, fungsi ini digunakan untuk mengambil data siswa berdasarkan ID, lalu mengembalikan sebuah view (halaman) dengan data siswa tersebut agar dapat diedit.

Selanjutnya tambahkan lagi methode update seperti pada code dibawah :

    public function update(UpdateStudentsRequest $request, Students $students, $idstudents)
    {
        $data = $students->find($idstudents);

        $data->fullname = $request->txtfullname;
        $data->gender = $request->txtgender;
        $data->emailaddress = $request->txtemail;
        $data->phone = $request->txtphone;
        $data->address = $request->txtaddress;
        $data->save();

        return redirect('students')->with('msg', 'Student data has been successfully changed');
    }

Penjelasan :

Fungsi public function update(UpdateStudentsRequest $request, Students $students, $idstudents) ini adalah berfungsi untuk memperbarui data siswa dalam database.

Fungsi ini menerima tiga parameter:

  1. $request: instance dari kelas ‘UpdateStudentsRequest’. Ini merupakan argumen berisi data yang dikirim dari form dalam bentuk request.
  2. $students: instance dari kelas ‘Students’. Ini adalah representasi dari model data siswa.
  3. $idstudents: ID siswa yang akan diperbarui.

$data = $students->find($idstudents); baris ini digunakan untuk mencari dan mendapatkan data siswa berdasarkan ID yang disimpan dalam variabel $idstudents.

Kemudian, $request->txtfullname$request->txtgender, dan seterusnya adalah mengambil data dari form yang dikirim melalui request dan menugaskan data tersebut ke properti yang sesuai dari objek $data.

$data->save(); digunakan untuk menyimpan perubahan data ke database.

Setelah data berhasil disimpan, return redirect('students')->with('msg', 'Student data has been successfully changed'); digunakan untuk mengarahkan pengguna kembali ke halaman ‘students’ dan mengirimkan pesan “Student data has been successfully changed” yang bisa ditampilkan di halaman tersebut.

Lalu buka file UpdateStudentsRequest.php lalu buat authorize() menjadi true

    public function authorize(): bool
    {
        return true;
    }

Penjelasan :

Fungsi authorize() ini digunakan untuk menentukan apakah pengguna yang saat ini otentik (logged in) memiliki otorisasi untuk melanjutkan request yang diajukan.

Dalam hal ini, dengan mengembalikan nilai true, maka diartikan bahwa setiap user yang saat ini otentik punya hak untuk melanjutkan request, tanpa ada pengecekan lebih lanjut.

Dan hasilnya adalah sebagai berikut :

Share your love