Header Ads

Laravel : 2. Create

 sebelumnya kita sudah berhasil menampilkan data yang terdapat pada database ke halaman daftar di projek kita, nah sekarang kita akan membuat fungsi Create untuk menambahkan data kedalam database kita memlalu halaman tambah.

Artikel ini merupakan kelanjutan dari artikel Read laravel 8, pastikan kalian sudah membacanya.

Sekarang kita akan pergi menuju halaman daftar.blade.php, dihalaman itu pastinya kalian akan menemukan codingan seperti ini.

<a class="btn btn-primary float-right mt-2" href="{{url('/tambah')}}" role="button">Tambah Siswa</a>

sekarang kalian ubah codingan itu menjadi

<a class="btn btn-primary float-right mt-2" href="/daftar/tambah" role="button">Tambah Siswa</a>

Mengapa demikian? pada codingan sebelumnya, kitab hanya membuat tombol tersebut terhubung ke halaman tambah.blade.php, padahal seharusnya ketika kita menekan tombol tersebut, maka seharusnya tombol tersebut menjalankan aksi dari controller. untuk melakukan itu, kita mengubah href nya.

Sekarang kita beralih ke web.php, sebelumnya kita membuat route untuk ke halaman tambah.blade.php seperti ini

Route::get('tambah', function () {
return view('tambah');
});

Nah, sekarang kita akan mengubah route tersebut agar terhubung dengan controller daftar. ubah menjadi seperti ini

Route::get('daftar/tambah','App\Http\Controllers\DaftarController@create');

Disini kalian membuat pengaturan route, jika diakses route ‘daftar/create’, maka kalian perintahkan untuk menjalankan method create yang ada di dalam controller DaftarController.

sekarang kita isi method create() untuk memerintahkan agar method ini dapat menampilkan view Halaman Tambah siswa.

laravel_practice →app →Http →Controllers →DaftarController.php

public function create() 
{
// memanggil view create
return view('create');
}

jika sudah, kalian coba refresh browser kalian lalu coba tekan tombol tambah siswa, maka kalian akan langsung dibawa ke halaman tambah siswa yang tentunya melalui controller.

Jika sudah membuat method create(), maka sekarang kita isi method store() untuk memasukkan data yang mau kita tambahkan.

app →Http →Controllers →DaftarController.php

public function store(Request $request)
{
// untuk validasi form
$this->validate($request, [
'nama_siswa' => 'required',
'jurusan' => 'required',
'angkatan' => 'required',
'kelas' => 'required',
]);
DB::table('students')->insert([
'nama_siswa' => $request->nama_siswa,
'jurusan' => $request->jurusan,
'angkatan' => $request->angkatan,
'kelas' => $request->kelas,
]);
return redirect('/daftar')->with('status', 'Data siswa Berhasil Ditambahkan');
}

Didalam method store() , kita akan menangkap data yang sudah diinputkan. lalu beri keterangan Request di ikuti dengan nama variabel yang ingin kalian jadikan sebagai penyimpan data yang dikirim dari form. nah, di sini secara otomatis sudah ada variabel $request.

public function store(Request $request)
{

}

Oh ya, jangan lupa untuk membuat validasinya agar ketika ada data yang masih kosong, maka data tidak akan langsung distore dan akan muncul pesan pemberitahuan.

$this->validate($request, [
'nama_siswa' => 'required',
'jurusan' => 'required',
'angkatan' => 'required',
'kelas' => 'required',]);

Setelah kita membuat validasi maka kita insert data nya ke table students dengan menggunakan query builder laravel untuk insert data.

DB::table('students')->insert([
'nama_siswa' => $request->nama_siswa,
'jurusan' => $request->jurusan,
'angkatan' => $request->angkatan,
'kelas' => $request->kelas,
]);

Fungsi table() untuk memberitahukan nama table yang sedang dipakai , sedangkan fungsi insert([]) bertujuan untuk memasukkan data dan menetapkan data apa saja yang ingin di insert.

setelah kalian memasukkan datanya ke table students maka kalian perintahkan untuk mengalihkan halaman tambah ke halaman daftar atau ke route ‘daftar’ kembali disertai dengan notifikasi.

return redirect('/daftar')->with('status', 'Data siswa Berhasil Ditambahkan');

Oh ya, sekarang kita akan ke halaman daftar.blade.php untuk membuat session yang dapat menangkap notifikasi dari DaftarController.php.

<!-- ditulis setelah tag </div> penutup Daftar siswa -->
<div class="col-6">
@if (session('status'))
<div class="alert alert-success alert-dismissible fade show" role="alert">
{{ session('status') }}
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
@endif
</div>
<!-- ditulis sebelum tag <div> pembuka tabel -->

Nah setelah ini kita akan mengedit isi dari tag <form> yang terdapat pada tambah.blade.php , Ubah isi form yang lama dengan yang dibawah.

resources →views →tambah.blade.php

<form action="/daftar/store" method="post">{{csrf_field()}}<div class="form-group"><label for="nama_siswa">Nama Siswa</label><input class="form-control @error('nama_siswa') is-invalid @enderror" type="text" name="nama_siswa" value="{{ old('nama_siswa') }}" id="nama_siswa" placeholder="Masukkan Nama Siswa"> @error('nama_siswa')<div class="invalid-feedback">{{ $message }}</div>@enderror</div><div class="form-group"><label for="jurusan">Jurusan</label><input class="form-control @error('jurusan') is-invalid @enderror" type="text" name="jurusan" value="{{ old('jurusan') }}" id="jurusan" placeholder="masukkan Nama Jurusan">@error('jurusan')<div class="invalid-feedback">{{ $message }}</div>@enderror</div><div class="form-group"><label for="angkatan">Angkatan</label><input class="form-control @error('angkatan') is-invalid @enderror" type="text" name="angkatan" value="{{ old('angkatan') }}" id="angkatan" placeholder="masukkan tahun angkatan">@error('angkatan')<div class="invalid-feedback">{{ $message }}</div>@enderror</div><div class="form-group"><label for="kelas">Kelas</label><input class="form-control @error('kelas') is-invalid @enderror" type="text" name="kelas" value="{{ old('kelas') }}" id="kelas" placeholder="masukkan kelas">@error('kelas')<div class="invalid-feedback">{{ $message }}</div>@enderror</div><div class="form-group float-right"><button class="btn btn-lg btn-danger" type="reset">Reset</button><button class="btn btn-lg btn-primary" type="submit">Submit</button></div></form>

untuk action form-nya kita arahkan ke route ‘daftar/store’, karena kita ingin routenya yang akan menangani proses data yang diimput agar bisa diolah oleh controller.

Oh iya, disini kalian berjumpa dengan 1 fitur keren laravel yaitu csrf protection. CSRF protection adalah fitur keamanan untuk pencegahan penginputan data dari luar aplikasi atau sistem kalian. hanya dengan menambahkan perintah {{csrf_field()}} seperti diatas, maka laravel akan meng-generate koden toke otomatis yang dibuat dalam bentuk hidden.

bedakan dengan tanpa csrf protection

Jika tombol submit diklik maka kita belum bisa memasukkan data ke database karena belum menghubungkan view dengan controller. Bagaimana solusinya? Tambahkan ini pada web.php

Route::post('/daftar/store', 'App\Http\Controllers\DaftarController@store');

Pada route ini kalian menggunakan method “post“, tidak lagi menggunakan method “get” seperti pada route sebelumnya yang kita buat karena kita akan mengirimkan data melalui form ke route ‘/daftar/store’.

Ketika kita mengklik tombol submit, maka fungsi store yang terdapat pada DaftarController.php akan dijalankan

Jadi untuk bagian Create laravel ini, kita memakai 2 route

sekarang kalian coba akses

http://localhost:8000/daftar

Lalu klik button tambah, maka kalian akan diarahkan ke halaman tambah.blade.php

Tampilan halaman tambah siswa

Cobalah untuk mengisi form namun jangan sampai semuanya, lalu klik submit

Ketika sudah disubmit namun user belum melngkapi datanya

Cobalah untuk mengisi semua form lalu klik submit

Data berhasil ditambahkan

Taraaa!!! data sudah berhasil kita tambahkan, lalu sekarang apa? selanjutnya kita akan melakukan edit dan delete pada data yang sudah kita tambahkan, tunggu artikel selanjutnya dari CRUD series ini ya….

Tidak ada komentar

Diberdayakan oleh Blogger.