Tutorial Codeigniter 4
Tutorial Codeigniter 4
com
7-9 minutes
Bagus.
Framework telah terbukti banyak membantu web developer dalam mengembangkan web.
Proyek web yang diperkirakan bisa jadi dalam satu bulan, dengan framework..
Hebat kan.
Karena itu, kamu harus menggunakan framework agar bisa membuat web lebih cepat dan juga
hemat biaya dan tenaga.
Baiklah…
Jadi:
Saya yakin, kamu yang sedang membaca artikel ini sudah pernah membuat web dengan PHP.
Tapi..
Kode website kita akan semakin ribet dan berantakan. Bisa jadi disbeabkan karena kita asal-
asalan menambahkan kode.
Belum lagi, kita dituntut menulis kode yang rapi agar bisa dipahami orang lain (misalnya teman
satu tim).
Maka di sini kita tidak boleh seenaknya menulis kode yang asal-asalan.
Kerangka kerja dibuat agar kita bisa bekerja lebih mudah. Biasanya, framework menyediakan
bahan-bahan yang siap pakai, sehingga kita tidak harus membuatnya dari nol.
Harus menaruh kode yang memiliki fungsi yang sama dalam satu folder;
Harus mengikuti aturan penulisan kode (writing conventions) yang disepakati;
Harus menggunakan pola desain ini, dan itu;
dan lain sebagainya.
Framework adalah sebuah kerangka kerja yang digunakan untuk membantu developer dalam
mengembangkan kode aplikasi secara konsisten.
Lalu..
Codeigniter terkenal dengan konsep MVC-nya. MVC merupakan singkatan dari Model–View–
Controller.
Nanti kita akan bahas lebih dalam tentang MVC pada: Konsep dasar Framework Codeigniter.
Ada beberapa kelebihan CodeIgniter (CI) dibandingkan dengan Framework PHP lain,
Performa cepat: Codeigniter merupakan framework yang paling cepat dibanding framework
yang lain. Karena tidak menggunakan template engine dan ORM yang dapat memperlambat
proses.
Konfigurasi yang minim (nearly zero configuration): tentu saja untuk menyesuaikan dengan
database dan keleluasaan routing tetap diizinkan melakukan konfigurasi dengan mengubah
beberapa file konfigurasi seperti database.php atau autoload.php, namun untuk
menggunakan codeigniter dengan setting standard, anda hanya perlu mengubah sedikit saja
pada file di folder config.
Memiliki banyak komunitas: Komunitas CI di indonesia cukup ramai, tutorialnya pun mudah
dicari.
Dokumentasi yang lengkap: Codeigniter disertai dengan user_guide yang berisi dokumentasi
yang lengkap.
Mudah dipelajari pemula: Bagi pemula, CI sangat mudah dipelajari. Karena CI tidak terlalu
bergantung pada tool tambahan seperti composer, ORM, Template Engine, dll.
Saat ini ada sekitar 753.660 website yang menggunakan Codeigniter di seluruh dunia, dan di
indonesia sendiri terdapat sekitar 17.505 website yang menggunakan Codeingiter. 2
jakartaglobe.id
jawapos.com
itb.ac.id
ipb.ac.id
indihome.co.id
cs.kaskus.co.id
sipma.ui.ac.id
epaper.republika.co.id
ibt.ristekdikti.go.id
project.co.id
pu.go.id
mechanical-rally.petra.ac.id
fo3.garena.co.id
ird.widyatama.ac.id
bkddki.jakarta.go.id
idws.id
Catatan: website ini bisa saja berubah-ubah dan berganti framework Data ini diambil dari
buildwith.com
pada tanggal 19 Agustus 2020.
Sudah sekian lama tidak dikembangkan. EllisLab akhirnya ingin memberikan proyek
Codeigniter kepada orang lain.
Pada tanggal 9 Juli 2013, EllisLab mencari pemilik baru Codeigniter. Akhirnya pada tanggal 6
Oktober 2014 pengembangan Codeigniter dialnjutkan dibawa kepengurusan dari British
Columbia Institute of Technology (BCIT).
Lalu..
Pada tanggal 23 Oktober 2019, Codeigniter Foundation mengambil alih proyek ini dan tidak
lagi dibawa kepengurusan BCIT.
Tanggal ini diambil, sebagai penghormatan terakhir kepada Jim Parry yang telah meninggal
dunia pada tanggal 15 Januari 2020. 3
Akun Github Jim Parry
R.I.P Jim Parry, terimakasih atas kontribusinya di Codeigniter 4.
Codeigniter 3, adalah codeigniter yang dirilis oleh BCIT dan ditargetkan untuk digunakan pada
PHP 5.
Jadi, masih akan ada update terbaru di versi 3 hingga waktu yang belum ditentukan.
Sementara itu Codeigniter 4, ditargetkan untuk digunakan pada PHP 7 ke atas. Versi ini dirilis
oleh Codeigniter Foundation dan akan menjadi generasi penerus Codeigniter 4.
Nah, itulah beberapa perbandingan dari segi teknis. Semoga kamu bisa menentukan versi
Codeigniter yang akan dipelajari.
Kalau bedasarkan pilihan pribadi, saya lebih menyarankan belajar yang versi 4, karena punya
lebih banyak fitur dan lebih canggih dan juga terupdate.
Apa Selanjutnya?
Sejauh ini, kita sudah mengenal Codeigniter. Mulai dari mempelajari sejarah dan asal usulnya.
Hingga versi terbaru saat ini.
Jika kamu sudah menentukan versi Codeigniter yang akan dipelajari, silahkan lanjutkan ke:
Selamat belajar.
1. Wikipedia. “Codeigniter”
petanikode.com
Sebelum mulai belajar Codeigniter 4 lebih, kita harus meyiapkan alat yang dibutuhkan untuk
coding Codeigniter 4.
Apa Saja itu?
Memahami basic bahasa pemrograman PHP. Silahkan, ikuti tutorial basic pemrograman
PHP jika kamu belum menguasainya.
Untuk bisa belajar Codeigniter dengan lancar setidaknya kamu sudah paham konsep
pemrograman berorientasikan objek (OOP) dengan PHP.
Memahami sintaks dasar SQL;
Nah, setelah prasyarat ini terpenuhi. Selanjutnya silahkan siapkan alat-alatnya untuk mulai
belajar.
1. Teks Editor
2. Web Browser
3. Web Server: PHP, MySQL, Phpmyadmin
4. Composer
5. File Project Codeigniter
1. Teks Editor
Teks editor akan kita gunakan untuk menulis kode. Kamu bebas menggunakan teks editor apa
saja untuk coding CI.
Saya merekomendasikan menggunakan VS Code, karena mudah digunakan dan punya banyak
fitur.
Untuk menginstal VS Code, silahkan baca:
2. Web Browser
Web browser akan kita gunakan untuk melihat hasil dari aplikasi. Kamu juga bebas
menggunakan web browser apapun, asalkan masih mendukung teknologi web modern zaman
sekarang.
3. Web Server
Codeigniter merupakan framework PHP, karena itu ia pasti membutuhkan web server. Berikut
ini requirement server untuk Codeigniter 4:
Jika kamu sudah menginstal XAMPP, maka ketiga aplikasi server ini sudah terpenuhi. Tapi jika
kamu pengguna Linux, maka ini bisa diinstal satu-per-satu.
Silahkan baca:
Setelah menginstal webserver, kita harus mengaktifkan beberapa ekstension yang dibutuhkan
untuk pengembangan CI 4.
Untuk kamu yang menggunakan Windows dan XAMPP. Silahkan buka XAMPP Control Panel,
lalu pada bagian apache klik Config->PHP.
Setelah itu, cari di bagian extension dan hapus ; yang ada di depan nama extension untuk
mengaktifkannya.
4. Composer
Composer adalah program berbasis command line (CLI) untuk menajemen proyek PHP. Tugas
dari composer adalah melakukan instalasi paket, membuat proyek baru, menjalankan script, dan
lain-lain.
Jika kamu ingin belajar tentang composer lebih lanjut, silahkan baca:
Silahkan ikuti:
Setelah prosesnya selesai, kita akan mendapatkan folder baru dengan nama ci-news.
Setelah itu buka terminal dengan menekan Ctrl+` dan jalankan perintah:
Coba buka web browser dan arahkan ke alamat http://localhost:8080, maka hasilnya:
Selamat. 👏👏👏
CI 4 sudah berhasil diinstal.
1. Download Codeigniter;
2. Ekstrak File ZIP Codeigniter ke htdocs.
untuk mendownload.
Note: Biar versi CI4 sama dengan versi yang digunakan pada tutorial ini, yakni 4.0.4.. silahkan
Download CI dari link ini
Kita akan mendapatkan sebuah file zip 📦 framework-4.x.x.zip, ekstrak file tersebut ke dalam
c:\xampp\htdocs (XAMPP) atau /var/www/html (di Linux).
Silahkan buka folder ci-news dengan Visual Studio Code, lalu buka terminal dan ketik perintah
berikut.
Secara default, fitur ini belum aktif. Jika ada error pada aplikasi, maka ia akan menampilkan
pesan Whoops! seperti ini:
Kita tidak akan bisa tahu tempat masalahnya jika aplikasi cuma menampilkan ini. Cocoknya ini
dipakai pada aplikasi production.
Nah, untuk mengaktifkan mode debugging, kita harus mengubah environment variabel
CI_ENVIRONMENT menjadi development.
Silahkan buka file env, kemudian cari variabel CI_ENVIRONMENT dan ubahlah nilainya menjadi
development.
Setelah itu, ubah nama file env menjadi .env (tinggal tambah titik di depan).
Sekarang, coba buat sebuah kesalahan. Misalnya, saya menghapus titik koma pada controller
Home.
Lalu buka kembali aplikasinya.
Maka hasilnya:
Nah, dengan begini.. kita bisa debug aplikasi dengan lebih mudah. CI akan ngasih tahu, di mana
letak error-nya.
Nanti, setelah kita selesai mengembangkan aplikasi. Ubah kembali CI_ENVIRONTMENT menjadi
production.
Buat kamu yang menginstal CI4 secara manual di htdocs, ada baiknya membuatkan virtual host
agar memudahkan dalam proses development.
Virtual host adalah alamat khusus yang kita buat di localhost untuk mengakses aplikasi.
Nama domain yang digunakan terserah kita, bisa .com, .net, .web, dan sebagainya.
Tapi..
Biar tidak membingungkan dan bentrok dengan domain yang sudah ada di internet, kita berikan
domain .test atau .local saja.
Untuk kamu pengguna Linux atau Mac, bisa mengikuti cara berikut. Silahkan buka Terminal lalu
ketik.
Perintah ini akan melakukan copy dari konfigurasi default host apache.
Setelah itu, buka file cinews.test.conf dengan tekes editor. Ketik perintah berikut:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName cinews.test
ServerAlias www.cinews.test
DocumentRoot /var/www/html/ci-news/public
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Ini akan menjadi alamat domain yang akan kita pakai. Kamu juga bisa menggantinya dengan
yang lain.
Setelah itu, simpan dengan menekan Ctrl+x lalu pilih y.
Berikutnya, kita harus mengaktifkan konfigurasi site apache yang sudah dibuat. Silahkan ketik
perintah berikut:
Untuk kamu yang menggunakan XAMPP di Windows, berikut ini cara membuat virtual host.
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName cinews.test
ServerAlias www.cinews.test
DocumentRoot "c:\xampp\htdocs\ci-news\public"
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "c:\xampp\htdocs\ci-news\public"></Directory>
</VirtualHost>
C:\Windows\System32\drivers\etc\hosts
Sekarang coba buka browser dan arahkan ke alamat beritacoding.test, maka hasilnya:
Troubleshooting..
Saya yakin ada beberapa diantara kamu yang akan mendapatkan masalah saat install Codeigniter
4. Berikut ini beberapa masalah yang sering ditemukan.
Saat menjalankan server dengan perintah php spark serve muncul pesan error seperti ini:
PHP Warning:
require(/app/Config/../../vendor/codeigniter4/framework/system/bootstrap.php):
failed to open stream: No such file or directory in /home/dian/Playground/ci-
playground/ci-news/spark on line 44
Contoh:
Kalau kita lihat, perintah ini akan mencari file di folder vendor. Folder ini adalah folder yang
berisi library yang diinstal dengan composer.
✅ Solusi:
Saat melakukan install dengan perintah composer install, muncul pesan seperti ini:
✅ Solusi:
Apa Selanjutnya?
Pada tahapan ini, kita sudah berhasil membuat proyek baru Codeigniter. Baik itu dengan
composer, maupun install secara manual ke htdocs.
Kamu lebih suka cara yang mana?
Kalau saya, lebih suka yang pakai Composer, karena lebih praktis.
petanikode.com
Harapannya, kamu bisa terbiasa denga lingkungan kerja atau codebase CI4.
Kita akan mulai dengan mengenal struktur direktorinya terlebih dahulu, lalu membahas konsep
MVC yang ada di Codeigniter 4.
Baiklah..
Silahkan buka teks Editor VS Code, lalu pilih File->Open Folder. Cari folder 📁 ci-news.
📁 .github folder ini kita butuhkan untuk konfigurasi repo github, seperti konfigurasi
untuk build dengan github action;
📁 app folder ini akan berisi kode dari aplikasi yang kita kembangkan;
📁 public folder ini berisi file yang bisa diakses oleh publik, seperti file index.php,
robots.txt, favicon.ico, ads.txt, dll;
📁 tests folder ini berisi kode untuk melakukan testing dengna PHPunit;
📁 vendor folder ini berisi library yang dibutuhkan oleh aplikasi, isinya juga termasuk
kode core dari system CI.
📁 writable folder ini berisi file yang ditulis oleh aplikasi. Nantinya, kita bisa pakai
untuk menyimpan file yang di-upload, logs, session, dll.
Berikutnya, kita akan bahas tentang file-file yang ada di direktori CI 4.
📄 .env adalah file yang berisi variabel environment yang dibutuhkan oleh aplikasi.
📄 .gitignore adalah file yang berisi daftar nama file dan folder yang akan diabaikan
oleh Git.
⚙️build adalah script untuk mengubah versi codeigniter yang digunakan. Ada versi
release (stabil) dan development (labil).
📜 composer.json adalah file JSON yang berisi informasi tentang proyek dan daftar
library yang dibutuhkannya. File ini digunakan oleh Composer sebagai acuan.
📜 composer.lock adalah file yang berisi informasi versi dari libraray yang digunakan
aplikasi.
©️license.txt adalah file yang berisi penjelasan tentang lisensi Codeigniter;
📜 phpunit.xml.dist adalah file XML yang berisi konfigurasi untuk PHPunit.
📖 README.md adalah file keterangan tentang codebase CI. Ini biasanya akan dibutuhkan
pada repo github atau gitlab.
⚙️spark adalah program atau script yang berfungsi untuk menjalankan server, generate
kode, dll.
Kemudian, coba kita fokus ke folder 📁 app, di sana ada beberapa fodler dan file yang perlu kita
ketahui.
Nah, itulah beberapa file dan folder yang harus dipahami. Sebenarnya masih banyak lagi file di
dalam folder app yang harus kamu ketahui.
Namun, karena terlalu banyak.. nanti kita bahas barengan dengan tutorial berikutnya.
MVC adalah singkatan dari Model–View–Controller. MVC merupakan sebuah pola desain
arsitektur yang umum digunakan dalam pengembangan aplikasi.
Yap, biar kode program lebih konsisten dan tersetruktur. Sehingga kita akan mudah kolaborasi
dengan tim.
Nah, si MVC ini adalah pola penulisan kode yang umum dipakai.. dimana kode untuk Model di
taruh dalam folder yang sama, begitu juga dengan kode untuk View dan Controller.
Model adalah kode yang bertugas untuk membuat pemodelan data. Kadang juga dipakai untuk
pemodelan bisnis.
Model bisa mengakses data dari Database dan juga sumber lainnya.
Intinya:
Kalau berkaitan tentang data, itu tugasnya model.
Ingat:
Fokusnya untuk membuat tampilan aplikasi, bukan yang lain. Kita tidak boleh query data dari
view, meskipun itu bisa dilakukan.
Kadang juga kita akan membuat sedikit logika di dalam view, seperti logika untuk menampilkan
dan menghilangkan elemen tertentu.
Apa yang kita lihat di aplikasi, itu adalah kode dari View.
Jika itu request untuk menyimpan data ke database, maka Controller harus memanggil Model
yang bertanggung jawab untuk data tersebut. Lalu meminta model untuk menyimpannya ke
database.
Jika itu request untuk view data, maka Controller akan mencari kode View yang bertanggung
jawab untuk menampilkan data tersebut.
Kadang juga Controller akan membutuhkan beberapa library dan helper untuk memproses
request.
Intinya:
Tapi sebelum itu.. ada router di depan controller yang bertanggung jawab untuk menentukan
Controller mana yang akan dieksekusi.
Router di Codeigniter 4
Coba buka file app/Config/Routes.php. File ini adalah file router yang bertugas untuk
menentukan, Controller mana yang akan bertanggung jawab pada request tertentu.
Sebagai contoh:
$routes->get('/', 'Home::index');
Saat ada request ke halaman root (/) atau alamat domain dari aplikasi, maka Controller yang
akan bertugas adalah Home dan method yang akan dipakai adalah index.
Intinya:
Router akan memberikan tugas pada Controller tertentu untuk membalas sebuah request.
Apa Selanjutnya?
Jadi kesimpulannya:
Codeigniter 4, menggunakan konsep MVC. Request pada Codeigniter pertamakali akan diterima
oleh file public/index.php kemudian diteruskan ke router dan diproses oleh Controller.
Mengapa?
Pada tutorial ini, kita akan belajar seputar Routing dan Controller pada Codeigniter 4.
Baiklah…
Pada framework CI4, routing bertujuan untuk menentukan Controller mana yang harus merespon
sebuah request.
Controller adalah class atau script yang bertanggung jawab merespon sebuah request.
Ia bisa saja merespon dengan mengirimkan view, data JSON, data XML, atau bahkan tidak
mengirimkan respon apapun.
Karena ada juga bagian dari Controller yang harnya bertugas menerima data dan menyimpannya
ke database.
File index.php adalah file entri point yang akan dieksekusi pertamakali saat aplikasi dibuka.
Request yang diterima oleh index.php akan diserahkan ke Router. Lalu si Router akan
menentukan Controller yang akan meresponnya.
$routes->get('/', 'Home::index');
Bingung?
Sudah paham?
Bagus..
$routes->get('/about', 'Page::about');
$routes->get('/contact', 'Page::contact');
$routes->get('/faqs', 'Page::faqs');
Nah, di sini kita membuat tiga buat rute baru. Pada rute ini kita memberikan tugas kepada
controller Page untuk merespon request pada rute tersebut.
Membuat Controller
Silahkan buat file baru di dalam folder app/Controllers dengan nama Page.php.
Pastikan kamu menggunakan huruf kapital di awal nama file. Karena ini sudah menjadi aturan
pada Codeigniter.
Controller Page memiliki tiga method, yakni about(), contact(), dan faqs().
Nama method ini mengikuti nama yang sudah kita tentukan di dalam rute. Jika kita
menggunakan nama yang berbeda, maka ia tidak akan bisa dibuka.
Pada setiap method di Controller Page, kita membuat respon dengan perintah echo. Kita juga
nanti bisa merespon dengan view.
localhost:8080/about
localhost:8080/contact
localhost:8080/faqs
Hasilnya:
Bagus..
Autoroute di Codeigniter 4
Pada Codeigniter 3, routing dilakukan secara otomatis dengan mengikuti nama Controller dan
method-nya.
Pada Codeigniter 4, kita juga bisa mengaktifkan fitur ini dengan kode:
$routes->setAutoRoute(true);
$routes->setAutoRoute(false);
Tambahkan method tos() pada Controller Page dengan isi seperti ini:
Ingat:
Method tos() belum kita daftarkan di dalam Routes.php. Namun, karena kita mengaktifkan
autoroute, maka method ini bisa kita akses melalui:
localhost:8080/index.php/page/tos
Hasilnya:
Sekarang coba matika fitur autoroute.
$routes->setAutoRoute(false);
Sebenarnya ini tergantung kita sebagai developer, jika tidak ingin repot-repot membuat rute
maka baiknya pakai autoroute. Namun atuoroute akan membuat semua method public di
Controller akan bisa diakses.
Apa Selanjutnya?
Sebenarnya masih banyak lagi hal tentang routing yang harus diketahui. Namun, untuk tutorial
basic.. saya cukupkan sampai di sini.
Nanti kita akan pelajari routing lebih lenjut, bersamaan dengan dengan pembahasan fitur
Codeigniter lainnya.
petanikode.com
Banyak orang yang kesulitan membuat view yang menarik, karena kurang paham cara membuat
CSS-nya.
Sekarang sudah banyak CSS Framework yang siap pakai. Salah satunya adalah Bootstrap.
Bootstrap adalah CSS Framework yang banyak digunakan saat ini. Bootstrap memberikan kita
kemudahan dalam membuat tampilan web yang menarik.
Pada tutorial ini, kita akan belajar tentang View di Codeigniter 4 dan juga menggunakan
Bootstrap.
📥 Download bootstrap-4.5.2-dist.zip
Setelah itu, ekstrak folder 📁 css dan 📁 js ke dalam folder 📁 public di project kita.
📥 Download jquery.min.js
Setelah itu, pindahkan ke dalam folder public/js, sehingga sekarang kita punya file
jquery.min.js di sana.
Folder 📁 public adalah folder yang berisi file statis seperti Gambar, CSS, JS, dan lain-lain.
Semua file yang ada di dalam folder nantinya akan kita buatkan link dengan fungsi base_url()
pada View.
Saat Controller merespon sebuah request, kadang ia harus mengirimkan view ke client.
Bagaimana caranya?
Caranya, kita harus gunakan fungsi view().
Contoh:
Saat fungsi view() dieksekusi, ia akan mencari file view pada folder 📁 app/Views berdasarkan
nama file view yang diberikan.
Kita akan membuat 4 buah view untuk halaman Home, About, Contact, dan Faqs.
Silahkan buka Controller Page, kemudian ubah kodenya menjadi seperti ini:
Secara default, view halaman home adalah welcome_message.php, kita bisa juga menggantinya
dengan yang lain.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Protal Berita Codeigniter</title>
<body>
<div class="container">
<div class="row">
<div class="col-md-12 my-2 card">
<div class="card-body">
<h5 class="h5">Codeigniter 4 Sudah
Rilis!</h5>
<p>Lorem ipsum dolor sit amet
consectetur adipisicing elit. Quibusdam perferendis commodi tenetur quos
ducimus repellat nulla, nam magni. Commodi iusto ad harum voluptas
exercitationem facere eos earum laboriosam excepturi quas?</p>
</div>
</div>
<div class="col-md-12 my-2 card">
<div class="card-body">
<h5 class="h5">Pengembangan Codeiginter
4 Tertunda</h5>
<p>Lorem ipsum dolor sit amet
consectetur adipisicing elit. Quibusdam perferendis commodi tenetur quos
ducimus repellat nulla, nam magni. Commodi iusto ad harum voluptas
exercitationem facere eos earum laboriosam excepturi quas?</p>
</div>
</div>
<div class="col-md-12 my-2 card">
<div class="card-body">
<h5 class="h5">Wow, Ini 5 Startup yang
Menggunakan Codeigniter</h5>
<p>Lorem ipsum dolor sit amet
consectetur adipisicing elit. Quibusdam perferendis commodi tenetur quos
ducimus repellat nulla, nam magni. Commodi iusto ad harum voluptas
exercitationem facere eos earum laboriosam excepturi quas?</p>
</div>
</div>
<div class="col-md-12 my-2 card">
<div class="card-body">
<h5 class="h5">Codeigniter Ternyata
Framework Terpopuler di Inodnesia</h5>
<p>Lorem ipsum dolor sit amet
consectetur adipisicing elit. Quibusdam perferendis commodi tenetur quos
ducimus repellat nulla, nam magni. Commodi iusto ad harum voluptas
exercitationem facere eos earum laboriosam excepturi quas?</p>
</div>
</div>
</div>
</div>
</body>
</html>
Jika sekarang kita membuka localhost:8080, maka tampilannya akan berubah menjadi seperti
ini.
Kereen.. 😍
Buatlah file baru di dalam folder app/Views dengan nama about.php dan isilah dengan kode
berikut.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>About us</title>
<body>
<header class="jumbotron">
<div class="container">
<div class="row">
<div class="col-md-12">
<h1 class="h1">About us</h1>
</div>
</div>
</div>
</header>
<div class="container">
<div class="row">
<div class="col-md-12">
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit.
Mollitia modi unde cumque! Cum repellendus eveniet, illum id doloribus,
quibusdam tenetur debitis est libero quasi assumenda voluptates aliquam
tempore. Porro, asperiores.</p>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit.
Mollitia modi unde cumque! Cum repellendus eveniet, illum id doloribus,
quibusdam tenetur debitis est libero quasi assumenda voluptates aliquam
tempore. Porro, asperiores.</p>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit.
Mollitia modi unde cumque! Cum repellendus eveniet, illum id doloribus,
quibusdam tenetur debitis est libero quasi assumenda voluptates aliquam
tempore. Porro, asperiores.</p>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit.
Mollitia modi unde cumque! Cum repellendus eveniet, illum id doloribus,
quibusdam tenetur debitis est libero quasi assumenda voluptates aliquam
tempore. Porro, asperiores.</p>
</div>
</div>
</div>
</html>
Hasilnya: localhost:8080/about
3. View untuk Halaman Contact
Buatlah file baru dengan nama contact.php di dalam folder app/Views dengan isi sebagai
berikut:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Contact us</title>
<body>
<header class="jumbotron">
<div class="container">
<div class="row">
<div class="col-md-12">
<h1 class="h1">Contact us</h1>
</div>
</div>
</div>
</header>
<div class="container">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="email">Email</label>
<input type="email" class="form-control">
</div>
<div class="form-group">
<label for="email">Message</label>
<textarea name="message" class="form-control" id="" cols="30"
rows="10"></textarea>
</div>
<div class="form-group">
<input type="submit" value="Kirim" class="btn btn-primary w-
100">
</div>
</form>
</div>
</div>
</div>
</body>
</html>
Hasilnya: localhost:8080/contact
4. View untuk Halaman FAQs
Terakhir.. buatlah file baru dengan nama faqs.php di dalam folder app/Views dengan isi
sebagai berikut:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>FAQs</title>
<body>
<header class="jumbotron">
<div class="container">
<div class="row">
<div class="col-md-12">
<h1 class="h1">FAQs</h1>
</div>
</div>
</div>
</header>
<div class="container">
<div class="row">
<div class="col-md-12">
<h2 class="h2">Apa itu CI Neews?</h2>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit.
Mollitia modi unde cumque! Cum repellendus eveniet, illum id doloribus,
quibusdam tenetur debitis est libero quasi assumenda voluptates aliquam
tempore. Porro, asperiores.</p>
<h2 class="h2">Bagaimana Cara Membuat Akun CI News?</h2>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit.
Mollitia modi unde cumque! Cum repellendus eveniet, illum id doloribus,
quibusdam tenetur debitis est libero quasi assumenda voluptates aliquam
tempore. Porro, asperiores.</p>
<h2 class="h2">Bagaimana Cara Menulis Artikel di CI News?</h2>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit.
Mollitia modi unde cumque! Cum repellendus eveniet, illum id doloribus,
quibusdam tenetur debitis est libero quasi assumenda voluptates aliquam
tempore. Porro, asperiores.</p>
<h2 class="h2">Apakah CI News Official?</h2>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit.
Mollitia modi unde cumque! Cum repellendus eveniet, illum id doloribus,
quibusdam tenetur debitis est libero quasi assumenda voluptates aliquam
tempore. Porro, asperiores.</p>
</div>
</div>
</div>
</html>
Hasilnya: localhost:8080/faqs
Mengirim Data Ke View
Sejauh ini, kita sudah berhasil menampilkan view.
Namun, kadang kita juga nantinya akan menggunakan data dari database dan menampilkannya
di dalam view.
Caranya bagaimana?
Caranya:
Data yang akan dikirim ke view harus dalam bentuk array asosiatif.
Array asosiatif adalah array yang memiliki key dan value. Key akan menjadi nama variabel di
dalam view, dan value akan menjadi nilainya. Value ini bebas kita isi dengan apa saja.. boleh
diisi dengna string, array, object, integer, dll.
Jika kamu baru mendengar jenis array ini.. saya sarankan untuk membaca lagi tutorial tentang
Array di PHP.
Lanjut..
Sekarang mari kita coba mengirim data ke view.
Silahkan buka Controller Page, kemudian ubahlah kode pada method contact() menjadi seperti
ini:
Variabel $data adalah variabel asosiatif array, dengan name sebagai key dan ‘Petani Kode’
sebagai value untuk name.
Sekarang, buka kode app/Views/contact.php dan tambahkan kode di bawah ini tepat di atas
pembuatan form.
Oke..
Sekarang coba buka halaman contact melalui alamat localhost:8080/contact, maka hasilnya:
Mengirim Data Array ke View
Jika tadi kita hanya mengirim data berupa string, kini kita coba yang lebih kompleks dengan
mengirim data array.
Biasanya ini nanti akan sering kita pakai untuk menampilkan data yang berasal dari database.
Baiklah..
Silahkan buka Controller Page, kemudian ubah kode pada method faqs menjadi seperti ini.
<?php
namespace App\Controllers;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>FAQs</title>
<body>
<header class="jumbotron">
<div class="container">
<div class="row">
<div class="col-md-12">
<h1 class="h1">FAQs</h1>
</div>
</div>
</div>
</header>
<div class="container">
<div class="row">
<div class="col-md-12">
<?php foreach ($data_faqs as $faq) : ?>
<h2 class="h2"><?= $faq['question'] ?></h2>
<p><?= $faq['answer'] ?></p>
<?php endforeach; ?>
</div>
</div>
</div>
</html>
Pada kode tersebut, kita menggunakan perulangan foreach untuk meng-iterasi semua data pada
variabel $data_faqs.
Maka hasilnya:
Apa Selanjutnya?
Sejauh ini kita sudah berhasil membuat view di Codeigniter.
Namun..
Jika diperhatikan, semua view yang dibaut strukturnya sama dan diulang-ulang. Mulai dari
pembuatan <!DOCTYPE html> hingga bagian penutup HTML-nya.
Hanya saja berbeda di bagian konten.
Tapi masalahnya nanti saat kita mengubah sesuatu—misalnya mengubah warna navbar—maka
kita harus mengubah di semua view. Kalau cuma satu atau dua view, ini tidak apa-apa.
Solusinya:
Nah, selanjutnya kita akan belajar tentang dua hal ini. Silahkan lanjutkan ke:
petanikode.com
Pada tutorial sebelumnya, kita sudah membuat View. Namun, kita membuatnya dengan kode
yang sama dan berulang-ulang.
Mengapa?
Karena jika ada sedikit perubahan—misalnya mengubah warna navbar—maka kita harus
mengubahnya di semua view.
Karena itu, gunakanlah View Layout biar view yang kita buat lebih efektif.
Layout kita butuhkan agar tidak mengulang-ulang kode yang sama di dalam View. Cukup buat
satu kode layout dan nanti kita pakai di beberapa view.
Pada gambar tersebut, kita punya dua layout.. yakni Page Layout dan Post Layout.
Page Layout menggunakan satu kolom, sedangkan Post Layout menggunakan dua kolom.
Jika kamu pernah membuat template blog, pasti tidak akan asing dengan layout ini.
Nah nantinya kedua Layout ini akan dipakai oleh beberapa view.
Page Layout akan dipakai pada view About Page, Contact Page, FAQs Page, dll.
..dan untuk Post Layout akan dipakai untuk view News Page dan juga Blog post.
Jika kamu punya halaman produk, bisa juga dibuatkan layout tersendiri. Namun, karena kita
menggunakan studi kasus web portal berita, kita cukup buat dua Layout saja.
Selanjutnya..
Buatlah file PHP baru di dalam folder 📁 layout dengan nama page_layout.php dan isilah
dengan kode berikut.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Protal Berita Codeigniter</title>
<body>
</body>
</html>
Kode ini berfungsi untuk me-render bagian konten dari halaman. Artinya nanti di bagian ini akan
berisi konten yang berbeda-beda.
Selanjutnya, ubah kode view untuk halaman Home, About, Contact, dan FAQs.
<div class="container">
<div class="row">
<div class="col-md-12 my-2 card">
<div class="card-body">
<h5 class="h5">Codeigniter 4 Sudah
Rilis!</h5>
<p>Lorem ipsum dolor sit amet
consectetur adipisicing elit. Quibusdam perferendis commodi tenetur quos
ducimus repellat nulla, nam magni. Commodi iusto ad harum voluptas
exercitationem facere eos earum laboriosam excepturi quas?</p>
</div>
</div>
<div class="col-md-12 my-2 card">
<div class="card-body">
<h5 class="h5">Pengembangan Codeiginter
4 Tertunda</h5>
<p>Lorem ipsum dolor sit amet
consectetur adipisicing elit. Quibusdam perferendis commodi tenetur quos
ducimus repellat nulla, nam magni. Commodi iusto ad harum voluptas
exercitationem facere eos earum laboriosam excepturi quas?</p>
</div>
</div>
<div class="col-md-12 my-2 card">
<div class="card-body">
<h5 class="h5">Wow, Ini 5 Startup yang
Menggunakan Codeigniter</h5>
<p>Lorem ipsum dolor sit amet
consectetur adipisicing elit. Quibusdam perferendis commodi tenetur quos
ducimus repellat nulla, nam magni. Commodi iusto ad harum voluptas
exercitationem facere eos earum laboriosam excepturi quas?</p>
</div>
</div>
<div class="col-md-12 my-2 card">
<div class="card-body">
<h5 class="h5">Codeigniter Ternyata
Framework Terpopuler di Inodnesia</h5>
<p>Lorem ipsum dolor sit amet
consectetur adipisicing elit. Quibusdam perferendis commodi tenetur quos
ducimus repellat nulla, nam magni. Commodi iusto ad harum voluptas
exercitationem facere eos earum laboriosam excepturi quas?</p>
</div>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="email">Email</label>
<input type="email" class="form-control">
</div>
<div class="form-group">
<label for="email">Message</label>
<textarea name="message" class="form-control" id=""
cols="30" rows="10"></textarea>
</div>
<div class="form-group">
<input type="submit" value="Kirim" class="btn btn-primary
w-100">
</div>
</form>
</div>
</div>
</div>
Jika kita lihat hasilnya, maka tidak akan terlihat perubahan apapun.
Namun, cobalah untuk melihat di bagian Debugger bar. Klik pada logo CI yang ada di pojok
kanan bawah, lalu klik menu Views.
Berdasarkan hasil tersebut, ada dua view yang digunakan.
Lalu setelah itu, barulah kita buat view section untuk menampilkan konten.
Gampang kan..
Buatlah file baru di dalam folder app/Views/layout/ dengan nama navbar.php, kemudian isi
dengan kode berikut:
Selanjutnya buat lagi file baru dengan nama header.php dengan isi sebagai berikut:
Sehingga sekarang kita punya tiga file partial di dalam folder Views/layout.
Berikutnya, kita akan menggunakan partial ini di dalam page_layout.php.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Protal Berita Codeigniter</title>
<body>
</body>
</html>
Hasilnya:
Halaman ini menggunakan layout dua kolom dengan sidebar di samping kanan.
Buatlah file baru di dalam folder Views/layout dengan nama post_layout.php dan isilah
kodenya seperti ini:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Protal Berita Codeigniter</title>
<body>
<div class="container">
<div class="row">
<div class="col-md-8">
<?= $this->renderSection('content') ?>
</div>
<div class="col-md-4">
<?= $this->include('layout/sidebar') ?>
</div>
</div>
</div>
</body>
</html>
Kemudian buat satu lagi file di dalam Views/layout dengan nama sidebar.php dan isilah
dengan kode berikut.
Sehingga sekarang kita punya tiga file bari di dalam folder app/Views dan app/Views/layout.
Berikutnya, kita harus membuat Controller agar bisa menampilkan halaman News.
Buatlah Controller baru dengan nama News.php dengan isi sebagai berikut:
//----------------------------------------------------
$routes->get('/news', 'News::index');
Nah, sekarang kita bisa membuka halaman News melalui alamat localhost:8080/news.
Hasilnya:
Nantinya halaman News akan kita gunakan untuk menampilkan list berita terbaru dan berita itu
sendiri.
Apa Selanjutnya?
Bagaimana?
View Layout memang akan memudahkan kita dalam membuat template untuk halaman.
Apa itu?
Partial tidak bisa menerima parameter data saat kita menggunakannya di dalam View.
Misalnya gini:
Silahkan lanjutkan:
petanikode.com
View Partial memang bagus buat memisah kode view yang sering digunakan. Ia juga sebenarnya
sudah mampu mengenali variabel data yang dikirim dari Controller.
Namun kekurangannya.. ia tidak bisa menerima data parameter saat kita menggunakannya di
dalam View.
Misalnya gini:
Pada kode ini, kita ingin include view partial header dengan memberikan data title.
View Cell adalah bagian terkecil dari View. Secara teknis, View Cell sebenarnya adalah sebuah
Class yang bertugas membuat kode HTML (generate HTML) dengan method-methodnya. 1
Kita bisa bayangkan View Cell seperti Widget yang bisa kita tempel di view mana saja.
Class View Cell bisa menerima data dari parameter dan juga bisa mengakses data dari Model.
Class View Cell bukanlah Controller, karena ia tidak bertugas untuk membalas sebuah request.
Ia hanya Class yang bertugas membuat HTML.
Setelah itu, buatlah file baru di dalam folder widget dengan nama recent_post.php dan isilah
dengan kode berikut:
<div class="card">
<div class="card-body">
<h5 class="h5">Recent Posts</h5>
<hr>
<div class="list-group list-group-flush">
<div class="media mb-3">
<div class="media-body">
<h6 class="mt-0 mb-1 h6">Komunitas Codeigniter Indonesia
Mengadakan Meetup</h6>
<small class="text-secondary">23 Sep 2020 · baca 2
menit</small>
</div>
<img class="rounded ml-3"
src="http://lorempixel.com/60/60/nature/" width="60" height="60">
</div>
<div class="media mb-3">
<div class="media-body">
<h6 class="mt-0 mb-1 h6">9 Fitur Terbaru Codeigniter
4</h6>
<small class="text-secondary">23 Sep 2020 · baca 2
menit</small>
</div>
<img class="rounded ml-3" src="http://lorempixel.com/60/60/"
width="60" height="60">
</div>
<div class="media mb-2">
<div class="media-body">
<h6 class="mt-0 mb-1 h6">Tutorial Codeigniter Terlengkap
Bahasa Indonesia</h6>
<small class="text-secondary">23 Sep 2020 · baca 2
menit</small>
</div>
<img class="rounded ml-3"
src="http://lorempixel.com/60/60/cats/" width="60" height="60">
</div>
</div>
</div>
</div>
Setelah itu buatlah Class baru bernama Widget.php di dalam folder app/Libraries .
class Widget
{
public function recentPost()
{
return view('widget/recent_post');
}
}
Bukalah localhost:8080/news.
Hasilnya:
Sekila mirip seperti View Partial ya..
Contoh:
Pada contoh ini, kita memberikan parameter berupa asosiatif array dengan key limit dan value-
nya 5.
Nantinya key title akan dikenali sebagai variabel di dalam View Cell.
<div class="card">
<div class="card-body">
<h5 class="h5">Recent Posts</h5>
<hr>
<div class="list-group list-group-flush">
<?php for($i=0; $i < $limit; $i++): ?>
<div class="media mb-3">
<div class="media-body">
<h6 class="mt-0 mb-1 h6">Komunitas Codeigniter Indonesia
Mengadakan Meetup</h6>
<small class="text-secondary">23 Sep 2020 · baca 2
menit</small>
</div>
<img class="rounded ml-3" src="http://lorempixel.com/60/60/"
width="60" height="60">
</div>
<?php endfor; ?>
</div>
</div>
</div>
class Widget
{
Apa Selanjutnya?
Oke.. sekian dulu materi tentang View di Codeigniter 4.
Sebenarnya masih ada lagi yang belum dibahas, seperti View Parser. Silahkan pelajari sendiri di
dokumentasi
Kita akan lanjutkan tutorial ini dengan membahas Model, Migrasi Database, dan membuat
CRUD.
petanikode.com
Sebelum kita masuk membahas tentang CRUD di Codeigniter 4, kita bahas dulu tentang migrasi
database.
Perpindahan ini biasanya kita lakukan dengan manual, yakni dengan cara dump dan export
database di localhost.. lalu mengimpornya di server production.
Tapi masalanya:
Jika nanti kita bekerja dengan tim.. Saat perubahan skema database terjadi, maka tim yang lain
juga harus mengikuti.
Mau tidak mau, kita harus dump dan export skema milik kita dan memberikan ke semua anggota
tim yang terlibat. Belum lagi versi database yang mereka gunakan beragam.
Salah satu program untuk melakukan migrasi database yang bisa digunakan di PHP adalah
Spinx.
Namun, pada tutorial ini.. kita tidak akan menggunakan Spinx, karena Codeigniter sendiri udah
punya fitur untuk migrasi database.
Pada Codeigniter 4.. kita sudah disediakan program khusus, yakni melalui spark.
Perintah-perintah untuk membuat migrasi database dengan spark, bisa kita lihat dengan perintah
php spark --help.
Ketujuh perintah inilah yang akan kita gunakan untuk membuat migrasi database. Berikut ini
penjelasannya:
Jika kamu bingung dengan cara menggunakan perintah tersebut, bisa lihat bantuannya dengan
perintah:
Contoh:
Baiklah..
Silahkan buka file .env, kemudian ubahlah konfigurasi database menjadi seperti ini:
#------------------------------------------------------------------
# DATABASE
#------------------------------------------------------------------
database.default.hostname = localhost
database.default.database = ci_news
database.default.username = root
database.default.password =
database.default.DBDriver = MySQLi
Untuk username dan password, sesuaikan dengan username dan password pada server MySQL
yang kamu gunakan.
Sebagai contoh:
Saya sudah pernah mengubha username dan password di server MySQL saya dengan admin dan
password 123, maka dikonfigurasi saya harus mengisi seperti ini:
#------------------------------------------------------------------
# DATABASE
#------------------------------------------------------------------
database.default.hostname = localhost
database.default.database = ci_news
database.default.username = admin
database.default.password = 123
database.default.DBDriver = MySQLi
Jika kita salah memasukan username dan password, bisa jadi aplikasi tidak akan bisa terhubung
dengan server database.
Setelah itu, buatlah database baru dengan nama ci_news. Ini bisa dilakukan melalui command
line atau Phpmyadmin.
Pertama kita akan membuat sekema untuk tabel news. Sebenarnya akan lebih gampang jika kita
sudah memiliki rancangan sekema atau ERD.
Oke sekarang buka kembali project ci-news yang sudah kita buat di tutorial sebelumnya.
Perintah ini akan membuat file baru dengan nama 2020-11-23-053942_news.php di dalam
folder app/Database/Migration.
Tanggal dan waktu di awal nama file menandakan versi dari migrasi.
use CodeIgniter\Database\Migration;
//------------------------------------------------------
Pada kode ini terdapat class News yang merupakan turunan dari class Migration.
Pada class News terdapat dua method, yakni up() dan down(). Method ini nantinya akan
dijalankan saat melakukan migrasi.
Method up() akan dijalankan saat melakukan migrasi, sedangkan down() saat melakukan
rollback.
Tips: contoh di atas menggunakan news sebagai nama file migrasi. Ada juga yang menyarankan
sebaiknya menggunakan nama yang deskriptif agar memudahkan. Misalnya seperti
create_news_table, add_views_to_news_table, dsb.
Oke..
Sekarang mari kita buat skema untuk tabel News. Silahkan ubah kode pada file 2020-11-23-
053942_news.php menjadi seperti ini:
<?php
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
Penjelasan kode:
Perhatikan pada method up(), pertama kita membuat field terlebih dahulu baru membuat tabel.
$this->forge->addField([
'id INT(5)',
'title VARCHAR(255)'
]);
$this->forge->addKey('id', TRUE);
Paramater TRUE berfungsi untuk menyatakan key yang dibuat adalah Primary Key. Jika tidak
diberikan TRUE maka akan dibuat menjadi key biasa atau foreign key.
$this->forge->createTable('news', TRUE);
Nilai TRUE berfungsi untuk mengecek apakah tabel sudah ada di database atau belum, jika ada
maka tidak dilakukan pembuatan tabel. Jika kita tidak memberikan nilai TRUE, maka tabel akan
tetap dibuat.. meskipun sudah ada.
$this->forge->dropTable('news');
Karena kita menulisnya di dalam method down(), maka ini nantinya akan dipanggil saat kita
melakukan rollback.
Sekarang coba cek database melalui Phpmyadmin, pasti di sana sudah ada dua tabel, yakni tabel
migrations dan tabel news.
Tabel migrations adalah tabel yang otomatis dibuat untuk menyimpan versi migrasi yang sudah
dilakukan. Lalu tabel news adalah tabel yang kita buat berdasarkan file migrasi.
Nomer batch ini akan bertambah setiap kita melakukan migrasi yang baru. Karena ini migrasi
pertama yang kita lakukan, maka nomernya adalah 1.
Jika kita membuat file migrasi baru dan menjalankan perintah php spark migrate, maka
migrasi yang baru akan memiliki nomer 2.
Pertama, membuat file migrasi baru dan menuliskan perubahannya di sana, lalu melakukan
migrasi lagi.
Cara pertama ini cocok dilakukan jika kita sudah punya data, karena perubahanya akan bisa di-
rollback.
Kedua, bisa malakukan rollback, lalu mengubah file migrasi yang sudah ada dan melakukan
migrasi kembali atau ini bisa dipersingkat dengan migrate:refresh.
Cara kedua ini gampang dilakukan dan cocok dilakukan untuk migrasi awal. Namun kurang
cocok dilakukan untuk aplikasi yang sudah punya data dan sudah melakukan migrasi berkali-
kali, karena akan berpotensi menghapus data.
Kalau menurut saya, cara pertama lebih aman dibandingkan dengan cara kedua. Tapi tidak
masalah jika migrasi ini dilakukan di server development.
Pertama kita akan coba cara yang paling gampang, yakni migrate:refresh.
<?php
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
Pada kode ini kita menambahkan kolom created_at dengan tipe DATETIME dan nilai default
CURRENT_TIMESTAMP.
Sekarang coba cek kembali tabel news, di sana akan ada kolom baru bernama created_at.
Jika tabel news sudah punya data, maka data tersebut akan dihapus karena dilakukan rollback
(drop table).
Inilah mengapa cara ini kurang aman untuk aplikasi yang sudah punya data, tapi tidak masalah
untuk dilakukan di awal.
Misalkan, kita ingin menambahkan kolom slug pada tabel news, kita bisa membuat file migrasi
baru dengan perintah:
use CodeIgniter\Database\Migration;
//--------------------------------------------------------
public function down()
{
$this->forge->dropColumn('news', 'slug');
}
}
Pada kode ini kita menambahkan kolom slug pada tabel news dengan tipe VARCHAR,
ukurannya 100 dan bersifat unik (key unique).
Coba cek kembali tabel news dari Phpmyadmin, maka akan ada kolom baru bernama slug.
Coba juga untuk melihat isi tabel migrations, di sana akan ada data baru dengan nomer batch 2.
Jika kita melakukan rollback ke batch 1, maka data dengan nomer batch 2 akan dihapus dan
kondisi database akan kembali seperti saat batch 1.
Gampang kan?
Apakah setiap membuat file migrasi baru, kita harus melakukan migrasi (php spark migrate)?
Tidak harus, kita bisa membuat file migrasi sebanyak-banyaknya di awal. Misalnya aplikasi kita
punya 10 tabel, maka kita bisa buat 10 file migrasi dulu baru melakukan migrasi.
Oh iya, jangan lupa untuk selalu mengecek status migrasi dengan perintah:
Seed data adalah data awal untuk mengisi tabel. Seed data kadang kita butuhkan untuk mengetes,
dan menyiapkan data yang diperlukan di awal seperti user pertama pada aplikasi.
Untuk membuat seed data, kita membutuhkan file seeder. File seeder ini dapat dibuat dengan
perintah:
Contoh:
Maka kita akan memiliki file baru di dalam folder app/Database/Seeds dengan nama
news.php.
Ubahlah isi file news.php menjadi seperti ini:
use CodeIgniter\Database\Seeder;
foreach($news_data as $data){
// insert semua data ke tabel
$this->db->table('news')->insert($data);
}
}
}
Perhatikan, pada method run() kita membuat array yang berisi data yang akan disimpan dalam
tabel news.
Lalu kita menggunakan perulangan foreach untuk menyimpan semuanya. Jika hanya satu data
saja, maka tidak perlu menggunakan perulangan.
Atau bisa juga dilakukan dengan langsung memberikan nama seeder di awal seperti ini:
Tapi percayalah, kelak saat aplikasi kita pindah-pindah sever dan bekerja dengan tim.. migrasi
ini akan terasa manfaatnya.
1. https://codeigniter.com/user_guide/dbmgmt/forge.html#adding-fields ↩︎
petanikode.com
CRUD merupakan singkatan dari Create, Read, Update, dan Delete. Ini merupakan hal dasar
yang harus kamu ketahui dalam operasi database.
Pada tutorial ini, kita akan banyak bekerja dalam membuat Model, Controller, dan View.
Hingga pada akhir tutorial ini, kamu akan bisa menguasai cara membuat CRUD di Codeigniter 4,
dilengkapi dengan validasi data.
Sudah siap?
Membuat NewsModel
Model merupakan class yang berfungsi untuk operasi database seperti insert data, read data,
update, dan delete.
Di dalam class model, terdapat fungsi-fungsi yang siap pakai untuk mengakses database.
Fungsi-fungsi ini disebut query builder, yang sebenarnya menajalankan sebuah query SQL.
Jadi berkat fungsi-fungsi ini, kita tidak perlu membuat query. Cukup panggil fungsinya.
Nah, untuk membuat Model di Codeigniter 4, kita harus melakukan extends atau mewariskan
class Model.
Buatlah file baru di dalam folder app/Models dengan nama NewsModel.php, lalu isi dengan
kode berikut:
<?php
namespace App\Models;
use CodeIgniter\Model;
Penjelasan kode:
Pada class NewsModel terdapat beberapa member yang menjadi konfigurasi untuk Model:
Class NewsModel nantinya akan kita gunakan pada Controller untuk mengakses database.
Lalu saat membuka /news/slug-news maka akan ditampilkan halaman news. Ini mirip seperti
artikel pada blog.
Tambahkan route untuk membuka halaman news, buka file Config/Routers.php, kemudian
tambahkan ini:
$routes->get('/news', 'News::index');
$routes->get('/news/(:any)', 'News::viewNews/$1');
Route /news/(:any) memiliki parameter berupa slug, nantinya parameter ini dapat kita akses
dari controller. O ya, jangan lupa juga tambahakan /$1 agar parameter bisa terbaca di controller.
Langkah berikutnya, kita tambahkan route ini ke dalam menu.
Setelah itu…
<?php
namespace App\Controllers;
use App\Models\NewsModel;
use CodeIgniter\Exceptions\PageNotFoundException;
/*
siapkan data untuk dikirim ke view dengan nama $newses
dan isi datanya dengan news yang sudah terbit
*/
$data['newses'] = $news->where('status', 'published')-
>findAll();
//------------------------------------------------------------
Pada kode di atas kita menggunakan method findAll() untuk mengambil semua data di
database dan first() untuk mengambil satu data saja.
Di sana kita juga menggunakan where() untuk menentukan data mana yang akan di ambil.
Pada kasus di atas, kita mengambil data news yang statusnya sudah terbit (published) dan juga
mengambil berdasarkan slug.
Terakhir..
<div class="container">
<?php foreach ($newses as $news) : ?>
<div class="row">
<div class="col-md-12 mb-2 card">
<div class="card-body">
<h5 class="h5"><a href="/news/<?= $news['slug'] ?>"><?=
$news['title'] ?></a></h5>
<p><?= substr($news['content'], 0, 120) ?></p>
</div>
</div>
</div>
Setelah itu, buat satu lagi view untuk menampilkan detail news. Pada folder Views buat file baru
bernama news_detail.php dengan isi sebagai berikut:
Oke beres..
Maka hasilnya:
Oke, sekarang kita sudah berhasil menampilkan data di sisi depan website.
Kali ini kita akan menggunakan route group untuk membuat group route /admin.
$routes->group('admin', function($routes){
$routes->get('news', 'NewsAdmin::index');
$routes->get('news/(:segment)/preview', 'NewsAdmin::preview/$1');
$routes->add('news/new', 'NewsAdmin::create');
$routes->add('news/(:segment)/edit', 'NewsAdmin::edit/$1');
$routes->get('news/(:segment)/delete', 'NewsAdmin::delete/$1');
});
Coba perhatikan!
Artinya semua route yang ada di dalam group admin, harus dibuka dengan /admin baru diikuti
routenya.
Contoh, mau buka form create.. maka harus buka alamat /admin/news/new.
Apa bedanya?
Bedanya, method add() bisa dibuka dengan dua method yakni get() dan post(). Sedangkan
get() hanya untuk GET saja.
Karena selain menampilkan form create dan edit (GET), kita juga akan mengirim data (POST).
Bagaimana, paham tidak?
Oke lanjut..
Pada route yang sudah dibuat, kita membutuhkan controller NewsAdmin untuk meng-handle route
tersebut.
Buatlah file baru di dalam app/Controllers dengan nama NewsAdmin.php kemudian isi
dengan kode berikut:
use \App\Models\NewsModel;
use CodeIgniter\Exceptions\PageNotFoundException;
//------------------------------------------------------------------------
--
public function preview($id)
{
$news = new NewsModel();
$data['news'] = $news->where('id', $id)->first();
if(!$data['news']){
throw PageNotFoundException::forPageNotFound();
}
echo view('news_detail', $data);
}
//------------------------------------------------------------------------
--
//------------------------------------------------------------------------
--
//------------------------------------------------------------------------
--
Sudah paham?
Jika belum..
Sebenarnya ini tidak direkomendasikan, jika ada banyak sekali data news. Karena akan membuat
performanya lambat.
Mungkin nanti akan kita ubah saat menerapkan sorting dan pagination.
Jika artikel tidak ditemukan di database, maka kita akan menampilkan halaman 404 error.
Sebelum menyimpan data ke database, pastikan sudah lolos validasi. Karena bisa saja data yang
dimasukan user tidak valid.
Method edit() hampir sama seperti method create() hanya saja di method edit() kita harus
mengambil data yang akan diedit lalu ditampilkan pada form.
Karena tampilan halaman admin berbeda dengan halaman depan, maka kita perlu membuat
template layout yang berbeda.
Buatlah file baru di dalam layout/admin dengan nama admin_layout.php kemudian isi
dengan kode berikut:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Admin Berita Codeigniter</title>
<body>
</body>
</html>
Buatlah file baru di dalam folder app/Views dengan nama admin_list_news.php, lalu isi
dengan kode berikut:
<table class="table">
<thead>
<tr>
<th>#</th>
<th>Title</th>
<th>Status</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php foreach($newses as $news): ?>
<tr>
<td><?= $news['id'] ?></td>
<td>
<strong><?= $news['title'] ?></strong><br>
<small class="text-muted"><?= $news['created_at'] ?></small>
</td>
<td>
<?php if($news['status'] === 'published'): ?>
<small class="text-success"><?= $news['status'] ?></small>
<?php else: ?>
<small class="text-muted"><?= $news['status'] ?></small>
<?php endif ?>
</td>
<td>
<a href="<?= base_url('admin/news/'.$news['id'].'/preview') ?>"
class="btn btn-sm btn-outline-secondary" target="_blank">Preview</a>
<a href="<?= base_url('admin/news/'.$news['id'].'/edit') ?>"
class="btn btn-sm btn-outline-secondary">Edit</a>
<a href="#" data-href="<?= base_url('admin/news/'.
$news['id'].'/delete') ?>" onclick="confirmToDelete(this)" class="btn btn-sm
btn-outline-danger">Delete</a>
</td>
</tr>
<?php endforeach ?>
</tbody>
</table>
<script>
function confirmToDelete(el){
$("#delete-button").attr("href", el.dataset.href);
$("#confirm-dialog").modal('show');
}
</script>
Setelah itu, buat lagi file baru di dalam app/Views dengan nama admin_create_news.php dan
isi sebagai berikut:
Buat satu lagi file baru di dalam folder app/Views dengan nama admin_edit_news.php dan isi
sebagai berikut:
Sekarang kita sudah punya view yang dibutuhkan untuk halaman admin news.
Uji Coba..
Jika tidak ada error, seharusnya sudah bisa dicoba.
Selamat! 🥳
Tapi jika masih ada error, jangan menyerah. Coba diskusikan errornya di kolom komentar, siapa
tau dapat solusi.
Apa Selanjutnya?
Oke.. Smapai di sini dulu tutorial membuat CRUD di Codeigntier 4. Selanjutnya kita harus
membuat halaman login untuk Admin.
Selanjutnya: