Transcript for:
Pembelajaran Model dan MVC di Laravel 11

Halo teman-teman semua, apa kabar? Semoga semuanya dalam keadaan sehat dan berbahagia ya. Mari kita lanjutkan kembali playlist belajar Laravel 11 kita. Masih bersama saya, Sandika Gali, di channel WPU. Dan di video kali ini, setelah sebelumnya kita sudah berhasil untuk membuat data dan mengirimkannya ke dalam view, kita akan sama-sama belajar. Kali ini kita akan sama-sama belajar mengenai pembuatan sebuah model di dalam Laravel. Jadi kita akan ubah. data yang sudah kita kirimkan secara manual menggunakan array dari video sebelumnya itu kita akan ubah menjadi model supaya kita bisa interaksikan di dalam routernya maupun di dalam view-nya. Dan nanti juga kita akan sedikit menyinggung mengenai konsep MVC yang ada di dalam Laravel ya. Konsep MVC itu model, view, dan juga controller. Dan masih banyak lagi hal-hal yang nanti kita akan masukkan ke dalam materi di video kali ini. Jadi pasti seru banget. Jadi tanpa berlama-lama lagi kita langsung aja masuk ke materinya. Oke teman-teman, jadi di video kali ini yang akan kita lakukan adalah memperbaiki halaman post kita atau halaman blog kita agar menggunakan satu sumber data. Karena saat ini kalau teman-teman lihat di codingnya, silakan dibuka dulu codenya ya. Nah ini ya teman-teman silakan buka halaman web atau routes kita. Kita tahu bahwa kita punya dua buah rute ya. Ada rute post untuk menampilkan seluruh data post dan ada rute post yang singular. Nah masing-masing dari rute ini menduplikat data postnya. Nah kita akan tarik supaya datanya hanya satu, nggak diduplikat ya. Supaya apa? Supaya nanti kalau ada perubahan atau penambahan data, nggak perlu mengubah keduanya. Nah gimana caranya? Ini kan sebetulnya kita bisa tarik keluar ya, ke atas ini. Misalkan kita bisa aja bikin variable post di sini. Nah tapi supaya lebih mudah, kita akan bungkus ke dalam sebuah kelas teman-teman. Kelas misalnya kita kasih namanya posts. Kita kasih kelas namanya posts. Nah kenapa kita bikin kelas pose? Nah ini supaya nanti ke depannya ketika kita mau masuk belajar mengenai model Ini jadinya masuk akal gitu ya Sekarang kita bikin dulu aja secara manual Kita bikin kelas pose yang nanti di dalamnya Saya mau bikin sebuah metode static untuk menampilkan seluruh data Ya jadi misalkan kita bikin metode tuh gini kan Ya akses modifiernya public Supaya bisa diakses di luar kelas ini pun ya Tapi sebelum function kita kasih static dulu Public static function misalnya kita kasih namanya all Ini untuk menampilkan seluruh data postingan kita. Nanti di sini, di dalamnya, kita kembalikan data. Kita langsung return aja data postnya. Jadi kita tinggal kopikan isi dari postnya aja. Arraynya aja teman-teman. Kita kopikan arraynya aja atau kita cut ya. Kita cut arraynya aja. Ambil dari post yang banyak dulu. Kita taruh di sini. Kita kasih koma ya. Sudah, jadi sekarang mengembalikan nilai sebuah array yang di dalamnya ada dua buah artikel. Nah, kalau sudah dibuat, tinggal kita ganti ya. Sekarang kita ganti data yang dikirim, itu kita ambil dari kelas yang ada di atas. Cara nulisnya kalian tinggal tulis saja, post, nama kelasnya. Terus untuk memanggil metode staticnya, teman-teman tinggal kasih titik 2 dua kali. Kita tulis nama metodenya, all. Begini, sudah selesai. Jadi ini mengacu ke kelas post yang ada di atas. All ini mengacu ke method staticnya. Kalau kita jalankan, kita lihat. Kita refresh. Masih aman ya. Tampil semuanya. Sekarang kita lakukan hal yang sama ketika kita mau mengambil data di halaman single postnya. Jadi kita nggak perlu lagi. Ini array post, nggak butuh. Nanti kita hapus ya. Kita hapus. Jadi nggak butuh. Nah ini kan error nih. Karena kita udah nggak punya variable array tadi. Sekarang kita ambilnya dari mana? kita ambil dari kelas post ambil metodenya all udah, jadi sekarang sumber datanya hanya satu, kelas post aja kita coba, refresh klik, aman ya, klik yang ini oke, jadi itu datanya gak lagi duplikat, ini udah benar, tapi problem berikutnya muncul kita gak mungkin naruh kelas post di dalam root, ya kan peruntukannya juga ada berbeda ya, root atau halaman web ini digunakan untuk melakukan penjaluran dari request. Nah, kita harus pindahin ini ke sebuah tempat. Masalah kita akan pindahinnya kemana nih sekarang? Sebelum kita pindahkan, kita harus paham dulu di dalam Laravel itu konsep yang dinamakan dengan MVC atau Model View Controller. Karena PHP sebetulnya mengadopsi konsep tersebut walaupun nggak benar-benar MVC ya. Nah, mungkin kita bisa kembali dulu ke slide ya. Ini secara umum gambaran bagaimana proses request yang terjadi di dalam Laravel ya. Jika teman-teman lihat, di sebelah kirinya ada angka 1. Pertama kali user melakukan request, misalkan membuka halaman ya. Saya mengunjungi halaman home atau saya mengunjungi halaman post. Jadi dia ketik di URL atau klik sebuah tombol. Nah yang akan terjadi pertama kali adalah Laravelnya akan mengakses routing. Halaman route, ya dalam hal ini web.php. Dia akan cari route mana yang sesuai. Kalau sudah, ketemu misalkan halamannya slash atau halamannya slash post. Nanti dia akan menjalankan sebuah proses yang biasanya prosesnya itu ditangani oleh sebuah controller. Nah tapi karena yang kita buat itu masih simple, prosesnya masih bisa ditangani oleh routernya. Jadi kita belum masuk ke controller, jadi kita belum punya controller. Anggap aja router yang kita buat itu saat ini menggantikan si controller. Jadi ada controller yang mengendalikan prosesnya, ambil data, mengirimkan data, itu di dalam controller. Nanti kalau sebuah controller ini butuh bisnis logik, mengambil data dari database, atau memproses sebuah query, itu biasanya ditangani oleh model. Karena model itu bertugas untuk mengelola bisnis logik. Nanti kalau sudah dapat, misalkan saya butuh semua data post, nanti dia cek model ini terkoneksi ke database apa enggak. Atau datanya diambil dari mana sih? Apakah dari database? Atau dari API? Atau misalkan datanya masih kita buat sendiri seperti contoh di episode kali ini ya. Itu model yang mengelolanya. Nanti kalau udah dapet, datanya dikembalikan lagi ke controller. Kalau butuh diproses, diproses lagi. Setelah itu baru datanya dikirim ke view. Nah dari view itu kembali lagi ke user. Jadi ini skemanya yang terjadi ketika kita melakukan sebuah request. Nah dengan contoh ini, berarti kan tadi kelas post yang kita punya, itu harusnya kita representasikan ke dalam sebuah model. Karena dia mengelola data ya. Datanya berupa data postingan. Yang ke depannya ketika nanti aplikasi kita jadi lebih kompleks lagi nggak lagi ditulis dalam bentuk array. Tapi mungkin kita akan simpan ke dalam database. Jadi sekali lagi kita akan representasikan ke dalam sebuah model. Mari kita kembali ke codingan kita lagi. Jadi class post ini nggak akan ditulis di sini ya. Teman-teman boleh cut atau kita bikin dulu sebuah file ya. Kita buat filenya di dalam model. Ada di mana model? Model itu ada di dalam folder app, lalu folder models. Nah kalau teman-teman buka, saat ini kita sudah punya satu model default, yang namanya user.php. Nah kalau teman-teman buka, nanti di sini kita akan lihat, bentuknya juga sebuah kelas, kita abaikan dulu kelas-kelas lain yang di-load ke kelas ini ya. Ini kita abaikan dulu, kita fokus di kelasnya dulu aja. Jadi ada kelas namanya user, ini juga kita abaikan, extends authenticable, karena ini ada hubungannya sama autentikasi ya. Tapi yang pasti dia akan mengelola data user, yang biasanya satu kelas ini, dia merepresentasikan tabel yang ada di dalam database. Jadi biasanya kalau kita punya model user, Laravel itu secara default menganggap kita punya sebuah tabel, yang namanya users, ada S-nya. Jadi kelas ini adalah versi singular dari tabel. Yang biasanya juga dia punya pasangan berupa migrasi. Jadi kalau teman-teman buka di database, migrations, ada migrasi default yang namanya users. Jadi migrasi ini untuk membuat tabel users dan pasangan modelnya adalah user, nggak ada S-nya. Itu ya teman-teman ya. Nah maka dengan contoh ini kalau kita mau bikin model post, Kita harus punya sebuah kelas Kita bikin aja ya Di dalam model Namanya pose Gini Yang isinya Ini kita tutup dulu Ambil dari Kelas pose Yang ada di web tadi Silahkan di cut teman-teman Ini kita cut Kita masukkan ke dalam Pose Buka dulu tag php Tutupnya hapus Kita bikin disini Udah ya Kita udah punya modelnya nih Nah cuman kan masalahnya Sekarang Route kita nggak kenal model post ini. Jadi dia nggak langsung otomatis bisa kita gunakan. Coba kalau misalkan kita jalanin ya. Kita balik ke sini, kita refresh. Pasti error ya. Karena kelas postnya nggak ketemu katanya. Nah gimana cara memperbaikinya? Kita akan manfaatkan proses auto-loading yang ada di dalam Laravel. Jadi kalau misalkan teman-teman buka di explorernya, itu kita tutup dulu semua. Kita lihat di dalam kom... file composer.json kalau teman-teman lihat, ada sebuah package atau ada sebuah fitur yang namanya autoload. Nah, jadi Laravel ini sudah menganut otomatis loading kelas-kelas menggunakan standar PSR4. Nah, jadi semua kelas yang ada di dalam app, itu otomatis sebetulnya terbaca oleh Laravel. File post kita itu ada di dalam app, kan? Nah, harusnya bisa terbaca nih. Tapi kenapa nggak jalan? Karena nah Kelas pos kita harus kita simpan ke dalam sebuah namespace. Apa itu namespace? Dia adalah sebuah teknik untuk menyimpan kelas kita ke dalam folder yang spesifik. Kenapa? Supaya nggak bentrok dengan kelas lain yang namanya sama. Karena mungkin aja, teman-teman ya, karena Laravel itu framework yang cukup besar, dan nanti kalau kalian bikin aplikasi yang cukup besar, kalian mungkin aja punya nama kelas yang sama. Baik itu dengan... kelas-kelas yang kalian buat sendiri ataupun dengan kelas-kelas yang dimiliki oleh Laravel itu sendiri. Nah, makanya setiap kelas itu harus kita pisahkan ke dalam namespace kita sendiri supaya PHP-nya atau supaya Laravel-nya tahu kalau ini adalah kelas yang spesifik. Nah, makanya di atas ini kita harus tulis nih, seperti user. Nah, kita harus tulis begini. Kita harus kasih tahu bahwa kelas post kita itu namespacenya berada di app, nulisnya itu harus huruf besar ya, backslash, Models. Ini. Sama seperti ini. Nah ini untuk ngasih tau Laravelnya bahwa post ini berada di dalam folder app. Lalu di dalam folder models. Sehingga dia spesifik nih sekarang. Kalau sudah kita tulis secara spesifik. Tinggal kita gunakan di tempat yang kita butuhkan. Di mana? Di dalam folder web. Nah caranya sebetulnya teman-teman tinggal tulis aja use. Lalu nama. namespacenya. Tapi, kalau teman-teman melakukannya sudah benar, kalau kita klik kelas post yang sudah kita tulis di dalam rute ini, lalu kita klik kanan, lalu kita pilih import kelas, nah, udah munculnya di sini. App model post. Sekarang, kita bisa gunakan. Kita nggak lagi nulis langsung di dalam folder webnya, tapi kita sudah pindahkan ke namespace yang sesuai. Di mana? Di folder app model kelasnya post. Sekarang kalau kita jalanin, harusnya benar lagi. Nah ini sudah mengambil dari model, bukan lagi kita tulis di dalam file webnya. Mantap ya teman-teman ya. Berikutnya kita akan sedikit perbaiki model post kita, supaya sekarang kita bisa melakukan pencarian post yang spesifik, atau pencarian single postnya menggunakan static method yang kita bikin. Kalau sekarang kan proses pencariannya itu dilakukan di dalam routenya. Kalau teman-teman scroll, nah ini nih. Kita mencari pose dengan melakukan ini ya. Panggil fungsi array. Lalu kita lakukan pencarian gitu. Nah padahal ini adalah tugas dari model. Nah kalau misalkan rute ini kita anggap sebagai controller. Sebetulnya ini bukan tugas dari controller. Melakukan pencarian atau melakukan perubahan data. Karena itu masuknya ke business logic. Itu harusnya dibebankan pada model. Jadi bebannya harus ada di dalam model. Sehingga ini harus kita pindahin. Gimana cara pindahinnya? Coba teman-teman buka dulu model postnya lagi. Ini usernya close lagi ya. Composernya juga close. Udah nggak kita butuhin. Sekarang kita akan bikin fungsi baru. Fungsi static juga. Teman-teman kasih nama public static function. Misalnya kita mau ambil apa. Atau kita mau bikin apa. Misalnya fine gitu ya. Kita akan mencari sebuah post. Berdasarkan apa? Berdasarkan slug. Gini. Disini kita akan mengembalikan. Nah mengembalikan yang tadi yang ini. Jadi teman-teman boleh copy aja atau boleh cut. Taruh disini. Sekarang ini arraynya error. Kenapa? Karena kita nggak bisa menggunakan library array. Punyanya Laravel. Supaya kita bisa pakai harus diapain? Harus kita use. Kita import kelasnya. Pilih yang illuminate. Nah ini membuktikan bahwa kelas ARR itu ada dua. Di dalam seluruh library Laravel. kalau misalkan kita gak pake namespace ini pasti bentrok nama kelasnya sama karena kita pake proses autoloading karena Laravel kan pake proses autoloading gak boleh ada 2 kelas yang sama makanya harus kita pisahin pake namespace yang kita mau pake adalah yang ini illuminate support arr kalau udah dipilih pasti dia ada di atas sekarang kita bisa pake, makanya ini gak error jadi panggil fungsi array cari elemen pertama dari post post tuh yang ini Karena kita ada di dalam kelas yang sama, teman-teman nggak nulis pos. Tapi teman-teman nulisnya static ya. Ini diganti jadi static. Kalau misalkan nggak pakai static, itu kan biasanya kita tulisnya this ya. Kalau dalam sebuah metode, memanggil metode lain di kelas yang sama, itu pakainya this. Tapi karena kita pakainya static, nah tulisnya langsung static. Jadi ini memanggil metode all, yang ada di kelas yang sama. Jadi bebannya sekarang kita pindahkan ke sini. Tinggal di dalam web. itu kalian tinggal panggil metodenya panggil kelasnya titik 2, titik 2 find apa yang mau kita find? slot udah, jadi lebih simple ini ceritanya controller gitu ya kita anggap dulu sebagai controller si rute ini tugas dia hanya mencari abstraksinya kita pindahkan ke dalam post coba kita save kita coba balik refresh klik aman ya tuh aman sudah oke Paling kita bisa benerin gini ya teman-teman ya, kalau misalkan balik ke sini. Ini kan kita pakai teknik fungsi callback. Dari video sebelumnya kalau teman-teman ingat penjelasan kita, kita menggunakan slug karena dia variable global yang ada di sini ya. Kita nggak bisa kalau nggak pakai slug. Karena variable yang kita tulis di dalam sebuah function itu hanya bisa dipakai di dalam function itu aja. Nggak bisa dia ngintip keluar ke sini, nggak bisa. Makanya karena global dia taruh di sini. Kalau kalian nggak mau pakai use, di PHP versi 8 itu ada teknik yang namanya arrow function. Sama kayak javascript. Kalau teman-teman udah tau arrow function di javascript. PHP juga punya. Di dalam arrow functionnya PHP. Mirip dengan javascript. Dia gak punya konsep scope. Ya kalau di javascript tuh ada this. Di PHP juga sama. Gak ada. Jadi kita bisa tulis begini. Ini kita hapus. Cara nulis arrow function tuh. Kalian tulis fn. Kalau di PHP. Terus parameternya apa. Ini memakai spasi. Mau gak juga sama aja ya. Misalnya kita tulis post. Untuk meresentasikan satu buah post. Lalu kasih panah untuk arrow functionnya. Baru kita tulis return value-nya. Return value-nya tadi ya. Dollar post. Slug. Sama dengan slug. Nah kalau disini langsung bisa ditulis. Atau kita tulis dua baris dulu deh. Biar teman-teman nggak bingung ya. Saya undo dulu. Nah ini kita copy. Kita simpen di bawahnya aja. Nah ini saya ulang. Cara nulisnya jadi fn. Spasi. Post. Arrow function. Ini kita tinggal masukkan. Karena satu baris, nggak perlu pakai return. Sama kayak arrow function-nya javascript. Ini kita taruh di sini. Jadi sama aja caranya kalau mau pakai callback begini, kalau mau pakai arrow function begini. Ini lebih ringkas aja. Tapi sekali lagi, beban dari pencarian datanya udah dipindahin ke model. Ya, aman. Sip, masih sama. Ini kenapa kita buat manual pakai kelas, terus namanya find dan all. Nah ini supaya merepresentasikan ke depannya. kita akan menggunakan fungsi Laravel dengan nama metode yang sama. Nanti kalau kita udah menggunakan beneran model punyanya Laravel, kalau ini kan model yang kita bikin sendiri kan, belum ada fitur-fitur Laravelnya nih. Nanti modelnya Laravel juga udah punya yang namanya all, yang namanya fine, udah punya juga. Ya ya, mantap ya. Paling terakhir, gimana kalau misalnya postnya nggak ada? Kalau misalkan kita cari, ini kita tulis sembarang, nah kan error ya. Nah gimana supaya nggak error, kita kasih halaman 404 aja ketika postnya nggak ketemu. Kan tulisannya trying to access array offset on null. Ini biasanya pesan error yang cukup ngeselin ya, karena kita bingung salahnya di mana gitu. Kalau misalkan teman-teman mau sedikit memperbaiki, supaya lebih yakin dengan apa yang dikembalikan oleh si metodenya, teman-teman bisa ngasih return type di sini. saya kasih return type berupa array gitu supaya yakin yang dikembalikannya adalah array kalau bukan array contohnya null tadi kan bukan array maka pesan errornya akan lebih spesifik ini contohnya kalau saya refresh buat yang senang nulisnya pakai tipe ya bisa juga begini jadi sekarang return value must be type of array katanya null return langsung ketahuan salahnya di mana gitu disini nah kita harus perbaiki ini kalau teman-teman mau dihapus boleh juga ya Jadi yang pertama kita akan simpan dulu ini ke dalam sebuah variable ya. Jangan dulu di return. Kita simpan misalkan ke dalam variable post. Gini. Nanti kita cek. Jika postnya kosong. Kalian bisa tulis post sama dengan 0 atau not post juga bisa ya. Kita ambil nilai falsinya. Nah kalau kosong gimana? Kalau kosong kita kasih halaman 404. Nah di Laravel sekarang ada tekniknya. dengan cara memanggil metode abort aja gitu, kita kasih pesan atau kode pesannya adalah 404, gini, supaya kalau gak ada, sekarang tampilnya 404, gak tampil error kayak tadi gitu, ini kalau kalau kosong ya, tapi kalau ada nah ini kan masih error ya, karena tadi belum kita kembalikan kalau ada, kita return pause, gini, sip jadi kalau ketemu tampilin, tapi kalau nggak ketemu, langsung kita tampilin 404 nah, sip. Baik teman-teman, jadi itu tadi pembelajaran kita mengenai sedikit mengenai model ya, walaupun nanti ke depannya kita akan bahas lebih lanjut lagi mengenai model, karena yang tadi hanya baru mencicipi aja gimana cara bikin model, modelnya model kita sendiri lagi ya, belum pakai modelnya Laravel, tapi selain itu juga kita tadi udah ngebahas sedikit mengenai fitur auto loading bawaannya Laravel, dan juga konsep namespace agar kita pada saat membuat kelas itu tidak bentrok dengan kelas-kelas yang lain yang ada di dalam frameworknya jadi mungkin itu saja, mudah-mudahan bermanfaat episode kali ini teman-teman, dan mudah-mudahan teman-teman paham juga, kita akan ketemu lagi di episode berikutnya, saya Sari Gagali pamit dan seperti biasa, jangan lupa di tikun