Ulasan My CakePHP 3 – Masih Segar, Masih Panas
Diterbitkan: 2022-03-11Bulan lalu, tim CakePHP mengumumkan peluncuran rilis alfa CakePHP 3. Tim pengembangan Cake menganggap versi 3 sebagai pengubah permainan, jadi dengan rilis alfa versi 3 yang sekarang sedang panas, artikel ini mengambil tampilan segar CakePHP 3 sebagai kerangka kerja modern yang efektif untuk pengembangan PHP.
Sejarah Singkat
Saat ini, ada begitu banyak pilihan untuk pengembangan PHP. Seiring dengan semakin matangnya PHP, semakin banyak Kerangka Kerja PHP yang muncul, memberi pengembang beragam pilihan. Tapi tidak selalu seperti itu.
Kembali pada tahun 2005, ketika PHP 4 masih standar, tidak ada kerangka kerja PHP dan mengembangkan pendekatan pengkodean berorientasi objek di PHP tentu saja merupakan tantangan. Saat itulah CakePHP muncul – kerangka kerja PHP MVC pertama. Dalam hampir 10 tahun sejak pertama kali dirilis, CakePHP terus berkembang, mempertahankan pangsa pasar pengembang PHP yang sehat.
Seberapa populerkah framework CakePHP? Itu berada di peringkat 4 teratas proyek PHP paling populer di GitHub, dari sekitar 130.000 proyek, dengan lebih dari 18.000 anggota di grup Google CakePHP dengan 32.000 topik. Dengan 270 kontributor kode, dan 320 kontributor dokumentasi, tidak dapat disangkal bahwa CakePHP memiliki banyak pengikut. Popularitas CakePHP yang meluas dan berkembang saat ini diringkas dengan baik dalam sebuah artikel oleh James Watts, anggota inti dan manajer komunitas CakePHP untuk Cake Software Foundation, yang saya wawancarai selama penulisan artikel ini.
Dengan kerangka kerja versi 3 yang sekarang tersedia, CakePHP sangat diharapkan untuk tetap menjadi kekuatan terdepan di dunia PHP dan pesaing utama di tengah beragam kerangka kerja PHP saat ini.
Apa yang baru di CakePHP versi 3?
Ulasan ini didasarkan pada rilis alfa CakePHP 3.0, yang menggabungkan sejumlah fitur dan peningkatan baru termasuk:
Kinerja yang lebih baik. Versi 3 menggabungkan peningkatan kinerja pada proses bootstrap, proses perutean, dan beberapa bagian proses untuk menghasilkan template pembantu.
Komponen dan pembantu yang ditingkatkan. Versi 3 menyediakan dukungan yang ditingkatkan untuk "pesan flash" dengan FlashHelper dan FlashComponent barunya. Selain itu, CookieComponent telah ditingkatkan, membuatnya lebih mudah untuk memisahkan konfigurasi ruang nama cookie dan penanganan data cookie.
Peningkatan manajemen sesi. Manajemen sesi selalu menjadi kelas statis di CakePHP yang telah terbukti bermasalah dalam beberapa cara. Dengan versi 3, Anda sekarang dapat mengakses sesi dari objek permintaan
$this->request->session()
. Perubahan ini juga membuat sesi lebih mudah untuk diuji, dan memungkinkan CakePHP untuk menggunakan PHPUnit 4.x.Konsistensi konvensi yang lebih baik. Kerangka aplikasi dan kerangka plugin telah diperbarui untuk menggunakan struktur direktori yang sama agar lebih konsisten satu sama lain.
Tema dan plugin digabungkan. Tujuan utama CakePHP 3 adalah membuat tema lebih kuat dan kuat. Bekerja menuju tujuan itu, menjadi jelas bahwa yang benar-benar dibutuhkan adalah tema untuk menyediakan kemampuan yang sama seperti plugin. Dengan demikian, plugin apa pun sekarang dapat digunakan sebagai tema, yang juga menyederhanakan pengemasan dan redistribusi.
Perbaikan ORM. Beberapa perubahan API telah dilakukan pada ORM (Object-relational mapping). Terutama, sekarang lebih mudah untuk menentukan asosiasi mendalam untuk menyimpan operasi, dan beberapa konvensi telah diubah untuk mengurangi kurva pembelajaran dan kebingungan di antara pengadopsi baru.
Selain itu, ada beberapa fitur tambahan yang juga rencananya akan dimasukkan ke dalam rilis beta versi 3.0. Yang paling penting:
- Penyempurnaan fitur internasionalisasi dan lokalisasi (i18n dan L10n)
- Pengganti CacheHelper berdasarkan Edge Side Termasuk
- API perutean baru untuk deklarasi rute yang lebih sederhana dan lebih cepat
Memang, versi 3 merupakan peningkatan yang signifikan di luar versi CakePHP sebelumnya.
Mengapa CakePHP?
Meskipun CakePHP memiliki banyak fitur hebat, ulasan ini berfokus pada beberapa yang sangat membantu membedakannya, yaitu:
- Konvensi tentang konfigurasi
- ORM CakePHP (Pemetaan objek-relasional)
- Komponen dan pembantu
Konvensi tentang konfigurasi
CakePHP selalu tentang perkembangan yang cepat dan konsisten dan, untuk tujuan itu, CakePHP sangat menekankan pada konvensi. Oleh karena itu, seperti Ruby on Rails (dari mana CakePHP mendapatkan banyak inspirasi), CakePHP sangat mematuhi prinsip konvensi daripada konfigurasi.
Konvensi berarti bahwa pengembang tidak perlu memikirkan "ke mana perginya" ketika mempelajari cara menggunakan kerangka kerja CakePHP, karena default untuk aturan ini sudah diterapkan. Meskipun seseorang perlu terbiasa dengan konvensi CakePHP, setelah dikuasai, pengembang dapat berkonsentrasi pada pengembangan inti, daripada perlu khawatir tentang di mana kode ditempatkan dan masalah konfigurasi lainnya.
Konvensi CakePHP sangat kontras dengan PHP itu sendiri, yang merupakan bahasa yang cukup liberal. Sebagai hasil dari konvensinya, CakePHP membantu memastikan lebih banyak konsistensi dalam gaya dan struktur pengkodean di beberapa pengembang dan bahkan di beberapa tim. Dengan mengadopsi seperangkat konvensi standar, Cake berusaha untuk membuat pengembangan lebih konsisten.
Untuk skema database, misalnya, CakePHP membuat asumsi default tertentu dalam hal bagaimana variabel tertentu, nama tabel, dan bidang akan diberi nama. Secara khusus, Cake mengharapkan bahwa:
- Nama tabel akan jamak (misalnya,
orders
) - Nama bidang kunci utama adalah
id
- Nama bidang kunci asing mana pun akan didasarkan pada nama tabel yang direferensikan diikuti oleh
_id
(misalnya, kunci asing ke dalam tabelcustomers
akan diberi namacustomer_id
).
Untuk mengilustrasikannya, mari kita lihat ulasan sederhana dari dua tabel ( articles
dan users
) dari database posting blog. Dalam contoh kami, kami akan mengatakan bahwa Articles
"Milik" Users
, dan Articles
Users
"Memiliki Banyak". Hubungan ini akan ditentukan sebagai berikut di CakePHP 3.0:
In ArticlesTable.php: class ArticlesTable extends Table { public function initialize(array $config) { $this->belongsTo('Users'); } } In UsersTable.php: class UsersTable extends Table { public function initialize(array $config) { $this->hasMany('Articles'); } }
CakePHP mengasumsikan konvensi default dan dengan demikian secara otomatis mengetahui kunci asing apa yang harus dicari (yaitu, user_id
dalam tabel articles
) saat mengambil asosiasi apa pun.
Penting untuk ditekankan , bahwa CakePHP 3 memungkinkan konvensi defaultnya dengan mudah diganti. Sebagai contoh, katakanlah kunci asing kita di tabel users
disebut author_id
bukan user_id
. Menentukan ini hanya memerlukan dua perubahan kecil berikut pada kode kita untuk memberi tahu CakePHP bahwa kita tidak menggunakan default:
In ArticlesTable.php: class ArticlesTable extends Table { public function initialize(array $config) { $this->belongsTo('Users' => ['foreignKey' => 'author_id']); } } In UsersTable.php: class UsersTable extends Table { public function initialize(array $config) { $this->hasMany('Articles' => ['foreignKey' => 'author_id']); } }
Jadi, meskipun konvensi memang merupakan bagian integral dari CakePHP dan pasti memiliki kelebihannya sendiri, mengesampingkannya bila perlu sebenarnya cukup sederhana, seperti yang telah kami tunjukkan di sini.
Sementara beberapa pengembang mungkin lebih memilih kerangka kerja PHP (seperti Yii dan Laravel) yang tidak terlalu bergantung pada konvensi, konvensi CakePHP sebenarnya bisa sangat menguntungkan. Mereka dapat membantu secara dramatis mengurangi waktu peningkatan untuk pengembang CakePHP ketika ditugaskan untuk meningkatkan atau memelihara kode yang ditulis oleh pengembang lain, karena mereka menghasilkan struktur dan konvensi pengkodean yang konsisten di beberapa pengembang dan proyek CakePHP.
Pemetaan objek-relasional (ORM) CakePHP
Object-relational mapping (ORM) CakePHP sangat diuntungkan dari konvensi kerangka kerja CakePHP. Dengan menetapkan skema database ke standar Cake, Anda dapat dengan cepat menghubungkan tabel bersama-sama melalui ORM Cake yang kuat. Anda jarang perlu menulis pernyataan SQL, karena CakePHP menangani hal-hal seperti penggabungan tabel, hasMany
, dan bahkan hubungan hasAndBelongsToMany
dengan mudah.

Memanfaatkan ContainableBehavior
CakePHP, melalui asosiasi model Anda, Anda dapat menentukan tabel dan bidang database mana yang akan dipilih dari kueri SQL. Ini bisa masuk beberapa tabel, dan melalui ORM mudah untuk dengan cepat membangun pernyataan SQL yang sangat kompleks.
Kebetulan, ContainableBehavior
CakePHP adalah contoh yang bagus tentang bagaimana CakePHP dapat menyederhanakan dan merampingkan pengembangan PHP. Ini membantu Anda mencari dan memfilter data dengan cara yang bersih dan konsisten dan juga dapat membantu meningkatkan kecepatan dan kinerja keseluruhan aplikasi Anda. (Ini bekerja dengan mengubah sementara atau permanen asosiasi model Anda, menggunakan penahanan yang disediakan untuk menghasilkan serangkaian panggilan bindModel
dan unbindModel
yang sesuai.)
Tantangan dengan ORM adalah membuat penggunaan SQL menjadi sangat sederhana sehingga, jika pengembang tidak berhati-hati, dia dapat menulis kueri SQL yang tidak efisien tanpa sengaja. Saya pasti telah melihat aplikasi Cake yang ditulis dengan buruk berkali-kali yang belum merampingkan kueri mereka. Masalah ini cenderung muncul beberapa tahun setelah sistem diterapkan, ketika database menjadi lebih besar dan kueri yang ditulis dengan buruk menjadi semakin lambat.
Masalah utama di sini adalah bahwa, sebelum CakePHP versi 3 terbaru, ORM Cake secara default akan mengambil tabel terkait saat melakukan kueri. Akibatnya, kueri "temukan semua" yang sederhana berpotensi menjadi sangat membengkak karena SQL yang mendasarinya akan mengambil semua data dari semua tabel terkait. Di versi 3, perilaku ini tidak lagi default. (Dan di CakePHP versi sebelumnya, perilaku default ini mudah dinonaktifkan hanya dengan menambahkan public $recursive = -1;
ke file AppModel.php
utama Anda.)
Secara keseluruhan, review dari Cake's ORM menunjukkan bahwa itu benar-benar membantu merampingkan pengembangan dan, jika digunakan dengan benar, adalah alat yang luar biasa untuk membangun kueri kompleks dengan cepat. Meskipun demikian, sangat penting bagi pengembang untuk meluangkan waktu untuk sepenuhnya memahami ORM dan memastikan bahwa kueri mereka dioptimalkan dengan benar (sebagaimana berlaku dalam bahasa apa pun).
Komponen dan Pembantu: Pustaka CakePHP
Salah satu fitur hebat CakePHP adalah pustaka bawaan – Komponen dan Pembantu – yang menghilangkan banyak tugas pengembangan yang membosankan, berulang, dan membosankan. Dalam konteks MVC, Komponen membantu merampingkan pengembangan pengontrol, sementara Pembantu menyederhanakan pengkodean tampilan dan logika (yaitu, lapisan presentasi).
PaginatorComponent
, misalnya, secara otomatis membuat antarmuka halaman berikutnya/sebelumnya dari kueri pencarian. Tambahkan JsHelper
, dan tiba-tiba Anda memiliki AJAX Pagination, yang didukung oleh kerangka kerja JavaScript favorit Anda (jQuery secara default).
Contoh cepat dari Pembantu berguna lainnya meliputi:
-
TimeHelper
: Membuat tampilan tanggal dan waktu menjadi mudah, menyediakan serangkaian fungsi untuk memformat dan mengevaluasi nilai waktu. -
NumberHelper
: Menyediakan metode yang mudah untuk menampilkan angka dalam berbagai format dan presisi umum (atau disesuaikan). -
TextHelper
: Membantu mengaktifkan tautan, memformat URL, membuat kutipan teks di sekitar kata atau frasa yang dipilih, menyorot kata kunci dalam blok teks, dan dengan anggun memotong teks yang panjang.
Dan masih banyak lagi.
Kritik terhadap CakePHP 3
Yang pasti, setiap framework memiliki pro dan kontra, tidak terkecuali CakePHP. Berikut adalah beberapa kritik paling umum yang ditujukan pada CakePHP di luar ulasan ini:
“Kerangka kerja lama; kembung dan lambat.” Kritik ini biasanya lebih bersifat historis, dengan kebenaran terbatas (jika ada) saat ini. Mendukung versi PHP sejauh PHP 4 secara historis membutuhkan CakePHP untuk menangani banyak masalah warisan PHP sendiri. Dengan semakin matangnya PHP, dan khususnya dengan dirilisnya CakePHP versi 3, tuduhan ini benar-benar telah kehilangan validitasnya.
“Terlalu ketat dan membatasi.” Meskipun ada keuntungan yang jelas dari konvensi CakePHP, ada juga yang mengkritiknya. Kritikus sering berargumen bahwa konvensi tersebut terlalu ketat, tetapi mereka gagal untuk mengenali (atau mengakui) bahwa konvensi ini dapat dengan mudah diganti. Dengan mengadopsi seperangkat konvensi standar, Cake berupaya membuat pengembangan konsisten yang, mengingat praktik pengkodean PHP yang longgar, seharusnya hanya dilihat sebagai hal yang positif.
"Siklus rilis lambat". Siklus rilis lambat tidak selalu buruk. Sebaliknya, siklus rilis yang terlalu agresif justru bisa lebih bermasalah. Faktanya, sebagian alasan mengapa rilis besar CakePHP membutuhkan waktu adalah untuk memastikan kompatibilitas mundur dengan versi PHP sebelumnya yang masih digunakan secara luas. Selain itu, siklus rilis konservatif ini dan penekanan pada kompatibilitas mundur menghilangkan kebutuhan akan perubahan besar (dan sering) pada kode Anda saat versi baru dirilis. Perlu juga dicatat bahwa tim CakePHP 3 sama sekali tidak lambat dalam hal rilis minor (perbaikan bug, patch, peningkatan minor, dll.), yang dirilis setiap bulan . Demikian pula, sebagian besar tiket bug dijawab dalam beberapa jam setelah diposting.
“Bukan solusi out-of-the-box.” Berbeda dengan banyak kerangka kerja PHP “aplikasi web out of the box” modern lainnya (seperti Yii, misalnya), CakePHP sengaja terlihat untuk mendukung dan mengaktifkan solusi kustom. Saya pribadi mendapat manfaat besar dari ini dalam mengembangkan sejumlah besar, kustom, situs web dan aplikasi berbasis database.
"Menggunakan array data daripada objek." Ini tidak lagi benar, pada versi 3. Di versi sebelumnya, data apa pun perlu disimpan dan dirujuk sebagai array bersarang (mis.,
$user['User']['username']
). CakePHP 3 akhirnya mengatasi ini, alih-alih menyimpan data sebagai objek (mis.,$user->username
).“Dokumentasi yang buruk.” Ada beberapa validitas untuk kritik ini, karena dokumentasi CakePHP tampaknya tidak selalu ditulis dengan mempertimbangkan pemula (informasi penting kadang-kadang dibahas hanya dalam satu atau dua kalimat, sedangkan beberapa paragraf diskusi mungkin akan diperlukan. ). Tim pengembangan Cake menyadari hal ini dan sedang bekerja untuk meningkatkan dokumentasi yang sesuai. Faktanya, halaman beranda dokumentasi CakePHP 3 secara eksplisit menyatakan komitmen tingkat tinggi terhadap “kualitas, validitas, dan akurasi” dokumentasi. Karena CakePHP adalah kerangka kerja berbasis komunitas, tombol “Perbaiki Dokumen ini” disediakan di setiap halaman dokumentasi, memungkinkan dan mendorong pengguna CakePHP untuk berkontribusi dalam penambahan, penghapusan, atau koreksi mereka sendiri ke dokumentasi.
Kesimpulan
Secara keseluruhan, hampir 10 tahun setelah rilis awal, tinjauan CakePHP mengungkapkan bahwa itu tetap menjadi pesaing yang kuat dan tangguh bagi banyak kerangka kerja PHP lain yang telah muncul.
CakePHP adalah solusi pengembangan yang lengkap dan komprehensif. Basis kode sudah matang dan fungsionalitasnya tampaknya tidak ada habisnya. Secara keseluruhan, Cake telah dibangun untuk mempercepat pengembangan, yang penting tidak hanya bagi pengembang perangkat lunak, tetapi juga bagi investor. Biaya pengembangan perangkat lunak terbesar adalah biaya waktu pengembangan, dan CakePHP bertujuan untuk mengurangi waktu pengembangan secara signifikan.
CakePHP adalah proyek yang dijalankan oleh komunitas. Itu hanya bisa menjadi lebih baik karena semakin banyak orang yang terlibat. Setelah terlibat selama 7 tahun dan melihat komunitas terus berkembang, saya sangat bersemangat untuk tahap selanjutnya dari CakePHP ini. Peluncuran CakePHP 3, dan kematangan PHP dan CakePHP, berarti bahwa framework akan terus menjadi lebih baik dan lebih baik.
Jika Anda mencari solusi berbasis PHP yang menawarkan banyak manfaat yang mirip dengan Ruby on Rails (dalam hal kemudahan penggunaan dan konvensi atas konfigurasi), maka cobalah CakePHP. Tutorial Blog CakePHP hanya membutuhkan beberapa menit untuk menyiapkan dan menjalankannya, atau sebagai alternatif, CakeCoded menawarkan serangkaian pelajaran yang jelas untuk membantu memperkenalkan pengembang PHP dengan CakePHP dan untuk mulai menggunakannya. Dengan sumber daya ini, Anda akan segera melihat sejauh mana CakePHP dapat mempercepat dan meningkatkan upaya pengembangan perangkat lunak PHP Anda. Menikmati!
Michael Houghton adalah Insinyur Toptal yang berbasis di Irlandia dengan pengalaman CakePHP yang luas. Dia telah mengembangkan lebih dari 100 situs web dengan kerangka kerja tersebut, bekerja dengan tim di CakeDC (entitas komersial di balik kerangka kerja CakePHP), telah mengirimkan berbagai tambalan, dan telah membantu dengan dokumentasi CakePHP.