Pada kasus-kasus tertentu dimana kita perlu membuat ulang applikasi yang sebelumnya telah berjalan, atau misal karena database dan table-tablenya telah dibuatkan sebelumnya oleh pihak lain. Untuk memulai pekerjaan seperti ini kita bisa menggunakan fasilitas dari Doctrine tools dan Symfony untuk memulai pekerjaan ini supaya dapat dimulai lebih cepat dengan langkah-langkah sebagai berikut:
- Buat Symfony 4 Project dengan Doctrine support yang telah terpasang didalamnya.
- Mengkonfigurasi string koneksi ke database yang diinginkan di .env.
- Install REPL bernama psysh-bundle
- Generate entity-entity dari table yang telah ada didalam database yang diinginkan.
- Generate setter dan getter untuk entity-entity yang telah berhasil digenerate.
- Generate repository class untuk entity-entity diatas.
- Setup encoders dan in memory users provider untuk user login (bila menggunakan table users takutnya memakan waktu, sebagiknya dibahas lain waktu).
- Setup FOSserBundel.
- Setup EasyAdminBundle sebagai administrasi backend sederhana untuk menampilkan informasi dari database.
- Setup API Platform.
- Setup API Platform Entity supaya dikenali sebagai API.
- Install Symfony Cors
- Setup API Platform Admin.
"Seperti yang dijelaskan dalam dokumentasi resmi Doctrine, reverse engineering adalah salah satu cara untuk memulai sebuah pekerjaan dari database yang sudah terbentuk sebelumnya. Kemampuan Doctrine sendiri mampu mengkonversi 70-80% dari informasi mapping yang diperlukan dari informasi berupa fields, indexes dan foreign key constraints yang berada di database. Akan tetapi tetap masih ada beberapa keterbatasan yang mana Doctrine tidak mampu untuk melakukan konversi, seperti misalnya: inverse associations, inheritance types, entities dengan beberapa foreign keys sebagai primary keys atau operasi semantic pada associations seperti misalnya cascade atau lifecycle events. Beberapa hal tersebut masih menjadi PR yang harus dikerjakan secara manual." sumber
Tahap 1 - Buat Symfony Project
Sebelumnya saya telah membuat beberapa catatan mengenai cara membuat project Symfony di local komputer kita, adapun catatan-catatan tersebut dapat dilihat pada halaman-halaman berikut:
Setup Symfony 4, PostgreSQL, Nginx diatas Docker (
link).
Setup Symfony Website Skeleton dengan Cepat dan Mudah (
link).
Symfony 4 Api Platform Installation (
link)
Ketiga catatan saya diatas dapat membantu untuk memulai membuat project Symfony 4 dengan cepat karena saya sertakan snapshotnya juga. Bila ada pertanyaan silahkan komentar saja dihalaman yang tengah diikuti.
+Pasang Bootstrap dengan Encore
Petunjuk instalasi Encore ada disini. Cara memasang Bootstrap dengan Encore ada disini.
$ composer require symfony/webpack-encore-bundle
$ yarn install
$ yarn add jquery popper.js --dev
$ yarn add bootstrap --dev
Hasilnya
 |
Hasil dari instalasi Encore dan Bootstrap |
 |
Hasil dari instalasi Encore dan Bootstrap |
Tahap 2 - Buat dan Test Koneksi ke Database
Untuk memulai tahap ini pastikan bahwa kita sudah memiliki applikasi Symfony terpasang pada komputer kita dalam kondisi terkoneksi dengan database yang menjadi target, selain itu pastikan juga REPL psysh-bundle terpasang, bila perlu detailnya bisa cek apa yang sudah saya lakukan dibawah ini.
+Buat Koneksi
 |
Memasang string koneksi di .env milik Symfony. |
Tahap 3 - Install REPL psysh-bundle
Tidak ada yang spesial dalam instalasi psysh-bundle. Untuk cara instalasi dapat dilakukan persis seperti yang ada pada halaman github bundle ini.
$ composer require --dev theofidry/psysh-bundle
Bila belum Symfony 4 maka registrasikan sendiri bundelan ini.
<?php
// app/AppKernel.php
public function registerBundles()
{
//...
if (in_array($this->getEnvironment(), ['dev', 'test'])) {
//...
$bundles[] = new Fidry\PsyshBundle\PsyshBundle();
}
return $bundles;
}
+Test Koneksi Via Psysh
 |
Test koneksi kedatabase. |
Tahap 4 - Generate Entity dari Database
Sekarang tiba saatnya masuk kepembahasan utama. Pada tahap ini kita akan mengkonversi berbagai macam informasi didatabase menjadi php class entity dan juga berserta annotationnya.
$ bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity
|
 |
Error karena ada table yang tidak memiliki primary keys |
Upps... ada error...!
In DatabaseDriver.php line 289:
Table cache has no primary key. Doctrine does not support reverse engineering from tables that don't have a primary key.
Untuk mengatasi error diatas maka kita perlu meng-exclude beberapa table yang tidak memiliki primary key dari konfigurasi Doctrine config/packages/doctrine.yaml.
Kecualikan beberapa table yang tidak memiliki primary key dari skema Doctrine supaya tidak menyebabkan error.
doctrine:
dbal:
schema_filter: ~^(?!cache|migrations||session)~
 |
Daftar table yang dikecualikan karena tidak memiliki primary key. |
Hasilnya
Beriku ini adalah hasil dari eksekusi perintah bin/console doctrine:mapping:import.
 |
bin/console doctrine:mapping:import |
Perintah bin/console doctrine:mapping:import diatas menghasilkan file-file entity sebagai berikut:

Tahap 5 - Generate Setter dan Getter
Hasil dari proses diatas belum termasuk dengan setters dan getters, oleh karena itu maka kita perlu generate setters dan getters nya.
$ bin/console make:entity --regenerate App
 |
Generate setters dan getters |
 |
Akhirnya semua entity punya setters dan getters (Setter dan Getter milik ve $ownerId yang nanti kita konversi ke relationship di waktu yang lain). |
Tahap 6 - Generate Repository Class
Sengaja saya pisah proses pembuatan repository dengan proses generate setter dan getter diatas supaya lebih jelas untuk dipahami.
 |
Set nama repository class yang diinginkan |
$ ./bin/console make:entity --regenerate
+Set URL Symfony API Platform
Rubah total isi dari file App.js berikut ini supaya sesuai dengan keperluan kita.
$ vim src/App.js
 |
vim src/App.js |
$ yarn start
 |
Hasil dari yarn start. |
Penampakan Halaman dari API Platform Admin.
- https://undebugable.blogspot.com/2019/11/test-koneksi-symfony-ke-database-dengan.html
- https://stackoverflow.com/questions/51774053/symfony-4-and-doctrine-how-to-generate-repository-automatically-after-mapping
- https://symfony.com/doc/current/doctrine/reverse_engineering.html
- https://symfony.com/doc/current/doctrine/reverse_engineering.html#generating-the-getters-setters-or-php-classes
- https://api-platform.com/docs/core/getting-started/#installing-api-platform-core
- https://undebugable.blogspot.com/2019/08/symfony-4-api-platform-installation.html
- https://undebugable.blogspot.com/2019/06/membuat-symfony-user-login-dengan.html
Comments
Post a Comment