Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ad3n/d5a36f13d697ca6cccdd403f87b185d0 to your computer and use it in GitHub Desktop.
Save ad3n/d5a36f13d697ca6cccdd403f87b185d0 to your computer and use it in GitHub Desktop.
#1 [SymfonyId Free Course]
Your Telegram History
03.10.2016 17:00:15, Nur Rahmat Taufik(you): undefined
03.10.2016 17:16:40, Muhammad Surya: selamat datang semuanya 😊
03.10.2016 17:30:04, Muhammad: undefined
03.10.2016 17:30:10, Muhammad: Tes
03.10.2016 17:30:30, Muhammad Surya: Makin rame
03.10.2016 17:30:41, Muhammad Surya: tersisa 10 quota lagi :D
03.10.2016 17:30:50, Muhammad Surya: 5 dari luar 5 dari komunitas
03.10.2016 17:31:03, Muhammad: SeeepppπŸ‘
03.10.2016 18:38:07, rudjok: undefined
04.10.2016 01:47:12, Abdul Jabar: undefined
04.10.2016 01:47:19, Abdul Jabar: TES
04.10.2016 06:29:16, Muhammad Surya: Ditest dulu aja masih hari selasa
04.10.2016 09:53:04, Muhamad: undefined
04.10.2016 10:00:34, Muhamad: terima kasih sudah di ijinkan untuk bergabung..
perkenalkan saya muhamad alfan, masih duduk di bangku kuliah semster 7, dan kerja di salah satu perusahaan swasta, salam kenal semua 😊😊
mohon bimbingannya ya πŸ™πŸ»πŸ™πŸ»
04.10.2016 13:55:50, Muhammad Surya: udah om
04.10.2016 13:56:45, Muhammad Surya: eh salah tempat
04.10.2016 15:04:48, Yuan: salam kenal semua.
04.10.2016 15:05:04, Yuan: om sur, kita nanti pakai git semua atau bagaimana buat praktek?
04.10.2016 15:07:54, Muhammad Surya: Pakai local masing2 aja om
04.10.2016 15:08:09, Yuan: ente gak periksa2 nanti?
04.10.2016 15:11:14, Muhammad Surya: Ga usah om...
06.10.2016 09:28:59, Ahmad: undefined
06.10.2016 10:00:16, Muhammad Surya: Assalamu'alaikum guys, sebelum mulai belajar bareng kita besok, ane pengen tanya nih,
Apa ekspektasi atau harapan kalian semua setelah ikut sharing session sesi pertama ini?
06.10.2016 10:01:34, Feisal: Bisa kenal dengan framework symfony, dari mulai kelebihan kekurangan, struktur, dll
06.10.2016 10:02:07, Muhammad Surya: oiya sesi pertama ini total ada 10 kali pertemuan online dengan durasi 2-3 jam
06.10.2016 10:02:08, Muhamad: dan brharap bisa mulai instalasi dan basic configurasi
06.10.2016 10:02:40, Muhammad Surya: setelah sesi I kelar, insyAllah akan ada sesi atau angkatan II dan seterusnya (semoga bisa istiqomah)
06.10.2016 10:03:59, Feisal: Amiinn mudah2an aja om
06.10.2016 10:04:09, Muhamad: kalo sampe 10 kali pertemuan, alfan berharap minimal bisa bangun sistem aplikasi yang bisa menggunakan min 50% fitur di symfony om
06.10.2016 10:04:19, Muhamad: aammiinnn
06.10.2016 10:04:48, rudjok: berhubung baru kenalan sama, semoga bisa akrab sama symfony. soalnya denger2 learning curvenya tinggi.
06.10.2016 10:05:07, rudjok: aamiin
06.10.2016 10:05:08, Muhammad Surya: Ane aja baru pakai sekitar 20-30% gan :v Symfony itu terlalu luas kalau dijelajahin semuanya
06.10.2016 10:05:32, Muhamad: berarti target kita 10% ya om 😁😁
06.10.2016 10:05:49, Muhammad Surya: Learning Curve-nya terus naik sebanding dengan peningkatan skill kita om hehehe semakin meningkat semakin ada aja yang dipelajari dari Symfony :D
06.10.2016 10:06:37, Muhammad Surya: Semoga bisa gan 😊 Soalnya kalau 50% itu berarti mencakup Dom Crawler, Browser Kit, Css Selector dan macem2 tool aneh2 yang jarang saya pakai πŸ˜ƒ
06.10.2016 10:07:35, Feisal: Wah luar biasa ternyata symfony ya, baru tau saya
06.10.2016 10:07:49, Muhammad Surya: tapi kalau sudah paham bagaimana memanfaatkan potensi Symfony bakalan lebih mudah belajarnya 😊
06.10.2016 10:08:14, Feisal: Tapi kenapa symfony kurang populer ya dari pada laravel atau yg lain nya gitu om?
06.10.2016 10:27:10, Muhammad Surya: Learning Curve-nya Tinggi, Enterprise Framework seperti Symfony dan Zend akan tetap kurang populer karena mereka segment-nya adalah orang-orang yang sudah berkutat dengan teknologi lain
06.10.2016 10:27:13, Yuan: dijamin ketagihan sama symfony! cuaaaakep!
06.10.2016 10:28:26, Muhammad Surya: Mereka segment-nya adalah orang-orang yang mencari solusi advanced to expert untuk kasus-kasus yang jika menggunakan tool lain, integrasinya lumayan bikin jidat berkerut...
06.10.2016 10:29:26, Muhammad Surya: http://martinfowler.com/articles/enterprisePatterns.html
06.10.2016 10:30:10, Yuan: ada yang harus dibaca2 dulu om surya buat persiapan besok?
06.10.2016 10:30:36, Muhammad Surya: Saya berharap sudah menginstall dan mempelajari apa itu composer bagaimana menggunakan php dengan command line
06.10.2016 10:30:47, Yuan: siip!
06.10.2016 10:31:00, Yuan: mayoritas pakai windows? mac atau linux di sini?
06.10.2016 10:31:26, Muhamad: alfan windows
06.10.2016 10:31:33, Muhammad Surya: saya berharap kalian semua mudah mulai membiasakan dengan command line dan mode hitam putih (TANPA GUI) karena kita akan lebih banyak menggunakan itu ketika bermain dengan Symfony
06.10.2016 10:31:37, Muhamad: siap om sur
06.10.2016 10:32:01, Yuan: maaf of sur, command line saya warna-warni, pake fish. hehehehe...
06.10.2016 10:32:10, Muhammad Surya: wkwkwk mantab dah
06.10.2016 10:33:02, Muhammad Surya: sangat dianjurkan untuk menggunakan Linux karena saya beberapa kali punya pengalaman buruk dengan access control (permission) windows
06.10.2016 10:34:12, Muhammad Surya: Selain itu saya sudah lebih dari 5 tahun tidak menggunakan windows sehingga kemungkinan saya tidak bisa membantu jika ada permasalahan dilevel OS semisal file permission, folder permission, dkk
06.10.2016 10:35:29, Yuan: pake VPS aja yang masih pakai windows. bikin di digital ocean. ringan kok. editor nanti bisa pake sublime text2
06.10.2016 10:36:22, Muhammad Surya: Oiya Editornya diharapkan menggukan minimal Netbeans agar lebih mudah, sebisa mungkin jangan Text Editor, karena untuk autocomplete tidak bisa maksimal
06.10.2016 10:36:31, Yuan: hahaha.. oops..
06.10.2016 10:37:37, Yuan: noted om. koreksi. jangan pake sublime text2.
06.10.2016 10:37:49, Muhammad: materi pertemuan satu apaan brow πŸ˜ƒ
06.10.2016 10:38:03, Muhammad Surya: Instalasi, Konfigurasi dan Touring aja
06.10.2016 10:38:07, Muhammad Surya: ga berat2 dulu
06.10.2016 10:38:37, Muhammad: materi akhir kira2 sampe mana y ?
06.10.2016 10:41:25, Muhammad: ane masih bingung sama pattern di admin builder tempo hari πŸ˜‚
06.10.2016 10:42:10, Muhammad Surya: Semoga bisa nyinggung sampai SIAB πŸ˜ƒ tapi yang jelas ane lebih utamakan pattern Symfony-nya dulu
06.10.2016 10:42:46, Yuan: mantap! pattern dan targetnya SIAB. horeee
06.10.2016 10:43:31, Muhammad Surya: Bagaimana menulis code dengan dengan lebih baik, fleksibel untuk di extends, decouple, dan lebih bersih dari hardcode
06.10.2016 10:44:33, Muhammad Surya: Insya Allah kalau memang suka dengan esperimen, ini akan asyik 😊
06.10.2016 10:44:45, Muhammad Surya: nanti ada di github kok tiap progress-nya 😊
06.10.2016 10:45:04, Yuan: besok jam berapa om?
06.10.2016 10:45:31, Muhammad Surya: Jam 20.00 - 22.00 insya Allah
06.10.2016 10:45:45, Yuan: prime time itu! siiiip!
06.10.2016 10:57:11, Muhammad Surya: Persiapan:
1. IDE (Netbeans or Eclipse)
2. Composer (getcomposer.org)
3. Symfony Installer (symfony.com/download)
4. Koneksi Internet
5. Snack
06.10.2016 10:57:26, Muhammad Surya: buat besok tolong dipersiapkan aja 😊
06.10.2016 11:08:13, Feisal:
06.10.2016 11:08:13, Feisal: Om kalau udh berhasil install tampilan nya gini bukan
06.10.2016 11:08:36, Muhammad Surya: yup gan
06.10.2016 14:55:53, Nur Rahmat Taufik(you): Wah rame, telat nimbrung. Harapan saya bisa menggunakan framework symfony, berikut best practice ketika mendevelop web dg symfony juga
07.10.2016 07:51:40, Ahmad:
07.10.2016 10:31:39, Iqbal: Wah maaf telat , udh mulai blm yah ?
07.10.2016 10:33:02, Iqbal: Oh mulai jam 20.00 yak , oke
07.10.2016 11:43:15, Muhammad: yg make windows sekarng bukannya dah ada bash y
07.10.2016 11:43:29, Muhammad: meskipun katanya lemot :P
07.10.2016 13:02:51, Muhammad Surya: Guys, sorry... Untuk jadwal hari ini kita majukan jadi jam 19.00 sampai jam 21.00 ya 😊
07.10.2016 13:03:22, Muhammad Surya: jangan lupa untuk menginstall semua yang diperlukan 😊
07.10.2016 13:03:30, Muhammad Surya: ini
07.10.2016 13:19:01, Muhamad: siap om sur
07.10.2016 17:09:26, Yuan: Noted om sur
07.10.2016 18:57:12, Muhammad Surya: Assalamu'alaikum 😊 3 menit lagi ya siap2
07.10.2016 18:57:28, Muhammad Surya: absen donk 😊
07.10.2016 18:57:59, rudjok: ane, om
07.10.2016 18:58:13, Iqbal: Hadir.. cuma inet agak lemot abis ujan..
07.10.2016 18:58:13, rudjok: waalaikumsalam
07.10.2016 18:59:35, Muhamad: hadirr
07.10.2016 19:00:27, Muhammad: hadir brow
07.10.2016 19:01:12, Muhammad Surya: Ok mulai ya 😊
07.10.2016 19:01:19, Muhammad Surya: sudah pada berhasil semua install Symfony?
07.10.2016 19:01:28, Muhamad: alfan sufah
07.10.2016 19:01:30, Muhamad: *sudah
07.10.2016 19:02:17, Yuan: Lanjut om
07.10.2016 19:02:51, Muhammad Surya: Ok sebelum mulai, sedikit pengenalan tentang Symfony bagi yang belum tau
07.10.2016 19:02:57, rudjok: installnya udah, om
07.10.2016 19:03:53, Muhammad Surya: Symfony adalah salah satu Full Stack Web Framework yang secara de facto menjadi standard di PHP (ref: http://stackphp.com)
07.10.2016 19:05:01, Muhammad Surya: Symfony bukan MVC Framework tapi Symfony adalah Request => Response Framework... Dan Symfony adalah yang pertama kali (di bahasa PHP) yang menulis HttpKernel Component
07.10.2016 19:05:53, Muhammad Surya: Symfony adalah Framework PHP dengan cita rasa Java yang kental 😊
07.10.2016 19:06:36, Muhammad Surya: Jadi kalau memang berbeda dengan yang lain ya karena dari awal Symfony memang filosofinya sudah beda 😊
07.10.2016 19:07:42, Muhammad Surya: Di PHP sendiri, Komunitas Symfony telah melahirkan tool yang disebut Composer (Jordi B n Neil A), tool yang awalnya memang dikhususkan untuk memudahkan instalasi Symfony Bundle
07.10.2016 19:08:34, Muhammad Surya: Selanjutnya Symfony banyak digunakan oleh project-project lain seperti Drupal, Laravel, dll (ref: http://symfony.com/projects)
07.10.2016 19:09:03, Ahmad: Hadir
07.10.2016 19:09:30, Muhammad Surya: Sehingga secara tidak langsung, jika kita belajar Symfony maka kita akan lebih mudah masuk ke dalam project open source lainnya yang menggunakan Symfony
07.10.2016 19:09:54, Muhammad Surya: Nah sampai disini apakah tertarik menggunakan Symfony atau malah "ah terlalu kompleks, mending cari yang ringan aja"
07.10.2016 19:11:00, Muhamad: lanjuuttt......
07.10.2016 19:11:09, Muhammad Surya: wah ga ada orangnya ay?
07.10.2016 19:11:20, Nur Rahmat Taufik(you): On
07.10.2016 19:11:31, Iqbal: Lanjut om...
07.10.2016 19:11:52, Muhammad Surya: Ok, sudah pada install Symfony semua kan?
07.10.2016 19:12:00, Ahmad: Tertarik om
07.10.2016 19:12:04, Ahmad: Sudah om
07.10.2016 19:12:30, rudjok: lanjut
07.10.2016 19:12:36, Muhammad: dah brow
07.10.2016 19:12:53, Iqbal: Udh om..
07.10.2016 19:12:58, Muhammad Surya: Ok mari kita bertamasya ke hasil instalasi kita
07.10.2016 19:13:18, Ahmad: Siap
07.10.2016 19:13:45, Ahmad: Versinya bebas atau ditentukan
07.10.2016 19:13:54, Muhammad Surya: latest version 😊
07.10.2016 19:14:05, Ahmad: 3.1.5 om
07.10.2016 19:14:26, Muhammad Surya: yup
07.10.2016 19:14:56, Muhammad Surya: untuk mengetahui versi symfony dapat mengetikan command dari root project
07.10.2016 19:15:06, Muhammad Surya: php bin/console --version
07.10.2016 19:15:20, Muhammad Surya: monggo kirim SS-nya kesini
07.10.2016 19:16:04, rudjok:
07.10.2016 19:16:24, Muhammad Surya: Yang lain gimana?
07.10.2016 19:16:35, Muhammad: done
07.10.2016 19:17:17, Iqbal: v 3.1.5 om
07.10.2016 19:17:26, Nur Rahmat Taufik(you): sebentar
07.10.2016 19:17:37, Muhamad:
07.10.2016 19:17:54, Muhammad Surya: pastikan semuanya pakai 3.1.5 ya guys
07.10.2016 19:18:11, Muhammad Surya: Ok lanjut ya
07.10.2016 19:18:42, Nur Rahmat Taufik(you): 3.1.5
07.10.2016 19:18:58, Muhamad: maaf ya om sur, ijin bentar ya, dsini lagi adzan isya, mau shalat dlu, silakan di lanjut aj
07.10.2016 19:19:05, Muhammad Surya: ok mari masuk ke folder app
07.10.2016 19:19:08, Nur Rahmat Taufik(you):
07.10.2016 19:19:12, Muhammad Surya: Yup moggo gan 😊
07.10.2016 19:19:52, Muhammad Surya: difolder app dua folder secara default yaitu config dan Resources
07.10.2016 19:20:10, Muhammad Surya: dan beberapa file lain seperti AppKernel.php, dkk
07.10.2016 19:20:19, Ahmad:
07.10.2016 19:21:06, Muhammad Surya: mari kita buka file AppKernel.php terlebih dahulu 😊
07.10.2016 19:21:25, Ahmad: Ok
07.10.2016 19:21:48, Muhammad Surya: <?php
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = [
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
new Symfony\Bundle\TwigBundle\TwigBundle(),
new Symfony\Bundle\MonologBundle\MonologBundle(),
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new AppBundle\AppBundle(),
];
if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
$bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
}
return $bundles;
}
public function getRootDir()
{
return __DIR__;
}
public function getCacheDir()
{
return dirname(__DIR__).'/var/cache/'.$this->getEnvironment();
}
public function getLogDir()
{
return dirname(__DIR__).'/var/logs';
}
public function registerContainerConfiguration(LoaderInterface $loader)
{
$loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');
}
}
07.10.2016 19:22:01, Muhammad Surya: kira2 seperti itu ya isi-nya
07.10.2016 19:22:28, Muhammad: ok
07.10.2016 19:22:42, Nur Rahmat Taufik(you): ya sama
07.10.2016 19:22:46, Ahmad: Iya
07.10.2016 19:22:52, Muhammad Surya: registerBundles()
function itu adalah tempat dimana semua bundle (module) symfony didaftarkan
07.10.2016 19:23:41, Iqbal: iya om sama..
07.10.2016 19:24:01, Muhammad Surya: getCacheDir
function ini adalah function yang vital di symfony
07.10.2016 19:25:04, Muhammad Surya: karena berbeda dengan Framework lain-nya yang menjadikan cache sebagai optional ketika optimasi, Symfony justru menggunakan cache sebagai inti dari framewrok
07.10.2016 19:26:19, Muhammad Surya: di folder
var/cache
semua config Symfony tersimpan. Ketika Symfony melakukan booting pada mode production, semua config yang kalian buat tidak akan dianggap
07.10.2016 19:27:02, Ahmad: Lanjut
07.10.2016 19:27:04, Muhammad Surya: sehingga ketika production, kalian tidak bisa melakukan hotfix config semisal ketika mau pindah database, tinggal ubah hostname, port, nama db, dll
07.10.2016 19:27:48, Muhammad Surya: merubah config di production tidak akan mengakibatkan perubahan apapun
07.10.2016 19:28:27, Muhammad Surya: Bagaimana cara merubah config ketika production? dengan cara merubah config seperti biasa dan dilanjutkan dengan populate cache (di Symfony disebut cache warming)
07.10.2016 19:29:38, Muhammad Surya: Ok untuk file AppKernel.php sudah sedikit paham harus diapakan? Kalian tidak perlu merubah apapun kecuali para method
registerBundles()
, itu pun jika kalian akan menambahkan bundle dari luar
07.10.2016 19:30:02, Ahmad: Apakah ini berarti generate ulang cache atau reset cache
07.10.2016 19:30:41, Muhammad Surya: Betul... Dan yang digenerate haruslah production cache bukan development cache 😊
07.10.2016 19:30:47, Muhammad Surya: nanti akan diterangkan bedanya 😊
07.10.2016 19:30:57, Ahmad: Ok, lanjut om
07.10.2016 19:31:24, Muhammad Surya: Lalu ada AppCache.php 😊 file ini biasanya digunakan ketika production
07.10.2016 19:31:59, Muhammad Surya: tapi hati-hati bagi yang belum mengenal apa itu http cache atau browser cache 😊 salah-salah nanti malah bingung karena datanya tidak fresh
07.10.2016 19:32:16, Muhammad Surya: ketika di edit ke save tapi datanya tetap alias tidak berubah
07.10.2016 19:33:10, Muhammad Surya: secara umum file
AppCache.php
tidak perlu diubah2
07.10.2016 19:33:22, Muhammad Surya: Ok, lanjut ke folder config
07.10.2016 19:33:28, Muhammad: ok
07.10.2016 19:33:55, Iqbal: lanjuuut....
07.10.2016 19:33:57, Muhammad Surya: di folder config ini lah file2 config kita disimpan
07.10.2016 19:34:14, Nur Rahmat Taufik(you): yuk lanjut folder config
07.10.2016 19:34:19, Muhammad Surya: mulai dari config aplikasi parameter routing hingga security
07.10.2016 19:34:45, Muhammad Surya: file config utama adalah config.yml
07.10.2016 19:35:04, Muhammad Surya: oiya config di Symfony bisa berubah yml, xml, php, ataupun annotation
07.10.2016 19:35:18, Feisal: Gimana cara rubah nya om?
07.10.2016 19:35:32, Muhammad Surya: Ngerubah apa?
07.10.2016 19:35:45, Feisal: Itu dari yml ke php gitu?
07.10.2016 19:36:05, Ahmad: Bisa berupa kayaknya
07.10.2016 19:36:19, Muhammad Surya: sorry typo
07.10.2016 19:36:26, Muhammad Surya: berupa itu maksudnya
07.10.2016 19:36:32, Feisal: Owh gitu
07.10.2016 19:36:38, Feisal: Lanjut om,
07.10.2016 19:36:41, Muhammad Surya: tapi memang bisa menggunakan php (tidak umum) ataupun xml
07.10.2016 19:37:01, Muhammad Surya: best practise pakai yml untuk private bundle (aplikasi)
07.10.2016 19:37:08, Feisal: Kalau mau pake yg php kita buat lagi atau gmna om?
07.10.2016 19:37:22, Muhammad Surya: dan xml untuk distribution bundle
07.10.2016 19:38:11, Muhammad Surya: distribution bundle maksudnya bundle yang tujuannya untuk digunakan lagi
07.10.2016 19:38:14, Muhammad Surya: https://github.com/SymfonyId/SymfonyIdAdminBundle/blob/master/Resources/config/routes.xml
07.10.2016 19:38:18, Muhammad Surya: contohnya itu
07.10.2016 19:38:50, Muhammad Surya: saya belum pernah pakai php config, harusnya tinggal buat file php trus di daftarkan di config.yml
07.10.2016 19:39:06, Muhammad Surya: didalamnya tinggal return array(key => value);
07.10.2016 19:40:04, Muhammad Surya: ok mari kita buka file config_<env>.yml
07.10.2016 19:40:12, Muhammad Surya: gampangnya config_dev.yml
07.10.2016 19:40:34, Muhammad Surya: imports:
- { resource: config.yml }
07.10.2016 19:40:43, Muhammad: ok
07.10.2016 19:41:01, Muhammad Surya: perhatikan baris itu 😊 semua config_<evn>.yml akan mengeload file config.yml
07.10.2016 19:41:08, Muhammad Surya: sehingga config inti sebenarnya adalah config.yml
07.10.2016 19:41:11, Feisal: Iya ada om
07.10.2016 19:41:43, Feisal: Yg automapping di config guna nya apa ya om?
07.10.2016 19:41:45, Muhammad Surya: disana ada string biasa ada juga yang menggunakan notasi
%secret%
07.10.2016 19:41:56, Muhammad Surya: %<key>%
07.10.2016 19:42:05, Muhammad Surya: ada yang tau itu maksudnya apa?
07.10.2016 19:42:37, Nur Rahmat Taufik(you): artinya menginclude config.yml ya
07.10.2016 19:43:02, Muhammad Surya: Coba buka file parameters.yml 😊
07.10.2016 19:43:07, Iqbal: ngambil dari variabel lain yah ?
07.10.2016 19:43:31, Muhammad Surya: setiap
%<key>%
ada disana, bener ga?
07.10.2016 19:43:41, Feisal: Ada om
07.10.2016 19:43:52, Muhammad Surya: kecuali
%kernel*%
07.10.2016 19:44:12, Ahmad: Lanjut
07.10.2016 19:44:32, Feisal: Kalau kernel kenapa beda om?
07.10.2016 19:44:47, Muhammad Surya: Itu diregister secara internal oleh Symfony
07.10.2016 19:45:19, Muhammad Surya: oiya untuk sebuah key dapat dikenali dan digunakan menggunakan
%<key>%
07.10.2016 19:45:45, Feisal: Key itu kaya variabel gitu y om?
07.10.2016 19:45:46, Muhammad Surya: kalian harus mendaftarkannya dibawah key
parameters
07.10.2016 19:45:59, rudjok: termasuk %locale% juga?
07.10.2016 19:46:30, Muhammad Surya: dia sama seperti yang lain 😊 ada dibawah block
parameters
07.10.2016 19:46:37, Muhammad Surya: bisa di cek di config.yml
07.10.2016 19:46:41, Muhammad Surya: parameters:
locale: en
07.10.2016 19:46:47, Muhammad Surya: ada seperti itu harusnya
07.10.2016 19:46:56, Feisal: Iya ada om
07.10.2016 19:47:09, rudjok: ahh, iya ada
07.10.2016 19:47:35, Muhammad Surya: jadi gini 😊 Di Symfony, kalian boleh mendefinisikan parameters dimanapun selama itu diload maka ia bisa digunakan menggunakan notasi
%<key>%
07.10.2016 19:47:58, Muhammad Surya: tapi best practice-nya ditaruh di parameters.yml
07.10.2016 19:48:07, Muhammad Surya: hehehe ada yang bertanya?
07.10.2016 19:48:35, Muhammad Surya: Mungkin iseng, kenapa kok
%locale%
tidak ditaruh di parameters.yml juga? kenapa nyempil sendirian
07.10.2016 19:48:40, Muhamad: secara default symfony memberi tempat untuk parameter custom di file parameters.yml itu ya om
07.10.2016 19:48:53, Muhammad Surya: Yup
07.10.2016 19:48:57, Muhamad: kecuali locale itu
07.10.2016 19:49:13, Muhamad: klo bole tau locale itu bahasa untuk pengkodingan
07.10.2016 19:49:32, Iqbal: karna ini ya om ?
07.10.2016 19:49:32, Iqbal: Put parameters here that don't need to change on each machine where the app is deployed
07.10.2016 19:50:15, Muhammad Surya: Yup
07.10.2016 19:50:43, Muhamad: ??
07.10.2016 19:50:58, Feisal: Owhh gitu
07.10.2016 19:51:21, Muhammad Surya: tadinya locale juga ditaruh di parameters.yml diawal2 cuma karena ketika install pertama kali file parameters.yml itu selalu digenerate maka kadang user/client itu ganti ke locale yang tidak diregister di translation domain
07.10.2016 19:51:32, Muhammad Surya: jadi agar konsisten maka ditaruhlah disitu
07.10.2016 19:51:48, Muhammad Surya: masalah translation dan translation domain nanti aja
07.10.2016 19:52:02, Muhammad Surya: bukan dia untuk translation
07.10.2016 19:52:06, Iqbal: oke om..
07.10.2016 19:52:11, Muhamad: oke om
07.10.2016 19:52:56, Muhammad Surya: sebenarnya paramaters symfony itu banyak banget secara default
07.10.2016 19:53:07, Muhammad Surya: php bin/console debug:container --parameters
07.10.2016 19:53:22, Muhammad Surya: bisa jalankan itu untuk melihat semua parameters yang terdaftar
07.10.2016 19:53:57, Muhammad Surya: bagaimana, banyak kan ya?
07.10.2016 19:54:03, Iqbal: waw lumayan banyak yah
07.10.2016 19:54:13, Feisal: Keluar banyaak
07.10.2016 19:54:57, Muhammad Surya: coba kalian buat key di parameters.yml dan kemudian jalanin lagi command-nya apakah parameters kalian terdaftar atau tidak
07.10.2016 19:55:17, Muhammad Surya: oiya untuk yml usahakan pakai spasi ya bukan tab
07.10.2016 19:56:18, Muhammad Surya: Ok lanjut atau bagaimana?
07.10.2016 19:56:26, Muhamad: lanjutt om
07.10.2016 19:56:33, Muhammad: gini masbrow...
07.10.2016 19:56:41, Muhammad Surya: Yup
07.10.2016 19:56:50, Iqbal: iya ada om..
07.10.2016 19:57:07, Muhammad: mungkin bisa dijelasin lebih detil tentang config yml
07.10.2016 19:57:18, Feisal: Ga ada da om parameter yg udh saya buat
07.10.2016 19:57:27, Feisal: Ga muncul di list
07.10.2016 19:57:39, Muhammad: dalam hal ini custome yml, misalnya kita mo buat generate code
07.10.2016 19:57:41, Muhammad Surya: Ok siap om setelah ini ya 😊 masih parameters dulu
07.10.2016 19:58:08, Muhammad Surya: pastikan ngeset-nya sejajar key yang lainnya
07.10.2016 19:58:15, Muhammad Surya: gimana muncul tidak
07.10.2016 19:58:16, Ahmad: Lanjut
07.10.2016 19:58:24, Muhammad: klo di phpstorm tinggal klik sebelah kanan dia bakal lari ke configuration class
07.10.2016 19:58:30, Nur Rahmat Taufik(you):
07.10.2016 19:58:42, Muhammad: sory kiri
07.10.2016 19:58:42, Muhammad Surya: Kebanyakan ::
07.10.2016 19:59:00, Nur Rahmat Taufik(you): oh iya typo saya
07.10.2016 19:59:06, rudjok: nongol, om
07.10.2016 19:59:27, Feisal: Eh iya ada om parameter nya, salah naro tadi
07.10.2016 19:59:39, Muhammad Surya: Wah nanti om, soalnya kalau bikin custom config class itu udah intermediate mungkin pertemuan ke 4 atau ke 5
07.10.2016 19:59:49, Muhammad Surya: Ok seeepppppp
07.10.2016 20:00:14, Muhammad: siappp
07.10.2016 20:00:39, Muhammad Surya: Balik lagi ke file config.yml 😊
disana kan ada root key
framework
,
twig
, dll
07.10.2016 20:00:45, Muhammad Surya: betul kan?
07.10.2016 20:00:59, Ahmad: Muncul parameternya
07.10.2016 20:01:03, rudjok: sip, ada
07.10.2016 20:01:09, Feisal: Iy ada
07.10.2016 20:01:12, Muhammad Surya: Itu semua merujuk ke bundle
07.10.2016 20:01:45, Feisal: Bundle ada di folder mana ya om?
07.10.2016 20:01:46, Muhammad Surya: jadi misal
twg
itu kemungkinan besar (karena bisa custom) berasal dari TwigBundle
07.10.2016 20:02:15, Muhammad Surya: Dimana aja asal dicover sama composer autoload-nya
07.10.2016 20:02:49, Muhammad Surya: Misal TwigBundle, bisa dicek di AppKernel.php kalau ada
TwigBundle
disana
07.10.2016 20:03:40, Muhammad Surya: gimana ada kan ya?
07.10.2016 20:03:43, Feisal: Iya ada om
07.10.2016 20:03:44, Muhamad: ada om
07.10.2016 20:03:52, Muhammad Surya: new Symfony\Bundle\TwigBundle\TwigBundle(),
07.10.2016 20:04:05, Ahmad: Di folder vendor ya
07.10.2016 20:04:11, Feisal: Iya om, buat apaan itu om?
07.10.2016 20:04:40, Muhammad Surya: Iya secara default semua akan masuk ke folder itu semua bundle maupun library lainnya
07.10.2016 20:04:46, Muhammad Surya: Yang mana?
07.10.2016 20:05:09, Feisal: Yg bundle?
07.10.2016 20:05:30, Muhammad Surya: Bundle itu sama seperti Module di Zend Framework, Package di Laravel
07.10.2016 20:05:49, Feisal: Kalau di ci apaan om? :v
07.10.2016 20:05:58, Muhammad Surya: Ga ada di CI hehehe
07.10.2016 20:06:08, Muhammad Surya: mungkin module HMVC
07.10.2016 20:06:25, Nur Rahmat Taufik(you): bedanya autoload di folder app dan vendor apa?
07.10.2016 20:06:29, Feisal: Owh kaha hmvc toh
07.10.2016 20:07:13, Ahmad: Mungkin third party
07.10.2016 20:07:15, Muhammad Surya: Di app dia cuma ngeregister composer autoloader
07.10.2016 20:08:25, Muhammad Surya: Sama sedikit bumbu untuk mendaftarkan semua class yang diload sama composer untuk bisa dibaca sama annotation reader-nya Doctrine
07.10.2016 20:09:02, Muhammad Surya: Oiya hampir 100% fitur annotation di PHP driver reader-nya pakai Doctrine punya termasuk Symfony 😊
07.10.2016 20:09:45, Feisal: Apaan lagi tu om :v
07.10.2016 20:09:56, Muhammad Surya: Apanya sal?
07.10.2016 20:10:33, Feisal: Php driver reader nya pake doctrine? Doctrine apaan om?
07.10.2016 20:10:58, Nur Rahmat Taufik(you): annotation itu seperti apa?
07.10.2016 20:11:09, Muhammad Surya: http://www.doctrine-project.org/projects/orm.html
07.10.2016 20:11:11, Muhammad: doctrine PHP ORM
07.10.2016 20:11:24, Muhammad: sama kaya entity framework di .net
07.10.2016 20:11:32, Muhammad: atw hibernate di java
07.10.2016 20:12:00, Muhammad Surya: /**
* @Route("/", name="homepage")
*/
Itu contoh annotation (src: @AppBundle/Controller/DefaultController.php)
07.10.2016 20:12:15, Feisal: Owh kaya hibernate, oke thanks
07.10.2016 20:12:17, Muhammad Surya: bisa dicek di file-nya langsung 😊
07.10.2016 20:12:32, Nur Rahmat Taufik(you): oh comment
07.10.2016 20:12:37, Nur Rahmat Taufik(you): block comment: annotation
07.10.2016 20:13:20, Muhammad Surya: Yup block comment yang memiliki makna dan manipulatif (dapat merubah logic program)
07.10.2016 20:14:07, Muhammad Surya: Ok, jadi kesimpulannya
bahwa root key di config.yml itu (selain yang keyword ya) berasal dari konfigurasi bundle
07.10.2016 20:14:26, Muhammad Surya: Setiap bundle punya root key configuration-nya masing2
07.10.2016 20:14:34, Nur Rahmat Taufik(you): seandainya mau membuat block comment, buat mbedain mana yang benar2 comment dan annotation bagaimana?
07.10.2016 20:15:18, Muhammad Surya: use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route
Annotation adalah class PHP yang perlu di load
07.10.2016 20:15:37, Muhammad Surya: jadi kalau ga diload dan bukan reserved keyword php doc
07.10.2016 20:15:54, Muhammad Surya: annotation reader akan menampilkan error
07.10.2016 20:16:11, Muhammad Surya: ok annotation nanti dulu ya, balik lagi ke config dulu sebentar
07.10.2016 20:16:29, Feisal: Oke om
07.10.2016 20:16:32, Nur Rahmat Taufik(you): oke
07.10.2016 20:16:33, Ahmad: Ok
07.10.2016 20:16:42, Muhammad Surya: Di config.yml kan ada
framework
,
doctrine
, dll
07.10.2016 20:16:59, Feisal: Iya?
07.10.2016 20:17:12, Muhammad: mungkin biar ga bingung bedain komen dan php doc itu dari awalnya komen = // php doc = /**
07.10.2016 20:17:40, Muhammad Surya: nah bagaimana cara mendaftarkan konfigurasi bundle kita? setiap bundle itu sebenarnya punya config-nya masing2
07.10.2016 20:17:47, Feisal: Komen // cuma satu baris kan ya?
07.10.2016 20:18:06, Muhammad Surya: termasuk AppBundle yang merupakan bundle kerja kita
07.10.2016 20:19:28, Muhammad Surya: syarat agar bisa terdaftar adalah dengan membuat folder DependencyInjection yang didalamnya terdapat file AppExtension.php
07.10.2016 20:19:52, Muhammad Surya: <NamaBundleTanpaSurfixBundle>Extension.php
07.10.2016 20:19:55, Muhammad Surya: begitu formatnya
07.10.2016 20:20:24, Muhammad Surya: # Swiftmailer Configuration
swiftmailer:
transport: "%mailer_transport%"
host: "%mailer_host%"
username: "%mailer_user%"
password: "%mailer_password%"
spool: { type: memory }
app:
07.10.2016 20:20:33, Nur Rahmat Taufik(you): ditaruh dimana folder DependencyInjection
07.10.2016 20:20:48, Muhammad Surya: monggo coba tambahkan app seperti diatas dibawah swiftmailer
07.10.2016 20:20:52, Feisal: Di dalem folder vendor bukan?
07.10.2016 20:21:03, Muhammad Surya: Sejajar folder Controller, tapi itu nanti dulu ya 😊
07.10.2016 20:21:52, Muhammad Surya: ok sudah ditambahkan app: diakhir config.yml?
07.10.2016 20:21:57, Muhamad: sudah om
07.10.2016 20:22:07, Feisal: Udah om
07.10.2016 20:22:20, Nur Rahmat Taufik(you): sudah saya tambahin app di bawah swiftmailer
07.10.2016 20:22:23, Ahmad: Sudah
07.10.2016 20:22:33, Muhammad Surya: jalankan php bin/console (nanti kalau aku nyebut console berarti maksudnya symfony console ya)
07.10.2016 20:22:35, Iqbal: sudah om
07.10.2016 20:22:53, Muhammad Surya: jalanin console-nya ketikin php bin/console langsung enter aja 😊
07.10.2016 20:22:55, Muhammad Surya: apa yang terjadi?
07.10.2016 20:23:04, Nur Rahmat Taufik(you): error
07.10.2016 20:23:12, Feisal: Error
07.10.2016 20:23:17, Muhammad Surya: yang lain?
07.10.2016 20:23:18, Nur Rahmat Taufik(you): [Symfony\Component\Config\Exception\FileLoaderLoadException]
There is no extension able to load the configuration for "app"
07.10.2016 20:23:28, Muhammad Surya: ada yang ga error?
07.10.2016 20:23:31, Muhammad Surya: πŸ˜ƒ
07.10.2016 20:23:36, Iqbal: error om
07.10.2016 20:23:55, Muhammad Surya: hahaha ok
07.10.2016 20:24:17, Muhammad Surya: memang harusnya seperti itu karena kita belum membuat extension untuk bundle kita
07.10.2016 20:24:55, Muhammad Surya: Jadi kesimpulannya, kita tidak bisa asal mendaftarkan root key config di Symfony 😊 semua ada aturannya
07.10.2016 20:25:28, Ahmad: Gak error om
07.10.2016 20:25:30, Muhammad Surya: jadi config-nya bersih banget 😊 kalau mau nambahin yang tanpa perlu pengecekan bisa lewat key parameters tadi
07.10.2016 20:25:38, Muhammad Surya: yang benar?
07.10.2016 20:25:55, Feisal: Owh jadi biar ga error lewat parameter ya
07.10.2016 20:25:59, Muhammad Surya: yup
07.10.2016 20:26:10, Ahmad: Error om, tadi belum disave, heheh
07.10.2016 20:26:17, Muhammad Surya: πŸ˜‹
07.10.2016 20:26:24, Muhammad Surya:
07.10.2016 20:26:39, Feisal:
07.10.2016 20:26:52, Muhammad Surya: Ok setelah config, kita turun satu level lagi ke routing.yml
07.10.2016 20:27:15, Feisal: Ada resource ama type
07.10.2016 20:27:36, Muhammad Surya: seperti biasa <file>_<env>.yml itu artinya dia jalan di mode apa
07.10.2016 20:27:45, Muhammad Surya: bisa dilihat di routing.yml
07.10.2016 20:28:00, Muhammad Surya: itu ada type: annotation 😊
07.10.2016 20:28:15, Feisal: Iya ada om
07.10.2016 20:28:42, Muhammad Surya: itu artinya folder @AppBundle<ini otomatis akan dapetin real path dari AppBundle)/Controller/
07.10.2016 20:28:57, Muhammad Surya: routing-nya menggunakan annotation routing
07.10.2016 20:29:17, Muhammad Surya: bisa di cek di DefaultController.php
07.10.2016 20:29:49, Muhammad Surya: Ok bingung ga untuk routing?
07.10.2016 20:29:58, Feisal: Bingguung
07.10.2016 20:30:05, Muhammad Surya: bingung kenapa sal?
07.10.2016 20:30:24, Muhammad Surya: Oiya untuk lebih dalam lagi, bisa lihat routing_dev.yml
07.10.2016 20:30:34, Muhammad Surya: disitu ada cara import routing dari bundle lain 😊
07.10.2016 20:30:47, Muhammad Surya: oiya sorry ke toilet dulu 😊 monggo dipahami dulu routingnya
07.10.2016 20:31:10, Feisal: Kan kalau di ci mah kalah routing itu tinggal nama alias ama letak function nya, kalau ini beda bgt om
07.10.2016 20:33:15, Iqbal: i see om , itu jadi nanti nya dia ngeload semua controller yang ada di AppBundle/Controller lalu nge baca annotaion / block comment nya untuk nama route nya yah ?
07.10.2016 20:33:45, Iqbal: btw untuk route ini ada perbedaan method nya ga ? kaya get, post, put, delete ?
07.10.2016 20:33:48, Muhammad: http://symfony.com/doc/current/routing.html <-- dicek dulu brow
07.10.2016 20:33:49, Muhammad Surya: Lupakan semua tentang CI
07.10.2016 20:34:11, Muhammad Surya: Kosongkan pikiran, kosongkan... makin dalam makin kosong wkwkwk
07.10.2016 20:34:22, Feisal: Wkwkw iya abis masih bingung :v proses adaptasi om
07.10.2016 20:34:30, Muhammad Surya: Ada 😊 nanti akan dijelaskan lebih dalam
07.10.2016 20:34:45, Feisal: Ampun jangan hipnotis saya om, gandakan jodoh saya saja πŸ˜‚
07.10.2016 20:35:05, Muhammad Surya: Ok routing tidak ada masalah ya 😊
07.10.2016 20:35:24, Muhammad Surya: Nanti dirimu bakalan tau kalau routing model CI or YII itu banyak kurangnya
07.10.2016 20:35:42, Muhammad: oks, btw g cuma annotation aj kan brow, bisa xml, yml, plain php
07.10.2016 20:35:47, Muhammad Surya: intinya auto route itu ada kekurangannya
07.10.2016 20:36:19, Feisal: Apaan om kurang nya?
07.10.2016 20:36:23, Muhammad Surya: Yup karena balik lagi, routing itu masuk dalam config sehingga bisa menggunakan annotation, xml, yml maupun php
07.10.2016 20:36:40, Muhammad Surya: Diluar aja ntar ya 😊 disini ga usah mbahas kekurangan framework lain 😊
07.10.2016 20:36:51, Muhammad Surya: Ok masuk ke security.yml
07.10.2016 20:36:52, Feisal: Owh oke om sorry
07.10.2016 20:37:04, Muhammad Surya: # To get started with security, check out the documentation:
# http://symfony.com/doc/current/book/security.html
security:
# http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers
providers:
in_memory:
memory: ~
firewalls:
# disables authentication for assets and the profiler, adapt it according to your needs
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: ~
# activate different ways to authenticate
# http_basic: ~
# http://symfony.com/doc/current/book/security.html#a-configuring-how-your-users-will-authenticate
# form_login: ~
# http://symfony.com/doc/current/cookbook/security/form_login_setup.html
07.10.2016 20:37:10, Muhammad Surya: By default kaya gitu
07.10.2016 20:37:15, Feisal: Ada kay gitu
07.10.2016 20:37:21, Ahmad: Berarti routingnya kita sendiri yang mendeklarasikan
07.10.2016 20:37:29, Muhammad Surya: Yup kanan
07.10.2016 20:37:49, Muhammad Surya: security.yml ini yang mengatur security dan hak akses client terhadap aplikasi kita
07.10.2016 20:38:26, Muhammad Surya: Di Symfony berbeda sekali dengan framework yang, Symfony menerapkan Security System yang ketat
07.10.2016 20:38:49, Muhammad Surya: dia menggunakan Firewall, Access Control List, Decision Manager, dll
07.10.2016 20:38:58, Muhammad Surya: tapi dibahasnya nanti aja untuk point2 diatas
07.10.2016 20:40:13, Muhammad: ok..
07.10.2016 20:40:17, Iqbal: iya lanjut om..
07.10.2016 20:40:41, Muhammad: untuk urusan security confignya di doc symfony rada ribet euy.
07.10.2016 20:40:54, Nur Rahmat Taufik(you): Lanjuuut
07.10.2016 20:41:16, Feisal: Oke om
07.10.2016 20:43:17, Muhammad Surya: sorry tadi bos minta editin promo 😊
07.10.2016 20:43:35, Muhammad: πŸ‘
07.10.2016 20:43:43, Muhammad Surya: oiya security di Symfony bikin kita lepas dari bahaya perubahan requirement yang berhubungan dengan hak akses
07.10.2016 20:44:46, Muhammad Surya: jadi biasanya kita kalau ngoding page yang butuh login kan begini kira2
$this->session->userdata('X') is exist
07.10.2016 20:45:08, Muhammad Surya: Di Symfony itu ga usah... Programmu ga akan berubah walaupun ada perubahan requirement
07.10.2016 20:45:34, Muhammad Surya: Memang lumayan ribet 😊 saya baru masuk tahun kedua mulai mengerti 😊 awalnya saya ga pernah pakai 😊
07.10.2016 20:45:51, Muhammad Surya: Ok di Security akan dibahas khusus jadi lanjut ke services.yml
07.10.2016 20:45:57, Muhammad Surya: yang isinya adalah kosong
07.10.2016 20:45:58, Muhammad Surya: :D
07.10.2016 20:46:00, Muhammad Surya: bener ga?
07.10.2016 20:46:04, Nur Rahmat Taufik(you): saya mulai dari awal, nol -___-
07.10.2016 20:46:29, Feisal: Ada parameter lagi euy
07.10.2016 20:46:31, Nur Rahmat Taufik(you): iya, itu di CI
07.10.2016 20:47:15, Feisal: Ada parameter sama service om
07.10.2016 20:47:58, Muhammad Surya: Yup intinya di services
07.10.2016 20:48:10, Muhammad Surya: itu adalah untuk mendaftarkan service2 yang kita buat
07.10.2016 20:48:17, Muhammad Surya: apa itu service? nanti aja ya 😊
07.10.2016 20:48:40, Iqbal: iya kosong
07.10.2016 20:48:43, Feisal: Oke om
07.10.2016 20:48:44, Muhammad Surya: Nah terakhir di touring hari ini 😊
07.10.2016 20:48:56, Muhammad Surya: mari kita buka folder kerja kita yaitu src
07.10.2016 20:49:05, Muhammad Surya: disana ada folder AppBundle dan AppBundle.php
07.10.2016 20:49:28, Feisal: Iya ada om
07.10.2016 20:49:40, Ahmad: Yup
07.10.2016 20:50:43, Muhammad Surya: AppBundle.php itu berisi class AppBundle (bundle kita)
07.10.2016 20:50:55, Muhammad Surya: yang didaftarkan di AppKernel.php
07.10.2016 20:51:12, Muhammad Surya: Nah didalam dolder AppBundle terdapat folder Controller
07.10.2016 20:51:29, Muhammad Surya: didalamnya file DefaultController.php
07.10.2016 20:52:00, Muhammad Surya: Nah gimana sampai sini sudah sedikit paham tentang tata letak folder dan config symfony?
07.10.2016 20:52:19, Feisal: Sudah om alhamdulillah
07.10.2016 20:52:35, Muhammad Surya: return $this->render('default/index.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
]);
itu seperti $this->load->view di CI
07.10.2016 20:52:56, Muhammad Surya: Oiya setiap Action di Symfony wajib mengembalikan Response
07.10.2016 20:53:13, Muhammad Surya: use Symfony\Component\HttpFoundation\Response
07.10.2016 20:53:25, Muhammad Surya: mengembalikan object dari class itu
07.10.2016 20:53:34, Muhammad Surya: ok guys sudah diusir
07.10.2016 20:53:44, Feisal: Owh load view nya kaya gitu, kalau view nya ada banyak berarti tinggal copas code itu aja om?
07.10.2016 20:54:04, Muhammad Surya: ga bisa gitu sal
07.10.2016 20:54:12, Muhammad Surya: nanti akan dijelaskan lebih lengkap di pertemuan kdua 😊
07.10.2016 20:54:17, Muhammad Surya: Thanks ya guy...
07.10.2016 20:54:23, Yuan: thank you master!
07.10.2016 20:54:26, Muhammad Surya: Salamu'alaikum 😊 ane pulang dulu
07.10.2016 20:54:29, Muhammad Surya: udah diusir
07.10.2016 20:54:35, Feisal: Hahaha di usir
07.10.2016 20:54:36, Nur Rahmat Taufik(you): Oke thanks master
07.10.2016 20:54:36, Yuan: wa'alaykumusallah
07.10.2016 20:54:40, Nur Rahmat Taufik(you): hati-hati di jalan
07.10.2016 20:54:41, Yuan: salam
07.10.2016 20:54:46, rudjok: waalaikumsalam, om.
07.10.2016 20:54:49, Iqbal: thanks juga om udh bagi bagi ilmu nya
07.10.2016 20:54:50, Feisal: Oke om thanks banget ya om, TTDJ om
07.10.2016 20:55:01, Iqbal: walaikumsalam..
07.10.2016 20:55:01, Muhammad: oks
07.10.2016 20:55:02, Nur Rahmat Taufik(you): wa'alaikum salam
07.10.2016 20:55:04, Ahmad: Waalaikumsalam, jazakallohu khoiron
07.10.2016 20:55:10, rudjok: trims, om.
07.10.2016 20:55:17, Muhamad: wa'alaikum salam om
07.10.2016 20:55:19, Muhamad: terima kasih banyak om
07.10.2016 20:55:27, Muhammad: lanjut ya brow di FB πŸ˜‚πŸ˜‚πŸ˜‚
07.10.2016 20:55:38, Nur Rahmat Taufik(you): Pindah lapak ke fb :v
07.10.2016 20:55:46, Feisal: Ayok pindah lapak
07.10.2016 20:57:27, Yuan: ini buka FB kok lambat amat ya.
07.10.2016 20:57:36, Muhammad Surya: Monggo dicoba2 dulu... Minggu depan kita masuk ke controller dan view
07.10.2016 20:58:24, Feisal: Oke om di tunggu
07.10.2016 20:58:58, Muhamad: siap om, di tunggu minggu depan ya
07.10.2016 22:18:07, Abdul Jabar: mantabbbbb, makasih om. ane baru sempet buka.
13.10.2016 16:09:17, Yuan: besok jam berapa om?
13.10.2016 16:09:31, Muhammad Surya: Kemungkinan seperti kemarin 😊
13.10.2016 16:09:56, Yuan: OK.
13.10.2016 16:10:03, Yuan: ada yang perlu dibaca buat besok?
14.10.2016 08:03:02, Muhammad Surya: Documentation create page with Symfony om
14.10.2016 08:39:59, Yuan: Siip
14.10.2016 08:41:54, Yuan: Yg paling menarik buat saya, cerita2 seputar symfony. Kaya krmaren cara kerja cache. Mantap.
14.10.2016 09:35:53, Muhammad Surya: Hahaha semoga nanti bisa membahas sampai cache management dan how cache work in Symfony dan why Symfony different with others
14.10.2016 15:55:15, Yuan: Mantap. Sebenarnya soal seluk beluk symfony semuanya menarik. Maklum baru kenal dan masih kecanduan.
14.10.2016 17:53:51, Muhammad Surya: Assalamu'alaikum guys... Jangan lupa ya hari ini jam 19.00 kita mulai
14.10.2016 18:23:38, Nur Rahmat Taufik(you): Wa'alaikum salam
14.10.2016 18:23:42, Nur Rahmat Taufik(you): Siaaap om
14.10.2016 18:43:30, Muhammad Surya: Wah sepi?
14.10.2016 18:56:14, Muhammad Surya: Guys, sudah siapkah?
14.10.2016 18:56:17, Muhammad Surya: Absen dulu donk
14.10.2016 18:58:52, rudjok: absen
14.10.2016 19:01:30, Nur Rahmat Taufik(you): Hadiiir
14.10.2016 19:01:48, Muhamad: hadirrr
14.10.2016 19:01:57, Muhamad: tp mash otw di jalan om
14.10.2016 19:02:00, Muhamad: hehehe
14.10.2016 19:04:03, Muhammad Surya: Bisa dimulai ga ya?
14.10.2016 19:04:06, rudjok: isya dlu ya, om. lanjut aj.
14.10.2016 19:05:29, Muhamad: kalo temen2 mau langsung mulai gpp om, insyaAllah aku bisa nyusul dari hasil diskusinya
14.10.2016 19:06:02, Muhammad Surya: Saya coba mulai aja ya 😊
14.10.2016 19:06:18, Muhammad Surya: Bismillah, mari kita buka sharing session kali ini 😊
14.10.2016 19:06:39, Muhammad Surya: Ok, malam ini akan mencoba membahas tentang how to create a page in Symfony
14.10.2016 19:06:42, Yuan: Hadir
14.10.2016 19:07:02, Muhammad Surya: bagaimana controller dan view berinteraksi secara lebih dalam
14.10.2016 19:07:24, Muhammad Surya: Untuk konfigurasi, insyAllah sudah mulai paham kan ya 😊
14.10.2016 19:07:37, Yuan: πŸ‘
14.10.2016 19:07:59, Muhammad Surya: Sebelum lebih dalam, coba pahami gambar ini 😊
http://symfony.com/doc/current/introduction/http_fundamentals.html#the-symfony-application-flow
14.10.2016 19:09:13, Muhammad Surya: Ok, jika sudah bisa dipahami, mari kita mulai beraksi 😊
14.10.2016 19:09:42, Muhammad Surya: Kita buat sebuah file di folder Controller dengan nama WelcomeController.php
14.10.2016 19:09:43, Ahmad: Lanjut
14.10.2016 19:09:58, Muhammad Surya: Tau kan dimana harus buatnya?
14.10.2016 19:10:07, Muhammad Surya: di folder AppBundle/Controller
14.10.2016 19:11:18, Muhammad Surya: <?php
namespace AppBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
class WelcomeController
{
public function helloWolrdAction()
{
return new Response('Hello World!');
}
}
14.10.2016 19:11:22, Muhammad Surya: isinya seperti ini
14.10.2016 19:12:43, Muhammad Surya: Controller tersebut belum bisa kita akses via URL karena belum kita daftarkan dalam routing system. Untuk menambahkan route, karena config kita menggunakan annotation seperti yang sudah dibahas minggu lalu, maka kita bisa menambahkan routing sebagai berikut
14.10.2016 19:13:27, Muhammad Surya: <?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
/**
* @Route("/hello")
*/
class WelcomeController
{
/**
* @Route("/world/")
*
* @return Response
*/
public function helloWolrdAction()
{
return new Response('Hello World!');
}
}
14.10.2016 19:13:33, Muhammad Surya: jadinya seperti itu 😊
14.10.2016 19:14:23, Yuan: @return Response itu untuk catatan aja atau bukan?
14.10.2016 19:14:33, Muhammad Surya: slash
/hello
dibagian atas class Controller itu menandakan prefix dari semua route action yang ada di controller.
14.10.2016 19:14:45, Muhammad Surya: Yup itu cuma php doc biasa 😊
14.10.2016 19:15:06, Muhammad Surya: dan slash
/world/
itu adalah action route
14.10.2016 19:15:41, Muhammad Surya: sehingga controller welcome bisa diakses menggunakan url
localhost:8000/hello/world
14.10.2016 19:16:39, Muhammad Surya: bagaimana apakah muncul>?
14.10.2016 19:17:54, Yuan: ✌️️
14.10.2016 19:18:50, Muhammad Surya: Dari routing diatas, kita bisa juga melihatnya di console dengan menjalankan
php bin/console debug:route
14.10.2016 19:19:37, Muhammad Surya: Oiya, setiap action di Symfony wajib mengembalikan object Response (Symfony\Component\HttpFoundation\Response)
14.10.2016 19:20:32, Muhammad Surya: Sehingga bila biasanya cukup echo saja untuk menulis hello world, di Symfony, kita harus mengembalikan object Response untuk menulis hello world
14.10.2016 19:21:11, Muhammad Surya: Pertanyaan pasti muncul, gimana caranya passing parameter kedalam controller
14.10.2016 19:22:30, Muhammad Surya: /**
* @Route("/{name}/")
*
* @param string $name
* @return Response
*/
public function helloYouAction($name)
{
return new Response(sprintf('Hello %s', $name));
}
14.10.2016 19:22:40, Muhammad Surya: Buat action baru seperti berikut
14.10.2016 19:23:25, Muhammad Surya: Kemudian kita akses menggunakan
localhost:8000/hello/Surya
14.10.2016 19:23:34, Muhammad Surya: silahkan ganti Surya dengan apapun
14.10.2016 19:24:01, Muhammad Surya: Nah bagaimana sudah bisa muncul?
14.10.2016 19:25:01, Yuan:
14.10.2016 19:25:55, Yuan: Yang laen lagi masak indomie?
14.10.2016 19:26:06, Nur Rahmat Taufik(you): Muncul
14.10.2016 19:26:07, Muhammad Surya: hahaha mungkin lagi dijalan
14.10.2016 19:26:16, Yuan: Hehehe
14.10.2016 19:27:07, Muhammad Surya: Kalau kita lihat, controller WelcomeController itu tidak extends pada class tertentu di Symfony
14.10.2016 19:28:12, Muhammad Surya: Inilah sebenarnya, bahwa di Symfony tidak ada syarat bahwa sebuah controller harus extends suatu class agar bisa dikenali
14.10.2016 19:29:06, Muhammad Surya: extends pada class Controller(Symfony\Bundle\FrameworkBundle\Controller\Controller) hanya diperlukan jika kita ingin menggunakan fitur2 yang ada pada class Controller tersebut
14.10.2016 19:29:34, Muhammad Surya: Moving forward, kita akan coba mengextends class kita sebagai berikut
14.10.2016 19:30:45, Muhammad Surya: <?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
/**
* @Route("/hello")
*/
class WelcomeController extends Controller
{
/**
* @Route("/world/")
*
* @return Response
*/
public function helloWolrdAction()
{
return new Response('Hello World!');
}
/**
* @Route("/{name}/")
*
* @param string $name
* @return Response
*/
public function helloYouAction($name)
{
return new Response(sprintf('Hello %s', $name));
}
/**
* @Route("/world/{name}/")
*
* @param string $name
* @return Response
*/
public function helloTemplateAction($name)
{
return $this->render('AppBundle:Welcome:hello.html.twig', array('name' => $name));
}
}
14.10.2016 19:30:56, Muhammad Surya: Class controller kita akan terlihat seperti itu
14.10.2016 19:31:15, Muhammad Surya: Perhatikan line berikut:
/**
* @Route("/world/{name}/")
*
* @param string $name
* @return Response
*/
public function helloTemplateAction($name)
{
return $this->render('AppBundle:Welcome:hello.html.twig', array('name' => $name));
}
14.10.2016 19:31:34, Muhammad Surya: kita nambahkan satu action lagi yang ngelink ke sebuah template
14.10.2016 19:32:05, Muhammad Surya: Saya mencoba memperkenalkan salah satu method yang ada di Class Controller yaitu
render
14.10.2016 19:33:04, Muhammad Surya: method ini berfungsi untuk mengembalikan response dari sebuah template... Cara kerjanya adalah memparsing template kemudian memasukkannya sebagai parameter pada class Response
14.10.2016 19:33:27, Muhammad Surya: sehingga dengan menggunaan method
render
kita tidak perlu lagi membuat object Response
14.10.2016 19:34:02, Muhammad Surya: Kita bisa langsung
return $this->render();
14.10.2016 19:34:45, Muhammad Surya:
14.10.2016 19:34:55, Muhammad Surya: Silahkan buat susunan folder seperti berikut
14.10.2016 19:35:11, Muhammad Surya: untuk file hello.html.twig isinya adalah sebagai berikut
14.10.2016 19:35:22, Muhammad Surya: {% extends 'base.html.twig' %}
{% block body %}
Hello {{ name }}, Selamat Datang.
{% endblock %}
14.10.2016 19:36:05, Muhammad Surya: Silahkan dibuka url
localhost:8000/hello/world/Surya
14.10.2016 19:36:10, Muhammad Surya: untuk melihat hasilnya
14.10.2016 19:36:41, Muhammad Surya: Ok silahkan dicoba 3 menit ya 😊 jika sudah ok nanti kita lanjut
14.10.2016 19:37:32, Yuan: sambil tanya2 ya om
14.10.2016 19:37:38, Muhammad Surya: yo monggo
14.10.2016 19:37:46, Yuan: action 1 punya route begini:
14.10.2016 19:37:48, Yuan: /**
* @Route("/{name}", name="name_page")
*/
14.10.2016 19:37:55, Yuan: action 2:
14.10.2016 19:37:57, Yuan: /**
* @Route("/yuan", name="yuan_page")
*/
14.10.2016 19:39:15, Yuan: kalau tadi coba, action 2 di ignore, karena urutannya setelah action 2. apa ini karena actionya di satu page?
14.10.2016 19:40:06, Muhammad Surya: Jadi seperti ini om, di Symfony, route yang pertama kali match akan dieksekusi
14.10.2016 19:40:24, Muhammad Surya: om Yuan cukup menaruh @Route("/yuan") dibagian atas
14.10.2016 19:40:34, Muhammad Surya: maka route tersebut akan dieksekusi
14.10.2016 19:40:46, Yuan: first come first serve. OK
14.10.2016 19:41:02, Muhammad Surya: route /yuan tidak dieksekusi karena selalu match dengan /{name}
14.10.2016 19:41:15, Muhammad Surya: ok bagaimana?
14.10.2016 19:41:24, Yuan: siip
14.10.2016 19:41:32, Muhammad Surya: Sudah muncul pagenya?
14.10.2016 19:41:48, Yuan: mari lanjut dengan twig
14.10.2016 19:42:40, Muhammad Surya: Ok sebelum lanjut di twig, mari kita coba pelajar maksud dari
'AppBundle:Welcome:hello.html.twig'
14.10.2016 19:42:54, Muhammad Surya: Ada yang bisa menjelaskan maksud dari string tersebut?
14.10.2016 19:43:06, Muhammad Surya: Dan dimana path template harus ditaruh?
14.10.2016 19:43:43, Muhammad Surya: Hahaha sepi 😊
14.10.2016 19:43:48, Muhammad Surya: Ok ga masalah
14.10.2016 19:44:01, Yuan: hehehe... biasanya taru di tempat lain
14.10.2016 19:44:14, Muhammad Surya: Dimana om Yuan naruhnya?
14.10.2016 19:44:17, Muhammad Surya: di app ya?
14.10.2016 19:44:25, Yuan: di app
14.10.2016 19:44:38, Muhammad Surya: hehehe gpp om bisa ditaruh disitu
14.10.2016 19:45:01, Muhammad Surya: Ok, saya coba jelaskan maksud string
'AppBundle:Welcome:hello.html.twig'
14.10.2016 19:45:13, Rifky: Sy jumat kuliah om sampe jam 9, paling pulang sy coba praktek.. liat history chat
14.10.2016 19:45:29, Muhammad Surya: noted rif
14.10.2016 19:45:39, Yuan: itu AppBundle:Welcome = dalam folder AppBundle > subfolder Welcome. begitu om?
14.10.2016 19:45:59, Muhammad Surya: template diatas terdapat 3 bagian yagn dipisahkan oleh : (titik dua)
14.10.2016 19:46:21, Muhammad Surya: AppBundle menunjukkan nama bundle tempat dimana template berada
14.10.2016 19:46:49, Muhammad Surya: Welcome itu artinya folder Welcome pada
AppBundle/Resources/views
14.10.2016 19:47:01, Muhammad Surya: dan index.html.twig itu adalah nama file
14.10.2016 19:47:21, Muhammad Surya: eh sorry hello.html.twig maksudnya
14.10.2016 19:47:21, Ahmad: Seperti di gambar yang diatas tadi
14.10.2016 19:47:34, Muhammad Surya: Betul
14.10.2016 19:48:09, Muhammad Surya: Pertanyaannya, bagaimana jika kita ingin menaruh template kedalam folder-folder yang lebih dalam
14.10.2016 19:48:29, Yuan: ohh gitu.. noted!
14.10.2016 19:48:33, Muhammad Surya: misal Welcome/form/hello.html.twig
14.10.2016 19:49:30, Muhammad Surya: kita cukup buat folder form didalam folder Welcome dan mengaksesnya sebagai berikut:
'AppBundle:Welcome:form/hello.html.twig'
14.10.2016 19:49:53, Muhammad Surya: Jadi seperti itulah kira-kira untuk flow dari controller hingga view
14.10.2016 19:50:00, Muhammad Surya: sampai disini ada yang perlu ditanyakan?
14.10.2016 19:50:41, Yuan: selama ini lebih sering model begini om: return $this->render('Welcome/index.html.twig' . siip. jadi makin paham dengan path
14.10.2016 19:50:45, Ahmad: Kirain pakai : lagi
14.10.2016 19:51:53, Ahmad: Apakah harus menyebutkan path templatenya dengan lengkap AppBundle:Welcome dst ?
14.10.2016 19:52:14, Muhammad Surya: ini berarti ada di folder app/views/Welcome
14.10.2016 19:52:43, Yuan: app/Resources/views/Welcome
14.10.2016 19:52:45, Muhammad Surya: Yup gan kalau ada di folder bundle, harus seperti diatas penulisannya
14.10.2016 19:52:58, Muhammad Surya: Oiya lupa Resources-nya πŸ˜ƒ
14.10.2016 19:53:13, Muhammad Surya: Ok mari lebih dalam tentang how to find template
14.10.2016 19:53:20, Yuan: marii....
14.10.2016 19:53:33, Muhammad Surya: Bagaimana Symfony menemukan template dan mana yang harus dieksekusi
14.10.2016 19:53:39, Muhammad Surya: Jadi seperti ini..
14.10.2016 19:53:53, Muhammad Surya: sebenarnya, Symfony pertama kali mencari template pada folder app
14.10.2016 19:54:14, Muhammad Surya: ok sebentar kita buat asumsi dulu biar enak
14.10.2016 19:54:27, Muhammad Surya: 'AppBundle:Welcome:hello.html.twig'
14.10.2016 19:54:44, Muhammad Surya: asumsikan kita mengeload template dengan path tersebut
14.10.2016 19:55:30, Muhammad Surya: Nah, bagaimana Symfony bisa tau kalau path template tersebut ada di folder AppBundle/Resources/views/Welcome/hello.html.twig?
14.10.2016 19:55:42, Muhammad Surya: Begini jalan ceritanya
14.10.2016 19:56:36, Muhammad Surya: Ketika kita memanggil template melalui Symfony, Symfony sebenarnya membuat semacam priority order untuk path template
14.10.2016 19:57:07, Muhammad Surya: Pertama kali, Symfony akan mencari template pada folder app
14.10.2016 19:57:47, Ahmad: Lanjut gan
14.10.2016 19:57:56, Muhammad Surya: jika di folder tersebut tidak ketemu folder AppBundle, maka dia akan mencari di folder AppBundle (bundle path)
14.10.2016 19:58:28, Muhammad Surya: Jika tidak ditemukan juga, maka baru akan menghasilkan error
14.10.2016 19:58:35, Nur Rahmat Taufik(you): src/AppBundle
14.10.2016 19:59:09, Muhammad Surya: Yup gan... Walau kadang untuk bundle2 external bundle path bisa berada didalam folder vendor
14.10.2016 20:00:09, Muhammad Surya: Jadi untuk meng-override template, kita tidak perlu ngacak-ngacak bundle
14.10.2016 20:00:14, Muhammad Surya: mari kita coba buktikan
14.10.2016 20:00:43, Muhammad Surya: saya crop dulu gambarnya
14.10.2016 20:01:04, Muhammad Surya:
14.10.2016 20:01:17, Muhammad Surya: perhatikan folder AppBundle yang ada di folder app
14.10.2016 20:01:26, Muhammad Surya: susunannya seperti itu
14.10.2016 20:01:46, Muhammad Surya: lalu coba kalian isikan apa saja (biar beda dengan yang di folder AppBundle di src)
14.10.2016 20:01:52, Muhammad Surya: lalu jalankan kembali URLnya
14.10.2016 20:01:56, Muhammad Surya: bagaimana hasilnya?
14.10.2016 20:01:59, Muhammad Surya: monggo di share disini
14.10.2016 20:02:17, Muhammad Surya: Ok, sambil mencoba, saya tinggal ke toilet dulu aja
14.10.2016 20:02:19, Muhammad Surya: hehehe
14.10.2016 20:06:16, Ahmad:
14.10.2016 20:06:42, Muhammad Surya: Luar biasa
14.10.2016 20:07:06, Muhammad Surya: Ok, perlu dijelaskan ga kenapa kok harus seperti itu urutannya?
14.10.2016 20:07:21, Muhammad Surya: kenapa kok tidak langsung di bundle path?
14.10.2016 20:07:57, Nur Rahmat Taufik(you): dijelasin dong
14.10.2016 20:08:22, Ahmad: Bisa untuk override template dari dalam bundle ya
14.10.2016 20:08:32, Muhammad Surya: Yup
14.10.2016 20:09:05, Muhammad Surya: Issue utama dari penerapan priority order dengan folder app terlebih dahulu (justru bukan bundle terlebih dahulu) adalah fleksibilitas
14.10.2016 20:10:10, Muhammad Surya: Seperti yang sudah saya jelaskan diatas, ketika kita butuh mengoverride template suatu bundle external yang kita install via composer, kita cukup tinggal membuat template baru di folder app tanpa perlu merubah apapun pada bundle
14.10.2016 20:10:15, Muhammad Surya: sangat fleksible
14.10.2016 20:10:53, Muhammad Surya: Kalau urutannya dibalik, maka sampai matahari terbit dari barat, kita tidak pernah dapat mengoverride template bundle external tersebut
14.10.2016 20:11:17, Muhammad Surya: meski ini fitur terlihat sepele, tapi ini salah satu fitur favorit saya 😊
14.10.2016 20:11:25, Ahmad: Proses override jadi lebih gampang, luar biasa symfony
14.10.2016 20:11:54, Nur Rahmat Taufik(you): template bundle external yang dimaksud itu di src/AppBundle apa di App/Resources/AppBundle?
14.10.2016 20:11:56, Muhammad Surya: Kita bisa mengoverride apapun yang ada di bundle dengan membuat folder sesuai nama bundle di folder app
14.10.2016 20:12:10, Muhammad Surya: src/AppBundle
14.10.2016 20:12:27, Muhammad Surya: itu kebetulan AppBundle terregister didalam workspace kita
14.10.2016 20:12:46, Ahmad: Kalau bundlenya di dalam folder vendor ?
14.10.2016 20:13:18, Muhammad Surya: kalau ia ada didalam folder vendor, maka seperti itu caranya
14.10.2016 20:13:38, Muhammad Surya: Ga hanya didalam vendor, semua bundle mekanisme seperti itu dimana ia berada
14.10.2016 20:13:47, Muhammad Surya: wait saya lihatin in actionnya
14.10.2016 20:14:03, Ahmad: Ok, biar lebih paham
14.10.2016 20:14:15, Muhammad Surya: https://github.com/ad3n/Platform/tree/master/app/Resources
14.10.2016 20:14:18, Nur Rahmat Taufik(you): berarti kalau mau mengoverride template vendor tinggal buat folder yang sesuai namanya di folder app, hmmm
14.10.2016 20:14:28, Muhammad Surya: Yup
14.10.2016 20:14:37, Muhammad Surya: silahkan lihat in actionnya 😊
14.10.2016 20:15:08, Muhammad Surya: di link tersebut, saya mengoverride template TwigBundle dan FOSUserBundle seklaigus
14.10.2016 20:15:37, Muhammad Surya: saya lakukan itu, sekali lagi, tanpa perlu ngerubah apapun pada resources aslinya
14.10.2016 20:15:49, Muhammad Surya: sangat bersih, sangat mudah, sangat fleksibel
14.10.2016 20:15:56, Muhammad Surya: bagaimana?
14.10.2016 20:16:13, Muhammad Surya: apakah sudah mulai paham alur bagaimana symfony menemukan template?
14.10.2016 20:16:21, Nur Rahmat Taufik(you): template TwigBundle yang asli dimana?
14.10.2016 20:16:28, Muhammad Surya: di vendor
14.10.2016 20:17:14, Muhammad Surya:
14.10.2016 20:17:16, Muhammad Surya: Disitu
14.10.2016 20:17:22, Muhammad Surya: di vendor/symfony
14.10.2016 20:17:27, Muhammad Surya: monggo bisa dicek
14.10.2016 20:17:47, Nur Rahmat Taufik(you): saya kira di vendor/twig
14.10.2016 20:18:30, Muhammad Surya: bukan, itu kan library twig-nya, bundle-nya tidak disitu karena twig (meski yang bikin fabpot juga) merupakan library terpisah dari symfony
14.10.2016 20:18:36, Muhammad Surya: seperti Doctrine
14.10.2016 20:18:59, Muhammad Surya: Bagaimana sampai disini sudah paham kan bagaimana cara twig menemukan template?
14.10.2016 20:19:02, Muhammad Surya: bisa lanjut?
14.10.2016 20:19:33, Nur Rahmat Taufik(you): lanjut
14.10.2016 20:20:07, Muhammad Surya: Ok mari kita balik lagi ke routing
14.10.2016 20:20:09, Ahmad: Bisa
14.10.2016 20:20:18, Muhammad Surya: Back to Basic
14.10.2016 20:20:37, Muhammad Surya: Dalam HTTP, terdapat banyak method
14.10.2016 20:20:43, Muhammad Surya: atau HTTP Verb
14.10.2016 20:21:15, Muhammad Surya: Bagaimana caranya membatasi akses terhadap suatu action
14.10.2016 20:21:22, Muhammad Surya: misal
14.10.2016 20:21:54, Muhammad Surya: /**
* @Route("/world/")
*
* @return Response
*/
public function helloWolrdAction()
{
return new Response('Hello World!');
}
14.10.2016 20:22:26, Muhammad Surya: Diaction itu, jika kita cek menggunakan console
14.10.2016 20:22:53, Muhammad Surya: via php bin/console debug:route maka method-nya akan didefinisikan sebagai ANY
14.10.2016 20:23:24, Muhammad Surya: alias baik tiu GET, POST, PUT, DELETE, LINK, OPTIONS dapat mengakses action tersebut
14.10.2016 20:23:51, Muhammad Surya: Nah misalkan kita akan membatasi, action /world/ diatas hanya bisa diakses via POST misalnya
14.10.2016 20:24:01, Muhammad Surya: maka kita cukup menambahkan annotation sebagai berikut
14.10.2016 20:24:27, Muhammad Surya: /**
* @Route("/world/")
* @Method({"POST"})
*
* @return Response
*/
public function helloWolrdAction()
{
return new Response('Hello World!');
}
14.10.2016 20:24:50, Muhammad Surya: silahkan dicoba diakses menggunakan browser, tolong hasilnya laporkan disini 😊
14.10.2016 20:28:04, rudjok:
14.10.2016 20:28:16, rudjok: nah lho?
14.10.2016 20:28:17, Muhammad Surya: Yes
14.10.2016 20:28:28, Muhammad Surya: Harusnya memang seperti itu
14.10.2016 20:28:43, Muhammad Surya: karena belum ditambahkan
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
dibagian atas controller
14.10.2016 20:28:45, Muhammad Surya: πŸ˜‹
14.10.2016 20:28:51, Muhammad Surya: monggo tambahkan itu
14.10.2016 20:28:57, Muhammad Surya: Dan coba akses lagi
14.10.2016 20:29:40, Nur Rahmat Taufik(you): @Method nya gak dikenal om
14.10.2016 20:29:44, rudjok: work like a charm πŸ‘
14.10.2016 20:29:58, Muhammad Surya: Di use dulu seperti diatas 😊
14.10.2016 20:30:15, Muhammad Surya: Gimana coba di SS kesini jok hasilnya
14.10.2016 20:30:25, rudjok:
14.10.2016 20:31:21, Muhammad Surya: Yup... coba command dulu action2 dibawahnya
14.10.2016 20:31:34, Muhammad Surya: hehehe itu dia tetap bisa tapi maksud action dibawahnya
14.10.2016 20:32:06, Muhammad Surya:
14.10.2016 20:32:11, Muhammad Surya: Harusnya error seperti itu
14.10.2016 20:32:36, rudjok: oh, bawahnya gak di pake dulu ya
14.10.2016 20:33:16, rudjok:
14.10.2016 20:34:06, Muhammad Surya: Ok bisa ya?
14.10.2016 20:34:46, Muhammad Surya: Meski simple, fitur ini bisa memastikan kalau yang mengakses website/app kamu itu menggunakan mekanisme yang benar
14.10.2016 20:34:51, Muhammad Surya: bukan asal request
14.10.2016 20:35:54, rudjok: kok yg pertama tadi bisa ya, om?
14.10.2016 20:36:08, Muhammad Surya: Karena ketangkep yang /{name}/
14.10.2016 20:36:26, Muhammad Surya: /**
* @Route("/{name}/")
*
* @param string $name
* @return Response
*/
public function helloYouAction($name)
{
return new Response(sprintf('Hello %s', $name));
}
14.10.2016 20:36:31, Muhammad Surya: karena dia method-nya ANY
14.10.2016 20:36:50, Muhammad Surya: bagaimana apakah sampai disini bisa dipahami?
14.10.2016 20:37:56, Ahmad: Ok
14.10.2016 20:38:27, Muhammad Surya: Kita bisa juga menambahkan method
@Method({"POST", "GET"})
sehingga action kita dapat diakses
14.10.2016 20:38:30, Nur Rahmat Taufik(you): Ya
14.10.2016 20:38:33, Muhammad Surya: menggunakan GET maupun POST
14.10.2016 20:39:05, Muhammad Surya: Ok bagaimana?
14.10.2016 20:39:18, Muhammad Surya: apakah dari awal sampai sini bisa dipahami? hehehe
14.10.2016 20:39:25, Muhammad Surya: udah mau diusir nih soalnya wkwkw
14.10.2016 20:39:55, Ahmad: Lumayan paham gan, mantap
14.10.2016 20:40:00, Muhammad Surya: oiya pertemuan besok kita akan membuat aplikasi kontak sederhana (ada relasi teble pastinya)
14.10.2016 20:40:22, Muhammad Surya: Untuk view saya tidak akan peduli
14.10.2016 20:40:41, Ahmad: Mulai konek ke db gan
14.10.2016 20:40:46, Muhammad Surya: yang saya ingin tekankan adalah alur dari aplikasi dan bagaimana Symfony berinteraksi dengan database
14.10.2016 20:41:20, Nur Rahmat Taufik(you): Siaaap om
14.10.2016 20:41:25, Muhammad Surya: malam ini sampai disini dulu 😊 monggo dipelajari dan dipahami lagi πŸ˜ƒ ane siap-siap pulang dulu... Soalnya gara-gara kemarin ane diusir beberapa commitan malah ketinggalan :v
14.10.2016 20:41:31, Muhammad Surya: ane jadi ga bisa kerja
14.10.2016 20:42:13, Muhammad Surya: Ok, semoga yang singkat ini bermanfaat 😊 dan semoga yang sedikit ini bisa istiqomah
14.10.2016 20:42:24, Muhammad Surya: thanks semua Wassalamu'alaikum warohamtullah
14.10.2016 20:42:29, Ahmad: Terima kasih atas ilmunya, jazakallohu khoiron
14.10.2016 20:42:49, rudjok: ntab, om. thanks lagi u/ minggu ini ya.
14.10.2016 20:42:49, Ahmad: Waalaikumsalam warohmatullohi wabarokatuh
14.10.2016 20:42:57, rudjok: Waalaikumsalam warohmatullohi wabarokatuh
14.10.2016 20:45:06, Nur Rahmat Taufik(you): Wa'alaikim salam, hati2 di jalan
14.10.2016 20:45:39, Abdul Jabar: selamat malam, sory baru gabung. udah ketinggalan jauh nih kayanya
14.10.2016 20:46:24, Muhammad Surya: Belum kim... yang penting terus maju... insyAllah jalan udah mulai kebuka
14.10.2016 20:47:18, Abdul Jabar: waudh udah abis
14.10.2016 20:48:33, Muhammad Surya: Oiya Guys, doain, besok saya dan tim akan ada workshop startup di Bandung... Do'akan juga startup kami http://guidenesia.com bisa sukses dan menjadi product yang mampu bersaing (walau belum ada saingan)
14.10.2016 20:48:42, Muhammad Surya: Semoga segera dapat investor 😊
14.10.2016 20:53:00, Nur Rahmat Taufik(you): Aaamiiin, semoga sukses & lancar
14.10.2016 20:53:22, Muhammad Surya: Thanks semua balik dulu
14.10.2016 23:28:13, Yuan: mantap! wa'alaykumsalam. thank you om sur. baru balik baca lagi nih, tadi ada urusan. semoga ilmunya om sur juga terus bertambah + penuh berkah dan semua yang di group ini juga. aamiin.
21.10.2016 16:38:06, Nur Rahmat Taufik(you): Nanti mulai jam berapa?
21.10.2016 16:38:23, Muhammad Surya: Jam 7 aja sama seperti biasa 😊
21.10.2016 16:40:29, Nur Rahmat Taufik(you): Siaaap
21.10.2016 17:05:53, Yuan: siap master
21.10.2016 19:02:18, Muhammad Surya: Assalamu'alaikum
21.10.2016 19:02:40, rudjok: waalaikumsalam, om sur.
21.10.2016 19:02:48, Muhammad Surya: sudah siap kah?
21.10.2016 19:03:13, rudjok: mulai aja, om.
21.10.2016 19:03:49, rudjok: masi d jalan nih. kite balik sembari mantau.
21.10.2016 19:03:49, Muhammad Surya: Ok Bismillahi Arrohman Arrohim
21.10.2016 19:04:03, Yuan: wa'alaykumusalam om sur
21.10.2016 19:04:09, Muhammad Surya: Malam ini kita akan membahas tentang doctrine dan entity
21.10.2016 19:04:38, Yuan: aseeek. mari
21.10.2016 19:05:50, Muhammad Surya: Doctrine adalah ORM bawaan Symfony
21.10.2016 19:06:21, Muhammad Surya: Dokumentasi Doctrine bisa baca langsung di websitenya
21.10.2016 19:06:33, Iqbal: Mulai om..
21.10.2016 19:06:38, Muhammad Surya: http://www.doctrine-project.org/projects/orm.html
21.10.2016 19:06:47, Muhammad Surya: atau bisa juga di Symfony
21.10.2016 19:07:04, Muhammad Surya: http://symfony.com/doc/current/doctrine.html
21.10.2016 19:07:22, Muhammad Surya: Sebelum membuat entity, ada baiknya ane jelasin dulu sedikit tentang konsep doctrine
21.10.2016 19:08:05, Muhammad Surya: Dalam Doctrine ada dua komponen yaitu Entity dan Repository
21.10.2016 19:08:48, Muhammad Surya: Entity adalah representasi dari table di database, sedangkan Repository adalah representasi dari query atau cara mendapatkan result dari suatu table
21.10.2016 19:10:28, Muhammad Surya: Setiap entity wajib mempunya Repository, namun kita tidak wajib membuat repository, karena bila repository dalam sebuah entity tidak didefinisikan secara eksplisit, maka doctrine akan menggunakan generic repository sebagai repository class dari entity tersebut
21.10.2016 19:10:37, Muhammad Surya: sampai disini bagaimana ada pertanyaan?
21.10.2016 19:11:19, Iqbal: Masih blm paham repository om..
21.10.2016 19:11:36, Yuan: nanti kalau liat contoh langsung paham
21.10.2016 19:11:39, Muhammad Surya: Belum pahamnya dimana bal?
21.10.2016 19:11:47, Nur Rahmat Taufik(you): beda entity dengan repository
21.10.2016 19:12:00, Iqbal: Iya seperti nya kalo udh liat coding nya paham..
21.10.2016 19:12:19, Muhammad Surya: Entity itu sama dengan table di database
21.10.2016 19:12:31, rudjok: generic repository tuh apa, om?
21.10.2016 19:12:32, Muhammad Surya: kalau Repository itu SQL (query)-nya
21.10.2016 19:12:41, Nur Rahmat Taufik(you): oh I see
21.10.2016 19:13:24, Nur Rahmat Taufik(you): entity itu seperti active record kalau di Yii ya
21.10.2016 19:13:37, Muhammad Surya: Generic Repository itu Repository built in di doctrine... dia cuma fungsi2 standard aja...
21.10.2016 19:13:49, Muhammad Surya: Model
21.10.2016 19:15:03, Muhammad Surya: Bagimana masih bingung?
21.10.2016 19:15:51, Iqbal: Jd entity itu buat ngedefinisikan table sama field gt yah ?
21.10.2016 19:16:02, Muhammad Surya: Yup betul
21.10.2016 19:16:19, Iqbal: Trs kalo repository buat ngedefinisikan query query nya ?
21.10.2016 19:16:26, Muhammad Surya: Betul banget bal
21.10.2016 19:16:48, Iqbal: Kaya semacam find atau findOne atau dll ?
21.10.2016 19:16:58, Iqbal: Oke oke om ngerti
21.10.2016 19:17:06, Muhammad Surya: Yup itu fungsi2 yang ada di Repository...
21.10.2016 19:17:24, Nur Rahmat Taufik(you): Oh iya entity itu model kalau di yii1
21.10.2016 19:17:33, Muhammad Surya: Kalau Entity ga boleh ada itu query
21.10.2016 19:17:33, Nur Rahmat Taufik(you): repository itu active record di yii1
21.10.2016 19:17:50, Muhammad Surya: Ok sampai sini udah agak paham ya?
21.10.2016 19:18:05, Ahmad: Lanjut
21.10.2016 19:18:09, Nur Rahmat Taufik(you): Lanjut pak,
21.10.2016 19:18:17, Nur Rahmat Taufik(you): biar langsung ngerti secara prakteknya aja hehe
21.10.2016 19:18:20, Muhammad Surya: Ok, mari kita coba lihat lagi config di parameters.yml
21.10.2016 19:18:39, Muhammad Surya: disana ada config koneksi database kita
21.10.2016 19:18:41, Muhammad Surya: bener kan?
21.10.2016 19:19:11, Yuan: ada
21.10.2016 19:19:26, Nur Rahmat Taufik(you): ada
21.10.2016 19:19:29, Muhammad Surya: Ok sekarang coba jalankan
php bin/console doctrine:database:create
untuk memastikan databasenya udah exist atau belum
21.10.2016 19:20:06, Muhammad Surya: Di Symfony kita diajarkan untuk fokus di coding ga perlu buka2 php my admin atau sejenisnya
21.10.2016 19:20:12, Muhammad Surya: Gimana bisa kan?
21.10.2016 19:20:32, Muhammad Surya: Kalau sudah exist semua database-nya mari mulai untuk membuat Entity pertama kita
21.10.2016 19:20:45, Muhammad Surya: Sebelumnya ane tinggal dulu ke toilet πŸ˜ƒ
21.10.2016 19:21:47, Yuan: kalau dalang, bisa titip ke toiletnya. wehehehe
21.10.2016 19:23:27, Muhammad Surya: hahaha
21.10.2016 19:23:30, Muhammad Surya: im back
21.10.2016 19:23:44, Muhammad Surya: Ok, Di Symfony, Entity ditaruh di folder Entity
21.10.2016 19:23:55, Muhammad Surya: jadi mari kita buat folder Enttiy di dalam folder AppBundle
21.10.2016 19:24:22, Muhammad Surya: <?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
* @ORM\Table(name="groups")
*/
class Group
{
/**
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*
* @var int
*/
private $id;
/**
* @ORM\Column(name="name", type="string", length=77)
*
* @var string
*/
private $name;
}
21.10.2016 19:24:33, Muhammad Surya: Buatlah entity group seperti diatas
21.10.2016 19:24:35, Muhammad Surya: monggo
21.10.2016 19:25:10, Muhammad Surya: Gimana? sudah?
21.10.2016 19:25:30, Yuan: @var int << ini hanya catatan?
21.10.2016 19:25:36, Nur Rahmat Taufik(you): di simpan dengan nama Group.php ?
21.10.2016 19:25:56, Muhammad Surya: Yup
21.10.2016 19:26:14, Muhammad Surya: Pastinya karena wajib ikut PSR-0
21.10.2016 19:26:32, Muhammad Surya: gimana sudah?
21.10.2016 19:26:39, Nur Rahmat Taufik(you): sudah
21.10.2016 19:26:47, Muhammad Surya: Kalau sudah, mari kita mulai menjadi coder pemalas
21.10.2016 19:27:26, Iqbal: Oke sudah om..
21.10.2016 19:27:32, Muhammad Surya: php bin/console doctrine:generate:entities AppBundle:Group
21.10.2016 19:27:39, Muhammad Surya: jalankan perintah tersebut 😊
21.10.2016 19:27:42, Muhammad Surya: monggo
21.10.2016 19:27:51, Muhammad Surya: kemudian cek apa yang terjadi dengan Group.php
21.10.2016 19:27:55, Muhammad Surya: copas disini ya guys 😊
21.10.2016 19:28:01, Muhammad Surya: ane sekalian nyalain laptop dulu 😊
21.10.2016 19:28:38, Yuan: ohh bisa begitu ternyata.
21.10.2016 19:28:56, Nur Rahmat Taufik(you): punya saya
[RuntimeException]
The autoloader expected class "AppBundle\Entity\Group" to be defined in fi
le "/mnt/7DBF633371882F56/Coding/symfony/vendor/composer/../../src/AppBund
le/Entity/Group.php". The file was found but the class was not in it, the
class name or namespace probably has a typo.
21.10.2016 19:29:09, Yuan: ~/D/w/dace2 ξ‚° ξ‚  master Β± ξ‚° bin/console doctrine:generate:entities AppBundle:Group
Generating entity "AppBundle\Entity\Group"
> backing up Group.php to Group.php~
> generating AppBundle\Entity\Group
21.10.2016 19:29:20, Muhammad Surya: Pastiin folder Entity
21.10.2016 19:29:25, Muhammad Surya: dan filenya Group.ph
21.10.2016 19:29:29, Muhammad Surya: .php
21.10.2016 19:29:39, Muhammad Surya: Harusnya seperti ini hasilnya
21.10.2016 19:29:56, Muhammad Surya: Cache clear coba gan
21.10.2016 19:30:09, Yuan:
21.10.2016 19:30:24, Nur Rahmat Taufik(you):
21.10.2016 19:31:02, Muhammad Surya: Mantab om
21.10.2016 19:31:31, Muhammad Surya: hhhmmm itu harusnya udah bener gan
21.10.2016 19:32:04, Muhammad Surya: coba lagi gan
21.10.2016 19:32:09, Muhammad Surya: cache clear
21.10.2016 19:32:25, Nur Rahmat Taufik(you): cache clear lewat command seperti apa pak
21.10.2016 19:33:07, Nur Rahmat Taufik(you): php bin/console cache:clear ya
21.10.2016 19:33:10, Muhammad Surya: yup
21.10.2016 19:33:21, Muhammad Surya: Yang lain gimana udah bisa?
21.10.2016 19:33:47, Nur Rahmat Taufik(you): oh sudah bisa pak
21.10.2016 19:33:57, Nur Rahmat Taufik(you): blm saya save ternyata :v
21.10.2016 19:34:13, Muhammad Surya: wkwkwk
21.10.2016 19:34:15, Muhammad Surya: aduh
21.10.2016 19:34:18, Muhammad Surya: siap2
21.10.2016 19:34:21, Yuan: huahahaha.... kaya masak air kok gak panas2. tahunya belum dinyalain kompornya
21.10.2016 19:34:33, Nur Rahmat Taufik(you): salah fokus mas, kurang aqua
21.10.2016 19:34:37, Muhammad Surya: gimana hasilnya apakah sudah ada setter getternya?
21.10.2016 19:34:50, Nur Rahmat Taufik(you): sudah ada setter dan getternya
21.10.2016 19:35:20, Muhammad Surya: ok mari lanjut
21.10.2016 19:35:24, Muhammad Surya: jalankan perintah
21.10.2016 19:35:36, Muhammad Surya: php bin/console doctrine:schema:validate
21.10.2016 19:35:59, Muhammad Surya: untuk memvalidasi entity kita apakah sudah benar annotation-nya
21.10.2016 19:36:23, Nur Rahmat Taufik(you): keluar ini, pak
[Mapping] OK - The mapping files are correct.
[Database] FAIL - The database schema is not in sync with the current mapping file.
21.10.2016 19:36:32, Muhammad Surya: Good
21.10.2016 19:36:36, Muhammad Surya: ok next step
21.10.2016 19:36:49, Muhammad Surya: php bin/console doctrine:schema:update --force
21.10.2016 19:36:52, Muhammad Surya: jalankan itu 😊
21.10.2016 19:37:09, Muhammad Surya: apa yang terjadi?
21.10.2016 19:37:28, Nur Rahmat Taufik(you): Updating database schema...
Database schema updated successfully! "1" query was executed
21.10.2016 19:38:13, Muhammad Surya: Nah monggo dicek di mysql masing2 apakah table groups sudah terbentuk sesuai dengan apa yang kita buat di class Group
21.10.2016 19:38:15, Muhammad Surya: πŸ˜ƒ
21.10.2016 19:38:38, Iqbal: Wih ada om.. ini semacam migration di laravel yah ?
21.10.2016 19:39:10, Muhammad Surya: Bisa dibilang seperti itu, tapi ini semuanya otomatis tanpa perlu bikin script2an
21.10.2016 19:39:21, Muhammad Surya: Kalau di laravel masih bikin2 kan πŸ˜ƒ
21.10.2016 19:39:39, Iqbal: Iya sih kalo di laravel bikin migration nya dl
21.10.2016 19:39:59, Iqbal: Blm model nya..
21.10.2016 19:40:31, Muhammad Surya: wkwkwk lemot gan
21.10.2016 19:40:51, Muhammad Surya: sorry bukan jelek2in tapi di Symfony kita disuruh ngebut 😊
21.10.2016 19:41:01, Muhammad Surya: maaf2 suka keceplosan
21.10.2016 19:41:21, Iqbal: Bener juga om , bisa lebih cepet kalo gini caranya..
21.10.2016 19:41:26, Muhammad Surya:
/**
* @ORM\Column(name="code", type="string", length=3)
*
* @var string
*/
private $code;
21.10.2016 19:41:31, Iqbal: Apalagi kalo pake generator yak πŸ˜‚
21.10.2016 19:41:31, Muhammad Surya: sekarang coba tambahkan itu
21.10.2016 19:41:36, Nur Rahmat Taufik(you): dimaafkeun :D
21.10.2016 19:41:53, Muhammad Surya: Nanti ada generator
21.10.2016 19:42:01, Muhammad Surya: Coba tambahkan code di group tadi
21.10.2016 19:42:22, Muhammad Surya: dan monggo lakukan step mulai dari generate entity, validate, update schema
21.10.2016 19:42:24, Muhammad Surya: πŸ˜ƒ
21.10.2016 19:42:31, Muhammad Surya: Dan lihat lagi databasenya
21.10.2016 19:43:04, Muhammad Surya: cek file Group.php, dan cek Table groups didatabase apakah sudah sesuai dengan config?
21.10.2016 19:43:26, Muhammad Surya: Bagaimana?
21.10.2016 19:43:34, Muhammad Surya: jangan keenakan ya ini masih jauh xixixi
21.10.2016 19:44:07, Nur Rahmat Taufik(you): ada field baru, bernama code
21.10.2016 19:44:21, Muhammad Surya: seeepppp πŸ˜ƒ
21.10.2016 19:44:34, Muhammad Surya: jadi kesimpulan apa yang didapat sampai saat ini guys?
21.10.2016 19:44:38, Muhammad Surya: πŸ˜ƒ
21.10.2016 19:44:50, Nur Rahmat Taufik(you): yang validate sebenarnya buat apa
21.10.2016 19:45:01, Nur Rahmat Taufik(you): kenapa gak langsung update aja hehe
21.10.2016 19:45:10, Muhammad Surya: Apakah kita sudah satu pemikiran πŸ˜ƒ bahwa Symfony membuat kita fokus tanpa perlu ngurusin database dan tengak tengok database?
21.10.2016 19:45:24, Muhammad Surya: Ini akan berfungsi jika nanti kita sudah bermain dengan relasi
21.10.2016 19:46:08, Muhammad Surya: Karena ketika bermain dengan relasi, di Doctrine ada beberapa model relasi
21.10.2016 19:46:27, Muhammad Surya: Bidirectorial dan Unidirectorial
21.10.2016 19:47:28, Muhammad Surya: Kalau menggunakan schema udpate, dia tidak akan memvalidasi relasi, selama relasi itu didefinisikan benar (dalam pendefinisian column/field yang direlasi) maka schema akan terupdate
21.10.2016 19:47:58, Muhammad Surya: Tapi belum tentu secara config, pendefinisian relasinya benar
21.10.2016 19:48:03, Muhammad Surya: jadi perlu divalidasi dulu
21.10.2016 19:48:12, Muhammad Surya: wait a minute tak kasih contoh
21.10.2016 19:48:36, Muhammad Surya: [Mapping] FAIL - The entity-class 'ORORI\CoreBundle\Entity\Barcode' mapping is invalid:
* The referenced column name 'barcode' has to be a primary key column on the target entity class 'ORORI\CoreBundle\Entity\TransactionDetail'.
[Mapping] FAIL - The entity-class 'ORORI\CoreBundle\Entity\Feedback' mapping is invalid:
* The field ORORI\CoreBundle\Entity\Feedback#productRating is on the inverse side of a bi-directional relationship, but the specified mappedBy association on the target-entity ORORI\CoreBundle\Entity\ProductRating#feedback does not contain the required 'inversedBy="productRating"' attribute.
[Database] FAIL - The database schema is not in sync with the current mapping file.
21.10.2016 19:48:49, Muhammad Surya: live langsung pakai Orori πŸ˜ƒ
21.10.2016 19:49:04, Muhammad Surya: itu secara schema update bakalan berhasil diupdate dan relasi terupdate
21.10.2016 19:49:20, Muhammad Surya: tapi mapping-nya masih belum bener
21.10.2016 19:49:32, Muhammad Surya: gimana bisa dipahami @taufikherjanto ?
21.10.2016 19:49:46, Nur Rahmat Taufik(you): paham
21.10.2016 19:49:54, Muhammad Surya: Ok mari kita lanjtu
21.10.2016 19:50:01, Muhammad Surya: hapus lagi deh code-nya
21.10.2016 19:50:04, Muhammad Surya: πŸ˜ƒ
21.10.2016 19:50:13, Muhammad Surya: ane ga perlu code πŸ˜ƒ tapi ga dihapus juga ga masalah
21.10.2016 19:50:48, Muhammad Surya: Type data di doctrine banyak banget
21.10.2016 19:51:09, Muhammad Surya: dan doctrine support semua RDBMS yang menggunakan pdo
21.10.2016 19:51:32, Muhammad Surya: jadi buat teman-teman yang pakai mysql, postgresql, oracle, dll tetap bisa memakainya
21.10.2016 19:52:01, Muhammad Surya: meski di oracle ada bug karena oracle, di Doctrine makainya OCI Driver bukan PDO
21.10.2016 19:52:24, Muhammad Surya: Ok its time to create a crud
21.10.2016 19:53:06, Muhammad Surya: php bin/console doctrine:generate:crud AppBundle:Group
21.10.2016 19:53:17, Muhammad Surya: Iqbal : welcome to generate
21.10.2016 19:53:22, Muhammad Surya: monggo dijalankan
21.10.2016 19:53:33, Muhammad Surya: tinggal di ikuti aja 😊
21.10.2016 19:53:51, Muhammad Surya: step pertama enter, kedua yes, enter, enter, enter
21.10.2016 19:54:29, Muhammad Surya: Nah, secara otomatis, Doctrine akan membuatkan Crud untuk table Group
21.10.2016 19:54:38, Yuan: edaaan. baru tahu. hahaha
21.10.2016 19:54:40, Muhammad Surya: lengkap dengan form dan controllernya
21.10.2016 19:55:15, Muhammad Surya: tinggal jalanin
php bin/console server:run
untuk ngecek hasilnya
21.10.2016 19:55:24, Muhammad Surya: monggo bagi SS dimari donk
21.10.2016 19:55:36, Muhammad Surya: sekalian kasih waktu ane buat ngelus laptop disebelah πŸ˜ƒ
21.10.2016 19:56:48, Iqbal: Wasik nih πŸ˜‚
21.10.2016 19:56:48, Iqbal: Oke oke om..
21.10.2016 19:58:07, Muhammad Surya: gimana?
21.10.2016 19:58:10, Muhammad Surya: mana nih SS-nya
21.10.2016 19:58:18, Nur Rahmat Taufik(you):
21.10.2016 19:58:37, Muhammad Surya: Mantab
21.10.2016 19:58:44, Nur Rahmat Taufik(you):
21.10.2016 19:58:49, Nur Rahmat Taufik(you): Keren langsung jadi
21.10.2016 19:59:01, Muhammad Surya: Tinggal di style ya 😊
21.10.2016 19:59:11, Muhammad Surya: Symfony form itu fully support bootstrap 3
21.10.2016 19:59:46, Muhammad Surya: Ok setelah entity mari kita pindah ke form
21.10.2016 19:59:58, Muhammad Surya: seperti apa sih form hasil generatenya?
21.10.2016 20:00:02, Muhammad Surya: πŸ˜ƒ ada yang mau share?
21.10.2016 20:00:02, Iqbal: Laptop tiba tiba lag πŸ˜”
21.10.2016 20:01:16, Muhammad Surya: <?php
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class GroupType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('code')
->add('name')
;
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Group'
));
}
}
21.10.2016 20:01:26, Muhammad Surya: seperti ini kah formnya?
21.10.2016 20:01:28, Iqbal: Ini kayanya semacam sails js nih , kalo bikin API tinggal bikin model . Crud nya langsung generate 😊
21.10.2016 20:02:08, Nur Rahmat Taufik(you): yii1 juga ada generator crud :3
21.10.2016 20:02:20, Nur Rahmat Taufik(you): yii1 maupun yii2 :3
21.10.2016 20:02:47, Muhammad Surya: Formnya seperti itu apa ga?
21.10.2016 20:03:29, Nur Rahmat Taufik(you): iya sama pak
21.10.2016 20:04:14, Muhammad Surya: Ok mari kita buat sedikit hack di form
21.10.2016 20:04:20, Muhammad Surya: biar keliatan lebih transparent
21.10.2016 20:05:02, Muhammad Surya: /**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => Group::class,
));
}
21.10.2016 20:05:06, Muhammad Surya: jadi seperti itu
21.10.2016 20:05:13, Muhammad Surya: ingat untuk di use dulu Group-nya
21.10.2016 20:05:24, Muhammad Surya: $builder
->add('code', TextType::class)
->add('name', TextType::class)
;
21.10.2016 20:05:28, Muhammad Surya: Dan seperti itu
21.10.2016 20:07:12, Nur Rahmat Taufik(you): use AppBundle\Entity\Group ya pak?
21.10.2016 20:07:32, Muhammad Surya: Yup
21.10.2016 20:07:40, Muhammad Surya: Ok gimana hasilnya? sama aja kan?
21.10.2016 20:07:58, Muhammad Surya: Yang text juga jangan lupa di use
21.10.2016 20:08:01, Muhammad Surya: use Symfony\Component\Form\Extension\Core\Type\TextType;
21.10.2016 20:11:32, Muhammad Surya: Gimana guys hasilnya?
21.10.2016 20:11:35, Muhammad Surya: ada yang error
21.10.2016 20:12:09, Nur Rahmat Taufik(you): Sama aja pak
21.10.2016 20:12:57, Muhammad Surya: Ok dibagian form ada yang ditanyain ga?
21.10.2016 20:13:03, Muhammad Surya: sebelum masuk ke Controller
21.10.2016 20:13:32, Iqbal: Tanya om , apa pembuatan form ini tidak bisa pake html ?
21.10.2016 20:14:10, Muhammad Surya: bisa aja, asalah name-nya sama
21.10.2016 20:14:30, Yuan: kalau crud mau diupdate tambah field gimana caranya?
21.10.2016 20:15:49, Muhammad Surya: maksudnya gimana om?
21.10.2016 20:16:13, Yuan: di entity tambah private $address;
21.10.2016 20:16:24, Muhammad Surya: tinggal ditambahkan di form
21.10.2016 20:16:41, Muhammad Surya: jadi setelah update schema, tinggal dibagian form ditambahkan
21.10.2016 20:16:42, Yuan: maksudnya, gak bisa pake console command line lagi?
21.10.2016 20:16:46, Muhammad Surya: bisa om
21.10.2016 20:16:59, Muhammad Surya: tapi yang sudah rapi (misalkan kita udah sesuaikan) nanti jadi default lagi
21.10.2016 20:17:06, Nur Rahmat Taufik(you): GroupType kenapa harus ada pak?
21.10.2016 20:17:24, Muhammad Surya: Ga dianjurkan untuk melakukan generate crud 2X
21.10.2016 20:17:27, Muhammad Surya: cukup sekali aja
21.10.2016 20:17:38, Yuan: noted!
21.10.2016 20:17:54, Muhammad Surya: GroupType adalah form yang digunakan untuk memanipulasi Group entity
21.10.2016 20:18:04, Muhammad Surya: $resolver->setDefaults(array(
'data_class' => Group::class,
));
21.10.2016 20:18:11, Muhammad Surya: perhatikan data_class
21.10.2016 20:18:24, Muhammad Surya: itu menentukan dengan class mana form itu dilink-kan
21.10.2016 20:18:45, Muhammad Surya: Jadi di Symfony, kalau kita lihat dibagian veiw-nya
21.10.2016 20:19:10, Muhammad Surya: {% extends 'base.html.twig' %}
{% block body %}
<h1>Group creation</h1>
{{ form_start(form) }}
{{ form_widget(form) }}
<input type="submit" value="Create" />
{{ form_end(form) }}
<ul>
<li>
<a href="{{ path('group_index') }}">Back to the list</a>
</li>
</ul>
{% endblock %}
21.10.2016 20:19:30, Muhammad Surya: itu html-nya di app/views
21.10.2016 20:20:08, Muhammad Surya: Bagaimana untuk form apakah bisa dipahami?
21.10.2016 20:20:14, rudjok: hack form diatas itu biar apa ya, om?
21.10.2016 20:20:15, Muhammad Surya: kita santai aja belajarnya 😊
21.10.2016 20:20:41, Muhammad Surya: Biar transparent aja.... sebenarnya field-field di form itu tipe-nya apa
21.10.2016 20:21:17, rudjok: baru kekejar ini. tinggal jalan udah 60++ new message
21.10.2016 20:21:23, Iqbal: Msh blm paham yang grouptype om..
21.10.2016 20:21:31, Muhammad Surya: karena by default, form akan membuat membuat berdasarkan tipe yang ada di doctrine
21.10.2016 20:21:41, Muhammad Surya: Monggo bal tanya aja dimana yang ga pahamnya
21.10.2016 20:22:01, Nur Rahmat Taufik(you): kalau dilihat dari GroupControllernya, formnya ngambil dari GroupType ternyata
$form = $this->createForm('AppBundle\Form\GroupType', $group);
21.10.2016 20:22:55, Muhammad Surya: Yup
21.10.2016 20:22:58, Nur Rahmat Taufik(you): (form) nya ngambil dari sini ternyata, $form = $this->createForm('AppBundle\Form\GroupType', $group);
21.10.2016 20:23:27, Muhammad Surya: di Symfony, HTML form diabstraksi jadi PHP Class
21.10.2016 20:23:38, Muhammad Surya: Jadi bersih 😊
21.10.2016 20:24:39, Yuan: $resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Group'
)); << apa ini isinya selalu data_class aja atau ada yang lain?
21.10.2016 20:24:43, Muhammad Surya: Gimana apakah masih ada yang bingung tentang form?
21.10.2016 20:24:52, Muhammad Surya: Bisa banyak om
21.10.2016 20:25:12, Iqbal: Blm paham fungsi nya om..
21.10.2016 20:25:25, Muhammad Surya: $resolver->setDefaults(array(
'data_class' => Level::class,
'translation_domain' => 'AppBundle',
));
21.10.2016 20:25:31, Muhammad Surya: itu contohnya om @yuan_oktafian
21.10.2016 20:25:43, Nur Rahmat Taufik(you): untuk penambahan field kolom table baru, tetep jalankan
doctrine:schema:validate
doctrine:schema:update --force
baru, edit Form secara manual ya pak?
21.10.2016 20:26:05, Muhammad Surya: Ini fungsinya untuk membuat form HTML bal... Jadi disymfony ga perlu bikin form pakai
<form
dst
21.10.2016 20:26:15, Muhammad Surya: Yup
21.10.2016 20:27:05, Muhammad Surya: Gimana masih agak bingung?
21.10.2016 20:27:17, rudjok: jadi function buildform itu utk nentuin jenis inputnya? name & code jenisnya text?
21.10.2016 20:27:36, Iqbal: Oh i see , oke lanjut om..
21.10.2016 20:28:18, Muhammad Surya: Yup
21.10.2016 20:28:27, Muhammad Surya: Ok
21.10.2016 20:28:37, Muhammad Surya: Ok mari kita lanjut dulu ke controller
21.10.2016 20:29:02, Muhammad Surya: kita langsung aja ke newAction
21.10.2016 20:29:06, Muhammad Surya: $group = new Group();
$form = $this->createForm('AppBundle\Form\GroupType', $group);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($group);
$em->flush();
return $this->redirectToRoute('group_show', array('id' => $group->getId()));
}
return $this->render('group/new.html.twig', array(
'group' => $group,
'form' => $form->createView(),
));
21.10.2016 20:29:12, Muhammad Surya: seperti itu ya kira2?
21.10.2016 20:29:19, Muhammad Surya: ini biar nyambung sama form tadi
21.10.2016 20:30:00, rudjok: yup,mirip
21.10.2016 20:30:34, Muhammad Surya: $group = new Group();
$form = $this->createForm('AppBundle\Form\GroupType', $group);
$form->handleRequest($request);
21.10.2016 20:30:38, Muhammad Surya: perhatikan dulu bari itu
21.10.2016 20:31:19, Muhammad Surya: pada, fungsi
21.10.2016 20:31:55, Muhammad Surya: createForm()
kita melakukan binding data antara $group (object dari data_class di form)
21.10.2016 20:32:01, Muhammad Surya: dan form...
21.10.2016 20:32:16, Muhammad Surya: mari kita sedikit berexplorasi lagi
21.10.2016 20:32:45, Muhammad Surya: $group = new Group();
$group->setName('Symfony Indonesia');
21.10.2016 20:33:01, Muhammad Surya: kita setName dengan symfony Indonesia
21.10.2016 20:33:09, Muhammad Surya: lalu kita buka browser dan add new
21.10.2016 20:33:12, Muhammad Surya: coba apa yang terjadi
21.10.2016 20:33:16, Muhammad Surya: monggo SSnya 😊
21.10.2016 20:33:25, Muhammad Surya: biar interaktif πŸ˜‹
21.10.2016 20:34:11, rudjok:
21.10.2016 20:35:24, Muhammad Surya: otomatis value name-nya jadi Symfony Indonesia ya?
21.10.2016 20:35:39, Muhammad Surya: Kok kepotong itu? πŸ˜ƒ
21.10.2016 20:36:02, rudjok: sengaja pake indo, om
21.10.2016 20:36:09, Iqbal:
21.10.2016 20:36:25, Muhammad Surya: ooo πŸ˜ƒ seeeeppp kirain tiba2 kepotong πŸ˜ƒ
21.10.2016 20:36:38, Muhammad Surya: Ok bal nanti tinggal diriview aja
21.10.2016 20:36:41, Ahmad:
21.10.2016 20:36:48, Muhammad Surya: Mantab
21.10.2016 20:37:06, Muhammad Surya: Nah sekarang sudah sedikit paham kan?
21.10.2016 20:37:24, Muhammad Surya: form di symfony dan data class di binding otomatis
21.10.2016 20:37:54, Muhammad Surya: ketika object Group memiliki value maka value itu akan ditransfer ke form
21.10.2016 20:37:58, Muhammad Surya: begitu juga sebaliknya
21.10.2016 20:38:09, Muhammad Surya: bagaimana apakah bisa dipahami?
21.10.2016 20:38:13, Yuan:
21.10.2016 20:38:39, Muhammad Surya: Save dulu sticker-nya wkwkwk
21.10.2016 20:38:44, Muhammad Surya: kolektor soalnya
21.10.2016 20:39:29, Muhammad Surya: Gimana bisa dilanjutkan?
21.10.2016 20:39:38, Yuan: lanjuuut
21.10.2016 20:39:51, Nur Rahmat Taufik(you): Lanjuuut
21.10.2016 20:39:59, rudjok: lanjut
21.10.2016 20:40:32, Ahmad: Lanjut
21.10.2016 20:40:41, Muhammad Surya: if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($group);
$em->flush();
return $this->redirectToRoute('group_show', array('id' => $group->getId()));
}
21.10.2016 20:40:48, Iqbal: Lanjut om..
21.10.2016 20:40:54, Muhammad Surya: Nah mari kita coba bedah bagian ini
21.10.2016 20:41:36, Muhammad Surya: if ($form->isSubmitted() && $form->isValid())
<= ini memastikan kalau form sudah disubmit dan valid maka makan masuk block
21.10.2016 20:41:52, Muhammad Surya: $em = $this->getDoctrine()->getManager();
$em->persist($group);
$em->flush();
21.10.2016 20:42:05, Muhammad Surya: block untuk menyimpan ke databse 😊
21.10.2016 20:42:23, Muhammad Surya: ada yang aneh ga dari code diatas?
21.10.2016 20:43:00, Ahmad: Yang dimaksud valid apakah termasuk pengecekan panjang karakter juga dan type.datanya
21.10.2016 20:43:14, Muhammad Surya: Yup
21.10.2016 20:43:44, Muhammad Surya: nah pertemuan besok (sepertinya ga bisa dibahas malam ini) kita akan membahas tentang the power and magic of symfony validation
21.10.2016 20:44:12, Muhammad Surya: Oiya, validation di Symfony sudah build in dengan form ya 😊 jadi secara otomatis sync antara form dan entity 😊
21.10.2016 20:44:21, Muhammad Surya: pertemuan depan deh akan dibahas
21.10.2016 20:44:26, Muhammad Surya: atau sekarang aja kali ya πŸ˜ƒ
21.10.2016 20:44:42, Yuan: lanjut.. belum ada yang usir kan?
21.10.2016 20:44:57, Muhammad Surya: $em->persist($group);
21.10.2016 20:45:03, Muhammad Surya: ga ada yang bertanya bagian ini?
21.10.2016 20:45:29, Yuan: ini lagi bandingin dengan code yang udah jadi... agak aneh disitu emang
21.10.2016 20:45:29, Muhammad Surya: kenapa kok bisa langsung gitu aja ga perlu set ini dan itu tapi value yang diinput bisa masuk kedatabase
21.10.2016 20:45:48, Muhammad Surya: πŸ˜ƒ form yang kalian input, dimana ngesetnya ke group?
21.10.2016 20:45:54, Muhammad Surya: ga ada yang bingung disitu ya?
21.10.2016 20:45:56, Muhammad Surya: 😞
21.10.2016 20:46:12, Yuan: itu diurus ama GroupType.php kah?
21.10.2016 20:46:14, Ahmad: Binding ya om
21.10.2016 20:46:45, Muhammad Surya: Iya om tapi ngesetnya dimana?
21.10.2016 20:47:01, Muhammad Surya: Yup bindingnya dimana?
21.10.2016 20:47:02, Muhammad Surya: πŸ˜ƒ
21.10.2016 20:47:15, Muhammad Surya: kenapa tiba2 kok bisa pakai $group?
21.10.2016 20:47:23, Nur Rahmat Taufik(you): di sini $form = $this->createForm('AppBundle\Form\GroupType', $group);
21.10.2016 20:47:25, Nur Rahmat Taufik(you): ?
21.10.2016 20:47:26, Muhammad Surya: tidak ada yang bingung atau malah terlalu bingung?
21.10.2016 20:47:52, Ahmad: Handlerequest
21.10.2016 20:47:54, Muhammad Surya: Ini kan binding awal (set data awal), binding input dari view html?
21.10.2016 20:47:59, Muhammad Surya: nah akhirnya
21.10.2016 20:48:03, Muhammad Surya: betul banget
21.10.2016 20:48:24, Nur Rahmat Taufik(you): Oh begitu
21.10.2016 20:48:34, Muhammad Surya: $form->handleRequest($request);
ini adalah magic-nya
21.10.2016 20:49:15, Muhammad Surya: dimana ketika form sudah dikaitkan dengan object maka ketika handle request maka object tersebut akan diset value2nya sesuai dengan input pada form
21.10.2016 20:49:41, Muhammad Surya: ok mari kita hack lagi biar lebih transparent
21.10.2016 20:49:58, Muhammad Surya: $em->persist($form->getData());
21.10.2016 20:50:02, Muhammad Surya: ganti jadi begitu
21.10.2016 20:50:06, Muhammad Surya: dan jalankan aplikasinya
21.10.2016 20:50:14, Muhammad Surya: apakah tetap bisa jalan seperti semula?
21.10.2016 20:50:22, Muhammad Surya: ataukah ada perubahan?
21.10.2016 20:51:17, Muhammad Surya: Gimana?
21.10.2016 20:51:24, Ahmad: Tetep bisa
21.10.2016 20:51:28, Muhammad Surya: sudah mendekati waktu diusir nih πŸ˜ƒ
21.10.2016 20:51:31, Ahmad: Sama aja
21.10.2016 20:51:32, Muhammad Surya: tidak ada perbedaan kan?
21.10.2016 20:52:01, Muhammad Surya: Ok, sebagai pembuka sesi minggu depan sekaligus penutup sesi malam ini
21.10.2016 20:52:08, Muhammad Surya: mari kita sedikit hack di entity kita 😊
21.10.2016 20:53:08, Muhammad Surya: use Symfony\Component\Validator\Constraints as Assert;
21.10.2016 20:53:13, Muhammad Surya: tambahkan itu di Group
21.10.2016 20:53:30, Muhammad Surya: @Assert\Length(min=2, minMessage="Kurang panjang coy", max=3, maxMessage="Kepanjangan anunya")
21.10.2016 20:53:35, Muhammad Surya: tambahkan itu di name
21.10.2016 20:53:43, Muhammad Surya: atau code (kalau belum dihapus)
21.10.2016 20:53:48, Muhammad Surya: dimana aja lah
21.10.2016 20:53:55, Muhammad Surya: trus jalankan lagi insertnya
21.10.2016 20:54:02, Muhammad Surya: trus isikan cuma 1 character aja
21.10.2016 20:54:12, Muhammad Surya: lalu coba lagi isikan panjang
21.10.2016 20:54:17, Muhammad Surya: SS ya hasilnya
21.10.2016 20:54:18, Muhammad Surya: 😊
21.10.2016 20:54:29, Muhammad Surya: 5 minutes 😊
21.10.2016 20:55:28, Muhammad Surya: gimana guys?
21.10.2016 20:55:47, Nur Rahmat Taufik(you): ditambahkan dimana?
21.10.2016 20:55:56, Muhammad Surya: di Entity Group
21.10.2016 20:56:06, rudjok:
21.10.2016 20:56:23, Muhammad Surya: dibanyakin gimana jok?
21.10.2016 20:56:32, Ahmad:
21.10.2016 20:56:58, Muhammad Surya: kalau kebanyakan gimana?
21.10.2016 20:57:00, rudjok:
21.10.2016 20:57:01, Muhammad Surya: bisa juga kan pesannya
21.10.2016 20:57:10, Muhammad Surya: Hehehe bagaimana?
21.10.2016 20:57:20, Muhammad Surya: itulah the power of symfony form
21.10.2016 20:57:26, Ahmad:
21.10.2016 20:57:43, Muhammad Surya: like your message
21.10.2016 20:58:07, rudjok: so, rule2 nya masangnya di annotation di entity?
21.10.2016 20:58:14, Muhammad Surya: yup
21.10.2016 20:58:24, Muhammad Surya: lanjut pertemuan depan ya guys
21.10.2016 20:58:29, Muhammad Surya: moga makin penasaran 😊
21.10.2016 20:58:37, Muhammad Surya: semoga yang sedikit bisa menjadi jariyah bagi kita 😊
21.10.2016 20:58:43, Muhammad Surya: smoga ilmunya manfaat
21.10.2016 20:58:45, Muhammad Surya: terima kasih
21.10.2016 20:58:50, Yuan: aamiin
21.10.2016 20:58:57, Muhammad Surya: Wassalam 😊 @diusirModeOn
21.10.2016 20:58:58, rudjok: sip3x.
21.10.2016 20:59:04, Ahmad: Aamiiin
21.10.2016 20:59:05, rudjok: thx again, om sur.
21.10.2016 20:59:10, rudjok: waalaikumsalam
21.10.2016 20:59:36, Nur Rahmat Taufik(you): Wa'alaimussalam, wr, wb
21.10.2016 21:31:02, Muhammad Surya: Semoga bisa paham sedikit tentang Symfony Form
21.10.2016 21:31:03, Muhammad Surya: Karena ini salah satu fitur powerful di Symfony
22.10.2016 17:15:44, Muhamad:
22.10.2016 17:15:57, Muhamad: alhamdulillah bisa ke kejar lagi om sur
22.10.2016 17:16:04, Muhamad: maaf ya 2 minggu lalu ga ikut online
22.10.2016 17:16:51, Muhamad: terima kasih banyak om sur, moga makin bertambah ilmunya....
22.10.2016 17:19:20, Muhamad: om sur, maaf gini hari mau nanya..
22.10.2016 17:20:18, Muhamad: ini alfan coba di lokal setiap kali lagi mau buka aplikasi symfony terasa lambat, itu biasanya knapa ya om ?
22.10.2016 17:20:41, Muhamad: alfan coba ga pake server dari symfonynya tapi pake apache
22.10.2016 17:20:49, Muhamad: *di jawab jum'at depan gpp ko
22.10.2016 17:20:53, Muhamad: terima kasih banyak..
22.10.2016 19:02:03, Yuan: spesifikasi komputernya apa, alfan?
22.10.2016 19:02:39, Muhamad: amd A6 ram 8gb dan hdd 500gb
22.10.2016 19:02:59, Yuan: windows?
22.10.2016 19:03:11, Muhamad: iya windows 10
22.10.2016 19:09:04, Yuan: belum pernah coba pakai windows, tapi spesifikasi komputernya sih udah OK banget buat symfony.
22.10.2016 19:18:39, Muhamad: iya om, soalnya kalo buat app yg lain lancar jaya
23.10.2016 05:49:01, Ahmad: Selalu lambat atau ketika buka halaman pertama kalia aja
23.10.2016 07:29:34, Muhamad: slalu lambat om
23.10.2016 08:45:18, Yuan: editornya pakai apa, alfan?
23.10.2016 08:45:26, Yuan: netbean?
23.10.2016 08:46:15, Muhammad Surya: Symfony ketika development memang berasa lambat, bisa dicek di web profiler toolbar
23.10.2016 08:46:43, Muhammad Surya: Memory footprint nya juga besar di php dibawah versi 7
23.10.2016 08:47:25, Muhammad Surya: Tapi akan berbeda ketika menggunakan di production
23.10.2016 08:48:08, Muhammad Surya: Sepertinya saya pernah membahas tentang execution step di Symfony dev n prod deh diawal
23.10.2016 08:48:44, Muhammad Surya: Memang berbeda cara eksekusi Symfony antara dev n prod, itu yang bikin terasa lemot di dev
23.10.2016 09:14:08, Muhamad: text editornya alfan pake sublime
23.10.2016 09:14:10, Muhamad: berarti alternatifnya gmna om ?
23.10.2016 09:26:15, Muhammad Surya: Kalau bisa jangan pakai sublime
23.10.2016 09:27:14, Muhammad Surya: Ga perlu pakai web server pake built in aja
23.10.2016 23:52:43, Abdul Jabar:
23.10.2016 23:52:56, Abdul Jabar: many thx om, alhamdulillah masih bisa ngikutin
23.10.2016 23:55:12, Abdul Jabar: btw terkait dengan generate, default dia akan di app/resource ya.
kalo mau langsung biar bisa di src/AppBundle/Resources itu banyak yang di config ga ya kira kira
24.10.2016 08:36:18, Muhammad Surya: Override generator
24.10.2016 09:26:49, Abdul Jabar: langsung ubah di vendor doctrinya aja om?
24.10.2016 09:52:26, Muhammad Surya: Bikin sendiri extend
24.10.2016 13:45:31, Yuan: tapi itu kayanya karena windows aja jadi lambat. kalau ganti linux, seharusnya lebih cepat. saya udah jarang pake built in php web server. jalan langsung aja di apache. agak repot pake built in web server kalau sedang berurusan dengan output ke JSON dan harus pakai data JSON itu. perlu jalanin dua port php web server. cara lain, bisa coba nginx. mungkin membantu.
24.10.2016 16:41:06, Muhamad:
24.10.2016 16:41:35, Muhamad: @AdenKejawen app ane lemot kayanya gegara itu bukan om sur ?
24.10.2016 16:42:04, Muhammad Surya: Ga gan... tapi untuk memastikan, ente bisa ngecek di profilernya
24.10.2016 16:42:04, Muhamad: soalnya kalo blok css dan javascript itu di hilangkan normal kaya biasa waktu install
24.10.2016 16:42:33, Muhamad: ini maksudnya ngejek di bagian mana om sur ?
24.10.2016 16:42:46, Muhammad Surya: Toolbar dibagian bawah
24.10.2016 16:42:57, Muhammad Surya: itu toolbar sangat informative
24.10.2016 16:46:42, Muhammad Surya: {%- extends 'SymfonyIdAdminBundle::layout.html.twig' -%}
{%- block breadcrumb -%}
<li><a href="#" class="active">{{- page_title | upper -}}</a></li>
<li><a href="#" class="active">{{- (action_method ~ ' ' ~ page_title) | upper -}}</a></li>
{%- endblock -%}
{%- block page_title -%}
{{- page_title -}}
{%- endblock -%}
{%- block page_description -%}
{{- page_description -}}
{%- endblock -%}
{%- block file_style -%}
{{- use_file_style -}}
{%- endblock -%}
{%- block editor -%}
{{- use_editor -}}
{%- endblock -%}
{%- block numeric -%}
{{- use_numeric -}}
{%- endblock -%}
{%- block autocomplete -%}
{{- ac_config['route'] -}}
{%- endblock -%}
{%- block menu -%}
{{- knp_menu_render(menu, { currentClass: 'active', 'allow_safe_labels': true }) -}}
{%- endblock -%}
{%- block content -%}
{% spaceless %}
{%- if success is defined and success -%}
<div class="modal modal-success success-message">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">{{- 'message.info' | trans({}, translation_domain) -}}</h4>
</div>
<div class="modal-body">
{{- success -}}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary add_new pull-left" data-dismiss="modal">{{- 'action.add' | trans({}, translation_domain) -}}</button>
<button type="button" class="btn btn-primary success-close pull-left" data-dismiss="modal">{{- 'action.close' | trans({}, translation_domain) -}}</button>
</div>
</div>
</div>
</div>
{%- endif -%}
{%- if errors is defined and errors -%}
<div class="modal modal-warning error-message">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">{{- 'message.info' | trans({}, translation_domain) -}}</h4>
</div>
<div class="modal-body">
{{- 'message.error' | trans({}, translation_domain) -}}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger pull-left" data-dismiss="modal">{{- 'action.close' | trans({}, translation_domain) -}}</button>
</div>
</div>
</div>
</div>
{%- endif -%}
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="box box-success box-solid">
<div class="box-header">
<a href="#" class="btn btn-primary pull-right back-to-list">{{- 'action.back_to_list' | trans({}, translation_domain) -}}</a>
</div>
<div class="box-body">
{% if inline_form %}
{% set attr = { role: 'form', class: 'form-inline' } %}
{% else %}
{% set attr = { role: 'form' } %}
{% endif %}
{{- form_start(form, {attr: attr}) -}}
<div class="box-body with-border">
{%- for field in form.children -%}
{{- form_row(field) -}}
{%- endfor -%}
<button type="submit" class="btn btn-success pull-left">{{- 'action.submit' | trans({}, translation_domain) -}}</button>
</div>
{{- form_end(form) -}}
</div>
</div>
</div>
{% endspaceless %}
{%- endblock -%}
24.10.2016 16:46:42, Muhammad Surya:
{%- block javascript -%}
{%- if success is defined and success -%}
<script type="text/javascript">
jQuery(document).ready(function () {
jQuery('.success-message').modal({
backdrop: 'static'
});
});
</script>
{%- endif -%}
{%- if errors is defined and errors -%}
<script type="text/javascript">
jQuery(document).ready(function () {
jQuery('.error-message').modal({
backdrop: 'static'
});
});
</script>
{%- endif -%}
<script type="text/javascript">
function createActionUrl(action) {
var url = document.URL.split('/');
var queryString = document.URL.slice(document.URL.indexOf('?'));
if ('edit' === url[url.length - 2]) {
url.splice(-3,3);
} else {
url.splice(-2,2);
}
url.push(action);
window.location = url.join('/') + queryString;
}
jQuery(document).ready(function () {
jQuery('form').find('input[type=text],textarea,select').filter(':visible:first').focus();
jQuery(document).on('click', '.back-to-list', function () {
createActionUrl('list');
});
jQuery(document).on('click', '.add_new', function () {
createActionUrl('new');
});
jQuery(document).on('click', '.success-close', function () {
jQuery('.back-to-list').trigger('click');
});
var target = jQuery('.datepicker');
target.parent().css('position', 'relative');
target.datetimepicker({
format: '{{- date_picker['date_format'] -}}',
{% if date_picker['flatten'] %}sideBySide: true,{% endif %}
locale: '{{- locale -}}'
});
{%- if use_file_style is same as(true) -%}
jQuery('input:file').fileinput({
showUpload: false,
showCaption: false,
browseClass: 'btn btn-default',
fileType: ['jpg', 'png'],
allowedFileExtensions : ['jpg', 'png']
});
{%- endif -%}
{%- if use_editor is same as(true) -%}
jQuery('.editor').summernote();
{%- endif -%}
{% if use_numeric is same as(true) %}
jQuery('.numeric').numeric();
jQuery('.positive').numeric({ negative: false });
{% endif %}
{%- if ac_config['route'] is same as('') -%}
jQuery('.autocomplete').select2({
minimumInputLength: 3,
ajax: {
url: Routing.generate('{{- ac_config['route'] -}}'),
dataType: 'json',
quietMillis: 250,
data: function (term, page) {
return {
q: term
};
},
results: function (data, page) {
return { results: data };
},
cache: true
},
initSelection : function (element, callback) {
jQuery.ajax(Routing.generate('{{- ac_config['route_callback'] -}}', {id: jQuery(element).val()}), {
dataType: 'json'
}).done(function(data) {
callback(data);
});
}
});
jQuery(document).on('select2:select', '.autocomplete', function (e) {
jQuery('{{- ac_config['selector_storage']-}}').val(e.params.data.id);
});
{%- endif -%}
});
</script>
{% for file in js_include['files'] %}
{%- include file with { route: js_include['routes'] } -%}
{% endfor %}
{%- endblock -%}
24.10.2016 16:47:06, Muhammad Surya: i have more complex then your, but i have not problem with performance in production
24.10.2016 16:50:15, Muhamad: *ngecek
24.10.2016 16:50:45, Muhammad Surya: Bagian twig
24.10.2016 16:50:46, Muhamad: waah.. keren-keren
24.10.2016 16:50:46, Muhamad: oke deh om sur
24.10.2016 16:50:57, Muhamad: ane coba cek ulang, sekalian review code2nya
24.10.2016 16:51:41, Muhamad: terima kasih om..
24.10.2016 16:51:47, Muhammad Surya: sama2
28.10.2016 19:11:37, Muhammad: Brow mulai hari ini ?
28.10.2016 19:11:52, Muhammad Surya: wkwkwk aduh lupa om
28.10.2016 19:11:58, Muhammad Surya: lagi lembur pula 😞
28.10.2016 19:12:04, Muhammad Surya: libur dulu boleh ga ya
28.10.2016 19:12:11, Abdul Jabar: assyyiikkk akhirnya bisa ikutan
28.10.2016 19:12:16, Muhammad Surya: Kalau mau ntar agak malaman
28.10.2016 19:12:18, Muhammad Surya: πŸ˜ƒ
28.10.2016 19:12:22, Iqbal: Gpp om mangga , kalo lagi sibuk libur aja dl..
28.10.2016 19:12:31, Abdul Jabar: baru sampe rumah dengan keadaan setengah ganteng
28.10.2016 19:12:33, Muhammad Surya: Kemarin sampai apa sih?
28.10.2016 19:12:45, Iqbal: Controller om bikin crud
28.10.2016 19:13:24, Abdul Jabar: oke om maleman
28.10.2016 19:13:27, Muhammad Surya: ooo mbahas form ya kalau ga salah
28.10.2016 19:13:38, Iqbal: Iy om..
28.10.2016 19:13:53, Muhammad Surya: Ok, maaf ya...
28.10.2016 19:14:15, Iqbal: Gpp om santai.. 😊
28.10.2016 19:14:33, Muhammad Surya: Thanks ya guys
28.10.2016 19:15:53, rudjok: pas, bgt. d sni juga udah 2 hari lagi rempong, om.
28.10.2016 19:16:03, Muhammad Surya: hehehe
28.10.2016 19:16:49, rudjok: nanti jadi pukul brapa, om?
28.10.2016 19:18:50, Ahmad: Masih di jalan
28.10.2016 19:22:07, Muhammad Surya: Jam 9an ya 😊 sebentar lagi balik kok
28.10.2016 19:37:14, Muhammad Surya: Guys, gue balik dulu... Kalau memang sepakat mau jam 9an, insyAllah gue siap
28.10.2016 19:37:33, Muhammad Surya: Semoga jam segitu gue udah sampai rumah dan udah makan πŸ˜ƒ
28.10.2016 19:38:09, Muhammad: Ditunggu brow
28.10.2016 19:43:50, rudjok: gak mesti jam 9, sesampainya di rumah + rehat jg gpp om.
28.10.2016 20:19:01, Nur Rahmat Taufik(you): Saya juga lupa kalau malam ini ada sesi free course. Untung belum mulai πŸ˜‚
28.10.2016 21:02:45, Muhammad Surya: Guys nanti ya jam 21.30an
28.10.2016 21:02:56, Muhammad Surya: Hehehe istirahat n makan dulu
28.10.2016 21:04:54, Iqbal: Ok om..
28.10.2016 21:32:11, Muhammad Surya: Assalamu'alaikum guys
28.10.2016 21:32:13, Muhammad Surya: gimana?
28.10.2016 21:32:17, Muhammad Surya: absen donk
28.10.2016 21:32:23, rudjok: waalaikumsalam
28.10.2016 21:32:29, rudjok: hadir
28.10.2016 21:32:49, Muhammad Surya: Wah nunggu yang lain dulu ya πŸ˜ƒ
28.10.2016 21:32:57, Muhammad Surya: belum naik kayaknya
28.10.2016 21:33:04, rudjok: πŸ‘Œ
28.10.2016 21:35:13, Iqbal: walaikumsalam..
28.10.2016 21:35:20, Muhammad: yups
28.10.2016 21:35:20, Iqbal: hadir...
28.10.2016 21:35:54, Muhamad: hadiirrr... walupun baru kelar uts, ttp ga mau ketinggalan πŸ˜…πŸ˜…
28.10.2016 21:37:52, Muhammad Surya: Alhamdulillah
28.10.2016 21:37:57, Muhammad Surya: ayo kita mulai 😊
28.10.2016 21:39:14, Muhammad Surya: Kemarin kita baru membahas function/method newAction ya
28.10.2016 21:39:18, Muhamad: om alfan ijin 10mnitan dlu ya buat beres2 dan persiapan
28.10.2016 21:39:31, Muhammad Surya: kira-kira untuk yang kemarin ada pertanyaan ga ya?
28.10.2016 21:39:39, Muhammad Surya: Noted
28.10.2016 21:40:19, Muhammad Surya: Apakah sudah paham semua tentang function/method newAction?
28.10.2016 21:41:10, Muhammad Surya: Kalau tidak ada pertanyaan, mari kita turun ke method showAction
28.10.2016 21:41:34, Muhammad: ada alternatif lain jika kita g mo pake symfony form ?
28.10.2016 21:42:06, Muhammad Surya: Bisa om, nantinya handling menggunakan $request->get('name');
28.10.2016 21:42:21, Muhammad Surya: satu2 name fieldnya diambil dari situ
28.10.2016 21:42:37, Abdul Jabar:
28.10.2016 21:43:01, Muhammad Surya: wkwkwk semoga tambah ganteng gan
28.10.2016 21:43:12, Muhammad: beberapa waktu lalu gw liat salah satu doctrine maintainer di youtube, dan dia memang g nyaranin untuk pake form
28.10.2016 21:43:22, Muhammad: TIGHT COUPLING they say
28.10.2016 21:44:07, Muhammad Surya: Ga masalah, tapi saya dulu pertama kali belajar symfony memang tanpa form πŸ˜ƒ justru bersyukur banget sekarang bisa paham form
28.10.2016 21:44:18, Muhammad Surya: πŸ˜ƒ dulu untuk CRUD harus redudant
28.10.2016 21:44:21, Muhammad Surya: sekarang clear
28.10.2016 21:44:33, Muhammad: πŸ‘
28.10.2016 21:44:52, Muhammad Surya: Bagaimana bisa kita lanjut ke method showAction
28.10.2016 21:45:07, Muhammad Surya: /**
* Finds and displays a Group entity.
*
* @Route("/{id}", name="group_show")
* @Method("GET")
*/
public function showAction(Group $group)
{
$deleteForm = $this->createDeleteForm($group);
return $this->render('group/show.html.twig', array(
'group' => $group,
'delete_form' => $deleteForm->createView(),
));
}
28.10.2016 21:45:15, Muhammad Surya: Kaya gitu ya, kira-kira methodnya
28.10.2016 21:45:31, Muhammad Surya: Ada yang merasa janggal sebelum saya bahas?
28.10.2016 21:46:33, Muhammad Surya: Dari baris code diatas apakah ada yang merasa janggal terutama dari awal kita belajar config, routing hingga sekarang CRUD?
28.10.2016 21:47:11, Muhammad Surya: Ok kalau ga ada yang janggal dan bingung, mari kita bahas
28.10.2016 21:47:25, Iqbal: banyak magic nya om 😁
28.10.2016 21:47:43, Muhammad Surya: πŸ˜ƒ ga magic kalau kita tau alurnya πŸ˜ƒ
28.10.2016 21:47:51, Muhammad Surya: magic karena kita cuma tau kulitnya wkwkwk
28.10.2016 21:48:09, Iqbal: iya sih bener, itu kebanyakan function bawaan symfony yak ?
28.10.2016 21:48:17, Iqbal: termasuk yang createDeleteForm()
28.10.2016 21:48:31, Muhammad Surya: @Route("/{id}", name="group_show")
<= disitu route-nya pakai {id}
28.10.2016 21:48:57, Muhammad Surya: public function showAction(Group $group)
<= kenapa disini jadi $group?
28.10.2016 21:49:02, Muhammad Surya: ada yang bisa jelaskan? πŸ˜ƒ
28.10.2016 21:49:38, Muhammad Surya: harusnya kalau kalian ingat aturan routing,
{id}
harus ditangkap menjadi
$id
donk πŸ˜ƒ ya kan?
28.10.2016 21:49:46, Muhammad Surya: Kenapa sekarang jadi $group?
28.10.2016 21:49:52, Muhammad Surya: ada yang bisa bantu?
28.10.2016 21:50:19, Iqbal: iya yah harus nya kan $id
28.10.2016 21:51:56, Iqbal: apa karna di lempar dulu ke class Group kan ada getter setter nya tuh
28.10.2016 21:51:57, Muhammad Surya: Bingung?
28.10.2016 21:52:06, Muhammad Surya: Mari kita bahas?
28.10.2016 21:52:08, Muhammad Surya: πŸ˜ƒ
28.10.2016 21:52:24, Muhammad Surya: Pertama mari kita buat error dulu biar lebih clear gimana cara kerjanya πŸ˜ƒ
28.10.2016 21:52:51, Muhammad Surya: sensio_framework_extra:
request:
auto_convert: false
28.10.2016 21:53:10, Muhammad Surya: tambahkan itu di config.yml
28.10.2016 21:53:30, Muhammad Surya: lalu coba jalankan aplikasinya trus show 😊
28.10.2016 21:53:59, Muhammad Surya: monggo dicoba, apakah hasilnya error?
28.10.2016 21:54:06, Iqbal:
28.10.2016 21:54:08, Iqbal: error om
28.10.2016 21:54:24, Muhammad Surya: Lho ngapain di errorin bal wkwkwk
28.10.2016 21:54:27, Muhammad Surya: benerin lah :-P
28.10.2016 21:54:45, Muhammad Surya: sudah mulai terlihat ya πŸ˜ƒ yang tadinya ga error jadi error πŸ˜ƒ
28.10.2016 21:55:03, Iqbal: kan tdi dtamabahin itu om , karna auto_convert nya jadi false kan ?
28.10.2016 21:55:11, Iqbal: mulai cerah om πŸ˜‚
28.10.2016 21:55:19, Muhammad Surya: πŸ˜ƒ yup
28.10.2016 21:55:55, Muhammad Surya: public function showAction($id)
28.10.2016 21:55:59, Muhammad Surya: ganti jadi seperti itu
28.10.2016 21:56:26, Muhammad Surya: var_dump($id);
exit();
28.10.2016 21:56:46, Muhammad Surya: kemudian kita coba capture $id-nya dapat atau tidak?
28.10.2016 21:56:59, Muhammad Surya: monggo hasilnya
28.10.2016 21:57:03, Iqbal: dapet om
28.10.2016 21:57:08, Iqbal: string(1) "1"
28.10.2016 21:57:15, Muhammad Surya: ok sudah sedikit cerah?
28.10.2016 21:57:17, Muhammad Surya: πŸ˜ƒ
28.10.2016 21:58:00, Muhammad Surya: mari kita lebih dalam lagi 😊
28.10.2016 21:58:47, Iqbal: lanjut om...
28.10.2016 21:58:58, Muhammad Surya: $entityManager = $this->get('doctrine.orm.entity_manager');
$group = $entityManager->getRepository('AppBundle:Group')->find($id);
28.10.2016 21:59:11, Muhammad Surya: ganti yang tadi jadi begitu 😊
28.10.2016 21:59:37, Muhammad Surya: hingga hasilnya function-nya bener kembali 😊
28.10.2016 21:59:51, Iqbal: bisa om ..
28.10.2016 21:59:51, Muhammad Surya: $entityManager = $this->get('doctrine.orm.entity_manager');
$group = $entityManager->getRepository('AppBundle:Group')->find($id);
$deleteForm = $this->createDeleteForm($group);
return $this->render('group/show.html.twig', array(
'group' => $group,
'delete_form' => $deleteForm->createView(),
));
28.10.2016 21:59:58, Muhammad Surya: gitu lengkapnya 😊
28.10.2016 22:00:08, Muhammad Surya: Ok bisa ya
28.10.2016 22:00:25, Muhammad Surya: Perlu ane jelasin ga kenapa kok beda
28.10.2016 22:00:43, Iqbal: perlu om biar lebih terbuka πŸ˜‚
28.10.2016 22:00:44, Muhammad Surya: Dan kenapa yang pertama kok cukup pakai type hinting
28.10.2016 22:01:30, Muhammad Surya: Kalau ga tau apa itu type hinting, bisa baca di buku ini πŸ˜ƒ https://leanpub.com/belajar-santai-oop-php
28.10.2016 22:01:38, Muhammad Surya: Ok saya jelaskan ya 😊
28.10.2016 22:02:26, Muhammad Surya: By default, Symfony (melalui Bundle Sensio Framework Extra) melakukan auto convert berdasarkan type hinting
28.10.2016 22:02:28, Iqbal: btw dari kemarin udh niat mau beli buku ini,,
28.10.2016 22:02:44, Muhammad Surya: Beli lah wkwkwk
28.10.2016 22:02:55, Muhammad Surya: Ok back to topic
28.10.2016 22:03:43, Muhammad Surya: Auto Converter ini disebut Param Converter... Dia menggunakan fungsi yeild untuk mengenerate value parameter
28.10.2016 22:04:26, Muhammad Surya: Param Converter ini hanya berlaku untuk type hinting yang bertipe entity (Doctrine Entity)
28.10.2016 22:04:44, Muhammad Surya: cara kerjanya sama seperti yang sudah kita lakukan secara manual tadi 😊
28.10.2016 22:04:57, Muhammad Surya: $entityManager = $this->get('doctrine.orm.entity_manager');
$group = $entityManager->getRepository('AppBundle:Group')->find($id);
28.10.2016 22:05:06, Muhammad Surya: Kira-kira cara kerjanya seperti itu 😊
28.10.2016 22:05:30, Muhammad Surya: Bagaimana apakah bisa dipahami?
28.10.2016 22:06:28, Iqbal: iya paham om..
28.10.2016 22:06:33, Nur Rahmat Taufik(you): Type hinting Groupnya dapat id ngambil dari getId() di Entity/Group.php ya?
28.10.2016 22:07:18, Muhammad Surya: Bukan om, tapi Type Hinting untuk dapetin Entity Class yang nantinya dipakai untuk dapetin Repository-nya
28.10.2016 22:07:27, rudjok: si Group ini tau harus ambil id itu dari annotationnya kah, om?
28.10.2016 22:07:41, Muhammad Surya: Dari repository itu nanti tinggal pakai function find($id) dari parameter id yang dikirim dari client
28.10.2016 22:08:12, Muhammad Surya: Ingat, konsep Entity -> Repository yang sudah dibahas dipertemuan sebelumnya
28.10.2016 22:08:29, Muhammad: keypoint !
28.10.2016 22:08:29, Muhammad: sensio_framework_extra:
request:
auto_convert: false
28.10.2016 22:08:41, Muhammad Surya: Dari client Jok, jadi id ini dari paramter {id} yang ada di route annotation
28.10.2016 22:09:52, Muhammad Surya: @Route("/{id}", name="group_show")
`{id} ini kan ntar diganti jadi `id yang ada diparameter, misal /group/2
28.10.2016 22:10:37, Muhammad Surya: nantinya si converter akan $entityManager->getRepository(TypeHinting::class)->find(id);
28.10.2016 22:10:49, Muhammad Surya: kira2 seperti itu cara kerjanya
28.10.2016 22:10:51, Muhammad Surya: gimana
28.10.2016 22:11:02, rudjok: cerna dlu om bentar
28.10.2016 22:11:05, Nur Rahmat Taufik(you): I see
28.10.2016 22:11:38, Muhammad: itu ga salah bro [ auto_convert: false ]
28.10.2016 22:11:40, Muhammad Surya: Ok dicerna dulu ga usah buru2 karena ane udah dirumah jadi aman dari diusir πŸ˜‹
28.10.2016 22:11:58, Muhammad Surya: maksudnya gimana om?
28.10.2016 22:12:03, Nur Rahmat Taufik(you): TypeHinting::class menunjuk ke Entity\Group.php kalau confignya pakai auto_convert: true
28.10.2016 22:12:05, Nur Rahmat Taufik(you): ?
28.10.2016 22:12:29, Muhammad Surya: Yup sesuai dengan type hinting di method
28.10.2016 22:13:02, Muhamad: ijin gabung lagi ya om sur
28.10.2016 22:13:05, Muhammad: bukannya harus di converter: true, atw auto_converter: true
28.10.2016 22:13:09, Muhammad Surya: siap monggo
28.10.2016 22:13:12, Muhammad: automatic khan ?
28.10.2016 22:13:22, Muhammad: nangkep id by annotation
28.10.2016 22:13:25, Muhammad Surya: Iya di false karena tadi kita bikin error 😊
28.10.2016 22:13:42, Muhammad Surya: Fungsi agar kita tau gimana cara kerjanya auto converter
28.10.2016 22:14:07, rudjok: then, kalo di annotation {id} di ganti {name} atau {code} bisa juga yak.
28.10.2016 22:14:17, Muhammad Surya: /**
* Finds and displays a Group entity.
*
* @Route("/{id}", name="group_show")
* @Method("GET")
*/
public function showAction($id)
{
$entityManager = $this->get('doctrine.orm.entity_manager');
$group = $entityManager->getRepository('AppBundle:Group')->find($id);
$deleteForm = $this->createDeleteForm($group);
return $this->render('group/show.html.twig', array(
'group' => $group,
'delete_form' => $deleteForm->createView(),
));
}
28.10.2016 22:14:33, Muhammad Surya: Jadinya seperti itu setelah dimatikan tadi om Muhammad
28.10.2016 22:14:44, Muhammad: ok's
28.10.2016 22:15:06, Muhammad: the magic way, turn on your auto_converter, ya ya ya :D
28.10.2016 22:15:20, Muhammad Surya: Yup betul
28.10.2016 22:15:34, Nur Rahmat Taufik(you): kalau auto_convertnya false, tapi pakai TypeHinting gimana?
28.10.2016 22:15:40, Muhammad Surya: Error
28.10.2016 22:15:43, Muhammad Surya: monggo dicoba
28.10.2016 22:15:58, Muhammad Surya:
28.10.2016 22:16:02, Muhammad Surya: seperti itu errornya
28.10.2016 22:16:26, Nur Rahmat Taufik(you): oh iya
28.10.2016 22:16:29, Muhammad: banyak triknya ternyata πŸ˜‚
28.10.2016 22:16:59, Muhammad Surya: So disini saya mencoba lebih dalam tentang how symfony works
28.10.2016 22:17:31, Muhammad Surya: Ga sekedar gimana caranya bikin CRUD otomatis
28.10.2016 22:17:46, Muhammad Surya: Dan ga sekedar magic
28.10.2016 22:18:26, Muhammad Surya: Tapi bener2 paham cara Symfony memperlakukan sesuatu
28.10.2016 22:19:37, Muhammad Surya: So dengan begitu, jika kalian butuh extra performance, kalian bisa mematikan beberapa fitur yang tidak perlu, seperti auto convert
28.10.2016 22:20:57, Muhammad: apa memang pendekatan auto_convert itu circular, jadi dia nyari di annotation
28.10.2016 22:21:16, Muhammad: ketimbang pendekatan langsung
28.10.2016 22:21:26, Muhammad Surya: Maksudnya circular gimana om?
28.10.2016 22:22:15, Muhammad Surya: Ok bagaimana apakah ada yang ditanyakan tentang auto convert?
28.10.2016 22:23:55, rudjok: penggunaan auto convert ini ya u/ performance vs kemudahan?
28.10.2016 22:24:04, Muhammad Surya: kemudahan
28.10.2016 22:24:11, Muhammad: http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html
28.10.2016 22:24:13, Muhammad Surya: kecepatan development
28.10.2016 22:24:22, Muhammad: The converter tries to get a SensioBlogBundle:Post object from the request attributes (request attributes comes from route placeholders -- here id);
If no Post object is found, a 404 Response is generated;
28.10.2016 22:24:28, rudjok: aliasnya lah
28.10.2016 22:24:37, Muhammad Surya: Yup om Heri
28.10.2016 22:24:40, Muhammad Surya: betul pakai itu
28.10.2016 22:25:18, Muhammad Surya: Iya untuk mempercepat
28.10.2016 22:25:51, Muhammad Surya: Bagaimana apakah bisa dilanjutkan ataukah masih ada yang ditanyakan tentang showAction?
28.10.2016 22:26:04, Muhamad: lanjut om...
28.10.2016 22:26:52, Muhamad: oh ya om sur.. mau tanya dlu
28.10.2016 22:27:02, Muhammad Surya: Monggo
28.10.2016 22:27:07, Muhamad: "doctrine.orm.entity_manager" <β€” ini sebenernya dapat dari mana ya om
28.10.2016 22:27:26, Muhammad Surya: itu namanya service
28.10.2016 22:27:30, Muhammad Surya: nanti akan dibahas tersendiri
28.10.2016 22:27:43, Muhamad: oh nama2 service2nya, oke deh..
28.10.2016 22:27:53, Muhamad: siap om, yukk lanjutt
28.10.2016 22:28:40, Muhammad Surya: $deleteForm = $this->createDeleteForm($group);
28.10.2016 22:29:00, Muhammad Surya: private function createDeleteForm(Group $group)
{
return $this->createFormBuilder()
->setAction($this->generateUrl('group_delete', array('id' => $group->getId())))
->setMethod('DELETE')
->getForm()
;
}
28.10.2016 22:29:07, Muhammad Surya: itu monggo
28.10.2016 22:29:14, Muhammad Surya: ada yang ditanyakan dari baris code tersebut?
28.10.2016 22:29:58, Muhammad Surya: Yang bawah fungsinya cuma membuat delete form
28.10.2016 22:30:35, Muhammad Surya: sebuah tombol dengan action delete
28.10.2016 22:31:03, Muhammad Surya: monggo ada yang ditanyakan ataukah sudah jelas
28.10.2016 22:31:43, Muhammad: clear
28.10.2016 22:32:02, Muhamad: tadi coba klik botton delete keluar error ini om
28.10.2016 22:32:06, Muhamad:
28.10.2016 22:32:35, Iqbal: ini karna auto_convert nya di false kan ?
28.10.2016 22:32:39, Muhammad Surya: Yup
28.10.2016 22:32:42, Muhammad Surya: betul bal
28.10.2016 22:32:59, Muhammad Surya: Kan tadi sudah dimatikan 😊 monggo diaktifkan lagi biar ga error πŸ˜ƒ
28.10.2016 22:33:07, Muhammad Surya: code yang show biarin aja 😊
28.10.2016 22:33:07, Muhamad: oh iya ya
28.10.2016 22:33:14, Muhamad: hehe
28.10.2016 22:33:17, Muhamad: okok
28.10.2016 22:34:12, Muhammad Surya: sampai delete masih ada yang ditanyakan?
28.10.2016 22:34:39, Muhammad Surya: $em = $this->getDoctrine()->getManager();
$em->remove($group);
$em->flush();
Yang ada didelete
28.10.2016 22:34:52, Muhammad Surya: Penjelasannya sama seperti yang ada di new dan edit 😊
28.10.2016 22:34:54, Muhammad Surya: sama aja kan?
28.10.2016 22:35:04, Nur Rahmat Taufik(you): flush buat apa pak?
28.10.2016 22:35:23, Muhammad Surya: untuk commit ke database 😊
28.10.2016 22:35:35, Iqbal: ok om..
28.10.2016 22:35:50, Muhammad Surya: jadi remove itu hanya persisting data aja tapi operasi databasenya belum dilakukan secara sempurna
28.10.2016 22:35:56, Muhammad Surya: perlu di flush
28.10.2016 22:36:18, Muhammad Surya: semua operasi write doctrine harus di flush
28.10.2016 22:37:06, Muhammad Surya: sampai disini kita sudah selesai membahas CRUD di Symfony 😊
28.10.2016 22:37:15, Muhamad: mau tanya dlu om
28.10.2016 22:37:21, Muhammad Surya: bagaimana dari awal sampai akhir membuat CRUD apakah ada pertanyaan?
28.10.2016 22:37:32, Muhammad Surya: saya kasih waktu 10 menit ya 😊
28.10.2016 22:37:34, Muhammad Surya: monggo2
28.10.2016 22:37:48, Muhamad: boleh tau alasan kenpa di button delete itu ada tag form juga ?
28.10.2016 22:38:14, Muhamad: terus pake tag input bukan a href aja
28.10.2016 22:38:18, Muhamad: ??
28.10.2016 22:38:34, Iqbal: kalo ga salah karna method nya kan delete
28.10.2016 22:38:47, Iqbal: kalo pakae href hanya bisa get doang
28.10.2016 22:39:04, Muhammad: oh iya, itu karena sifatnya automatic, auto_convert bisa dihandle dengan dengan @paramconverter khan ya bro @AdenKejawen
28.10.2016 22:39:07, Muhammad Surya: Yup karena browser secara default hanya mendukung 2 method yaitu GET dan POST
28.10.2016 22:39:21, Iqbal: disitu pasti ada hidden input
28.10.2016 22:39:45, Muhammad Surya: Betul, si button itu nyimpan id dari entity yang bersangkutan 😊
28.10.2016 22:40:39, Muhammad Surya: Dan alasannya kenapa harus form? Ini karena Generator, so create a simple flow then user can modify to fit with their requirements
28.10.2016 22:41:31, Muhammad Surya: intinya, karena ini menggunakan Generator, si pembuat generator ga mau pusing dengan hal-hal yang bersifat "Estetika dan UX" sehingga mereka membuat sesimple mungkin tapi works
28.10.2016 22:41:54, Muhammad Surya: Ini bisa dilihat dari mereka yang ga ngasih view yang "layak" untuk sebuah aplikasi πŸ˜ƒ
28.10.2016 22:42:11, Muhamad:
28.10.2016 22:42:23, Muhamad: maksudnya id itu ini kan ya om
28.10.2016 22:42:34, Muhammad Surya: Untuk kebutuhan yang khusus, menggunakan @ParamConverter lebih disarankan
28.10.2016 22:42:34, Muhamad: id nya di ubah jadi token
28.10.2016 22:43:08, Muhammad Surya: <form action itu sebenarnya yang penting
28.10.2016 22:43:15, Muhammad Surya: kalau _token itu adalah CRSF token
28.10.2016 22:43:53, Muhammad Surya: pada form action itu mengarah pada /group/{id} dengan method DELETE
28.10.2016 22:44:14, Muhammad Surya: /**
* Deletes a Group entity.
*
* @Route("/{id}", name="group_delete")
* @Method("DELETE")
*/
public function deleteAction(Request $request, Group $group)
{
$form = $this->createDeleteForm($group);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->remove($group);
$em->flush();
}
return $this->redirectToRoute('group_index');
}
28.10.2016 22:44:43, Muhammad Surya: bisa dilihat, disana untuk delete @Method menggunakan DELETE sehingga secara default tidak bisa dilakukan oleh form biasa 😊
28.10.2016 22:45:02, Muhammad Surya: sehingga perlu dibuat form khusus dengan _method=DELETE
28.10.2016 22:45:39, Muhammad Surya: _method ini nantinya akan diconvert oleh Symfony menjadi Method DELETE pada standard HTTP Verb
28.10.2016 22:45:43, Nur Rahmat Taufik(you): oh iya, kalau methodnya DELETE di arahin ke deleteAction
28.10.2016 22:45:58, Nur Rahmat Taufik(you): kalau GET ke showAction
28.10.2016 22:46:39, Muhammad Surya: Secara default browser cuma support 2 method yaitu GET dan POST, sedangkan kita perlu method DELETE untuk action delete... Kalau kita mau, kita bisa merubahnya di deleteAction jadi GET
28.10.2016 22:46:50, Muhammad Surya: atau yang lainnya (bedakan dengan showAction)
28.10.2016 22:47:16, Muhamad: hmmpp... yup paham om..
28.10.2016 22:47:53, Muhammad Surya: Ok gimana masih ada pertanyaan lagi sebelum kita masuk kebahasan selanjutnya?
28.10.2016 22:48:16, Muhammad Surya: saya harap kita tidak perlu malu untuk bertanya apapun, karena disini kita sama2 belajar 😊
28.10.2016 22:49:03, Nur Rahmat Taufik(you): Kalau mau pakai GET, di method createDeleteForm juga disetMethod GET juga ya
28.10.2016 22:49:04, Muhammad Surya: saya sendiri untuk form yang bawaan generator sudah hampir 100% tidak dipakai karena saya menggunakan https://github.com/SymfonyId/SymfonyIdAdminBundle
28.10.2016 22:49:36, Muhammad Surya: Dengan Bundle yang saya bangun itu, saya bisa membuat CRUD yang lebih sederhana dan bersih 😊
28.10.2016 22:50:07, Muhammad Surya: Iya gan... atau tinggal href aja 😊
28.10.2016 22:50:51, Muhammad Surya: Bagaimana apakah masih ada yang bingung?
28.10.2016 22:50:59, Muhammad Surya: tidak perlu malu πŸ˜ƒ kita sama2 belajar 😊
28.10.2016 22:51:44, Muhammad Surya: insya Allah kalau ada waktu, kita bahas Generator saya 😊 Iqbal n Tegar n @hak11 sudah merasakan nikmatnya coding menggunakan itu 😊
28.10.2016 22:52:00, Muhamad: *kayanya ane mesti sering2 ngulik symfony biar terbiasa nh
28.10.2016 22:52:13, Muhammad: CRUD ok klo cyclenya pendek, klo project panjang, apa g bahaya masbro @AdenKejawen
28.10.2016 22:52:37, Muhammad: TIGHT COUPLING ?
28.10.2016 22:52:57, Muhammad: DDD ? maybe ?
28.10.2016 22:53:21, Muhammad Surya: Wajib
28.10.2016 22:53:32, Muhammad Surya: Maksudnya bagaimana ini om?
28.10.2016 22:54:44, Muhamad: iya nh om, maaf nh, mau nyempetin2 banyak belajar symfony susah bgt, kebentur tugas2 kuliah 😒😒
28.10.2016 22:54:55, Muhamad: *curhat
28.10.2016 22:55:20, Muhammad Surya: Santai gan... Yang penting terus coba kalau ada waktu luang 😊
28.10.2016 22:55:29, Muhammad Surya: mulai bersahabat dengan dokumentasi 😊
28.10.2016 22:55:53, Muhamad: iya om, andalan bgt ini mah
28.10.2016 22:55:57, Muhammad: dulu temen dev di BUMN bikin applikasi accounting internal pake CI CRUD style, controller gemuk, taon demi taon ada requirement baru, setiap requirement itu kadang cross data dengan system yang laen, dia kadang gw merasa mumet 'dia bilang'
28.10.2016 22:56:35, Muhammad Surya: CRUD hanya untuk CRUD om... Jika sudah ada requirement lagi bisa dibuat controller baru 😊
28.10.2016 22:57:09, Muhammad Surya: Pada akhirnya pengalaman dan pengetahuan tengan Design Pattern yang akan mengajarkan bagaimana membangun sistem secara lebih baik 😊
28.10.2016 22:57:21, Muhammad: πŸ‘
28.10.2016 22:57:58, Muhammad: tapi tetua2 symfony g nyaranin pake CRUD lho masbrow, gmana donk ? πŸ˜…
28.10.2016 22:58:40, Muhammad Surya: Itu contoh project Structure dari Project yang saya bangun 😊
28.10.2016 22:58:49, Muhammad Surya:
28.10.2016 22:59:10, Muhammad: πŸ‘
28.10.2016 22:59:23, Muhammad: all symfonyid ?
28.10.2016 22:59:40, Muhammad Surya: Ya itu kembali ke pilihan masing-masing om 😊 saya pribadi tetap menggunakan CRUD Generator buatan saya sendiri untuk tugas2 redudant
28.10.2016 22:59:49, Muhammad Surya: Karena setiap aplikasi pasti butuh CRUD
28.10.2016 23:00:16, Muhammad Surya: <?php
/**
* Generated by SymfonyIdAdminBundle
* Url: https://github.com/symfonyid/SymfonyIdAdminBundle.
*/
namespace Ihsan\AppBundle\Admin;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use SymfonyId\AdminBundle\Annotation as Siab;
use SymfonyId\AdminBundle\Controller\CrudController;
/**
* @Route("/country")
*
* @Siab\Page("Country", description="Description of Country")
* @Siab\Crud("Ihsan\AppBundle\Document\Country", form="Ihsan\AppBundle\Form\Type\CountryType")
* @Siab\Grid(@Siab\Column({"code", "name"}), filter=@Siab\Filter({"code", "name"}))
* @Siab\Security(
* create="ROLE_STAFF",
* edit="ROLE_STAFF",
* delete="ROLE_STAFF",
* read="ROLE_STAFF",
* download="ROLE_STAFF"
* )
*/
class CountryController extends CrudController
{
public function getClassName()
{
return __CLASS__;
}
}
28.10.2016 23:00:31, Muhammad Surya: CRUD punya saya cuma seperti itu 😊
28.10.2016 23:00:55, Muhammad: πŸ‘
28.10.2016 23:01:02, Muhammad Surya: dengan hanya 1 baris code, harusnya jika ada requirement tambahan tidak akan terlalu kotor
28.10.2016 23:01:03, Muhamad: keren keren keren....
28.10.2016 23:01:36, Muhammad Surya: Bagaimana apakah masih ada pertanyaan?
28.10.2016 23:01:48, Muhamad: yukk om lanjuttt.. mash semangat nh
28.10.2016 23:02:12, Muhamad: hehehe
28.10.2016 23:02:13, Muhammad Surya: Ok masih semangat ya πŸ˜ƒ
28.10.2016 23:02:20, Muhammad: sempet bikin dummy apps kmaren si bro pake siab :D
28.10.2016 23:02:54, Muhammad Surya: Hehehe mantab om
28.10.2016 23:03:01, Muhammad Surya: Ok lanjut ya
28.10.2016 23:03:22, Muhammad Surya: Kemarin saya janji akan membahas tentang relasi di Doctrine
28.10.2016 23:03:41, Muhamad: wah.. kayanya ane paling jauh ketinggalan nh dari member2 disini 😒😒
28.10.2016 23:03:57, Iqbal: lanjut om ..
28.10.2016 23:03:57, Muhammad Surya: Kita sama2 belajar gan
28.10.2016 23:04:01, Muhammad Surya: belum ada yang ketinggalan 😊
28.10.2016 23:04:25, Muhamad: siaapp, ttp semangat... yuk lanjut om "relasi di Doctrine"
28.10.2016 23:04:26, Muhammad Surya: Kemarin kita sepakat akan membuat aplikasi Kontak dengan dua table yaitu Group dan Contact
28.10.2016 23:04:42, Muhammad Surya: mari kita mulai membuat entity Contactnya 😊
28.10.2016 23:04:46, Muhammad Surya: <?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
* @ORM\Table(name="contacts")
*/
class Contact
{
/**
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*
* @var int
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Group", cascade={"persist"})
* @ORM\JoinColumn(name="group_id", referencedColumnName="id")
*
* @var Group
*/
private $group;
/**
* @ORM\Column(name="name", type="string", length=77)
*
* @var string
*/
private $fullName;
/**
* @ORM\Column(name="email", type="string", length=77)
*
* @var string
*/
private $email;
/**
* @ORM\Column(name="phone_number", type="string", length=17)
*
* @var string
*/
private $phoneNumber;}
28.10.2016 23:05:22, Muhammad Surya: monggo dicopy dan buat sampai CRUDnya dengan generator 😊
28.10.2016 23:05:31, Muhammad Surya: nanti kita coba bahas satu2 😊
28.10.2016 23:05:54, Muhammad Surya: masih ingat kan generate entities, schema update kemudian generate crud?
28.10.2016 23:06:00, Muhammad Surya: commandnya masih apal kan?
28.10.2016 23:06:13, Iqbal: lupa om 😁
28.10.2016 23:06:16, Nur Rahmat Taufik(you): Lupa πŸ˜‚
28.10.2016 23:07:02, Muhammad Surya: wkwkwk parah
28.10.2016 23:07:05, Muhammad Surya: ok lah
28.10.2016 23:07:36, Muhammad Surya: $ php bin/console doctrine:generate:entities AppBundle:Contact
Generating entity "AppBundle\Entity\Contact"
> backing up Contact.php to Contact.php~
> generating AppBundle\Entity\Contact
28.10.2016 23:07:54, Muhammad Surya: sudah bisa?
28.10.2016 23:08:16, Muhammad Surya: $ php bin/console doctrine:schema:update --force
28.10.2016 23:08:24, Muhammad Surya: sek cari colokan dulu mau mati
28.10.2016 23:09:09, Muhammad Surya: ok bagaimana bisa?
28.10.2016 23:10:10, Muhammad Surya: Wah ngantuk ni pasti
28.10.2016 23:10:16, Muhammad Surya: udah pada tidur ya?
28.10.2016 23:10:17, Iqbal: bisa om..
28.10.2016 23:10:19, Nur Rahmat Taufik(you): Database schema updated successfully! "2" queries were executed
28.10.2016 23:10:28, Nur Rahmat Taufik(you): 2 queries maksudnya apa pak
28.10.2016 23:10:46, Muhamad: bisa om
28.10.2016 23:10:54, Muhammad Surya: php bin/console doctrine:generate:crud AppBundle:Contact
28.10.2016 23:11:09, Muhammad Surya: Create table dan create relation (foreign key)
28.10.2016 23:11:26, Muhammad Surya: bisa dicek hasilnya langsung di database 😊
28.10.2016 23:11:36, Muhammad Surya: enaknya di Symfony kita ga perlu ngurusin begituan
28.10.2016 23:12:13, Nur Rahmat Taufik(you): pak generate crudnya, no, yes yes yes ya?
28.10.2016 23:12:14, Nur Rahmat Taufik(you): lupa hehe
28.10.2016 23:12:26, Muhammad Surya: yes
28.10.2016 23:12:31, Muhammad Surya: yang create write
28.10.2016 23:12:40, Muhammad Surya: yang lain enter aja 😊
28.10.2016 23:13:30, Muhammad Surya: kalau mau ngulang tinggal ditambahkan di command tadi dibelakang --overwrite
28.10.2016 23:13:46, Muhammad Surya: jadi dia akan nimpa hasil generate yang pertama
28.10.2016 23:13:55, Muhammad Surya: gimana? sudah berhasil semua?
28.10.2016 23:13:59, Muhamad: uda om
28.10.2016 23:14:26, Muhammad Surya: Gimana setelah dijalankan?
28.10.2016 23:14:30, Muhammad Surya: Berhasil juga?
28.10.2016 23:14:35, Nur Rahmat Taufik(you): lanjut
28.10.2016 23:14:50, Muhammad Surya: Jalanin... lanjut2 aja wkwkwk
28.10.2016 23:15:01, Iqbal: udh bisa om..
28.10.2016 23:15:04, Nur Rahmat Taufik(you): wkwk
28.10.2016 23:15:14, Muhammad Surya: Bisa jalan?
28.10.2016 23:15:17, Iqbal: eh tp pas create error
28.10.2016 23:15:28, Muhammad Surya: Sudah seharusnya
28.10.2016 23:15:34, Muhammad Surya: ada yang ngerti alasannya
28.10.2016 23:15:46, Iqbal:
28.10.2016 23:16:14, Muhammad Surya: Ok
28.10.2016 23:16:19, Muhammad Surya: yang lain sama kan?
28.10.2016 23:16:20, Muhammad Surya: πŸ˜ƒ
28.10.2016 23:16:31, Muhammad Surya: Bagaimana mengatasi errornya?
28.10.2016 23:16:50, Muhammad Surya: Sebelum kesitu, saya jelaskan kenapa error itu berasal
28.10.2016 23:17:02, Muhammad Surya: eh darimana kok kenapa sih :v
28.10.2016 23:17:27, Iqbal: iya om kenapa bisa error ?
28.10.2016 23:17:31, Muhammad Surya: ->add('group')
28.10.2016 23:17:35, Muhammad Surya: di form ada itu
28.10.2016 23:18:06, Iqbal: iya ada om ..
28.10.2016 23:18:44, Muhammad Surya: public function getGroup()
{
return $this->group;
}
28.10.2016 23:18:59, Muhammad Surya: di entity Contact
28.10.2016 23:19:09, Muhammad Surya: sek lihat dulu ya di entity contact
28.10.2016 23:20:56, Iqbal: iya ada om , terus gimana ?
28.10.2016 23:22:51, Muhammad Surya: sorry πŸ˜ƒ
28.10.2016 23:22:55, Muhammad Surya: Ok lanjut ya
28.10.2016 23:23:04, Muhammad Surya: Jadi gini flownya
28.10.2016 23:23:24, Muhammad Surya: Ingat kembali penjelasan tentang form kemarin
28.10.2016 23:23:50, Muhammad Surya: bahwa form terkoneksi atau berelasi dengan sebuah class (gampangnya entity walau ga selalu entity)
28.10.2016 23:24:13, Muhammad Surya: Nah karena entity Contact berelasi dengan entity Group
28.10.2016 23:24:31, Muhammad Surya: /**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Group", cascade={"persist"})
* @ORM\JoinColumn(name="group_id", referencedColumnName="id")
*
* @var Group
*/
private $group;
28.10.2016 23:25:04, Muhammad Surya: @ORM\ManyToOne(targetEntity="AppBundle\Entity\Group", cascade={"persist"})
28.10.2016 23:25:20, Muhammad Surya: Sehingga property $group berisi class/entity Group
28.10.2016 23:25:53, Muhammad Surya: karena berisi Group (object dari class Group) maka ketika di echo akan error
28.10.2016 23:26:00, Muhammad Surya: bingung?
28.10.2016 23:26:04, Muhamad: ngga om
28.10.2016 23:26:21, Muhammad Surya: Ok
28.10.2016 23:26:25, Muhamad: lanjut, makanya tadi errornya object ga bisa di convert ke string
28.10.2016 23:26:32, Muhamad: iya kan ya
28.10.2016 23:26:36, Muhammad Surya: Yup
28.10.2016 23:27:01, Muhammad Surya: Cara paling mudah adalah dengan memakai magic method __toString pada Group
28.10.2016 23:27:38, Muhammad Surya: public function __toString()
{
return $this->getName();
}
28.10.2016 23:27:41, Muhammad Surya: seperti itu
28.10.2016 23:27:45, Muhammad Surya: monggo dicoba
28.10.2016 23:28:02, Muhammad Surya: itu ditambahkan pada entity Group ya bukan entity Contact
28.10.2016 23:28:26, Muhamad: annotationnya om ?
28.10.2016 23:28:30, Iqbal: bisa om ..
28.10.2016 23:28:36, Muhammad Surya: Bukan
28.10.2016 23:28:38, Muhammad Surya: di Entity
28.10.2016 23:28:39, Muhamad: pake atau biarkan kosong ?
28.10.2016 23:28:51, Muhammad Surya: public function setName($name)
{
$this->name = $name;
}
public function __toString()
{
return $this->getName();
}
28.10.2016 23:28:57, Muhammad Surya: dibawah setName
28.10.2016 23:29:50, Muhammad Surya: Bagaimana sudah tidak error kan?
28.10.2016 23:31:24, Iqbal: iya udh engga om crud nya juga udh bisa
28.10.2016 23:32:20, Muhamad: ane dapat ini om
28.10.2016 23:32:28, Muhamad:
28.10.2016 23:32:51, Muhammad Surya: itu pas apa ya?
28.10.2016 23:32:59, Muhammad Surya: sudah ada belum entitynya?
28.10.2016 23:33:04, Muhamad: sudah om,
28.10.2016 23:33:05, Muhammad Surya: kok bisa error begitu?
28.10.2016 23:33:06, Muhamad: pas create
28.10.2016 23:33:11, Muhammad Surya: clear cache coba
28.10.2016 23:33:16, Muhammad Surya: php bin/console cache:clear
28.10.2016 23:33:31, Muhammad Surya: sekalian coba copas Contact.php-nya
28.10.2016 23:34:45, Muhammad Surya: Bagaimana masih error?
28.10.2016 23:34:58, Muhammad Surya: Yang lain apakah ada juga yang dapat error?
28.10.2016 23:36:08, Muhammad Surya: Gimana @malfan apakah masih error?
28.10.2016 23:36:14, Muhammad Surya: Yang lain apakah sudah bisa?
28.10.2016 23:36:16, Muhamad: maaf om agak lama
28.10.2016 23:36:19, Muhammad Surya: ataukah tidur?
28.10.2016 23:36:20, Muhamad: laptopnya lagi kumat
28.10.2016 23:36:35, Muhammad Surya: wkwkwk ok ga masalah
28.10.2016 23:36:39, Nur Rahmat Taufik(you): bisa create pak
28.10.2016 23:36:40, Muhamad: hehehe
28.10.2016 23:37:01, Muhammad Surya: Udah ga error ya
28.10.2016 23:37:05, Muhamad: ini laptopnya kayanya minta ganti hardisk ... 😭😭
28.10.2016 23:37:19, Muhammad Surya: Waduh
28.10.2016 23:37:41, Muhamad: kemarin uda 2 kali blue screen
28.10.2016 23:37:46, Muhammad Surya: Pada dasarnya kalau stepnya bener tidak akan error dengan menambahkan __toString tadi
28.10.2016 23:37:47, Muhamad: 😒
28.10.2016 23:37:55, Muhammad Surya: Itu cara pertama
28.10.2016 23:38:08, Muhammad Surya: Cara kedua, dengan merubah form hasil generate
28.10.2016 23:38:23, Muhammad Surya: $builder
->add('fullName')
->add('email')
->add('phoneNumber')
->add('group', EntityType::class, array(
'class' => Group::class,
'choice_label' => 'name',
))
;
28.10.2016 23:38:33, Muhammad Surya: use AppBundle\Entity\Group;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
28.10.2016 23:38:43, Iqbal: oh ya pake entitiy type
28.10.2016 23:38:54, Muhammad Surya: itu use dan Formnya
28.10.2016 23:39:13, Muhammad Surya: yang __toString bisa comment agar bisa membedakan 😊
28.10.2016 23:40:18, Muhammad Surya: Bagaimana, apakah ada perbedaan?
28.10.2016 23:40:18, Muhammad Surya: πŸ˜ƒ
28.10.2016 23:40:33, Nur Rahmat Taufik(you): ini di taruh dimana
28.10.2016 23:40:56, Nur Rahmat Taufik(you): di Form\ContactType?
28.10.2016 23:40:57, Muhammad Surya: dipaling atas di form ContactType
28.10.2016 23:41:16, Muhammad Surya: yup
28.10.2016 23:41:42, Iqbal: pas choice group nya aja kayanya beda nya
28.10.2016 23:41:49, Muhammad Surya: bagaimana?
28.10.2016 23:41:59, Muhammad Surya: Bedanya apa bal?
28.10.2016 23:42:37, Fariz: undefined
28.10.2016 23:42:43, Iqbal: kalo pake __toString pas create choice nya blm ke pilih..
tp kalo pake entity langsung ke pilih
28.10.2016 23:42:58, Muhammad Surya: Yup kanan alias right
28.10.2016 23:43:53, Muhammad Surya: Bagaimana sudah bisa tau ya caranya kalau misal muncul error convert to string lagi 😊
28.10.2016 23:44:06, Muhammad Surya: Sebenarnya ada cara ketiga dan keempat πŸ˜ƒ
28.10.2016 23:44:22, Iqbal: iya om paham ..
28.10.2016 23:44:23, Muhammad Surya: Banyak cara lah kalau nanti kalian sudah paham Symfony form πŸ˜ƒ
28.10.2016 23:44:25, Nur Rahmat Taufik(you): __toString() magic juga ya pak
28.10.2016 23:44:38, Muhammad Surya: itu magic method bawaan PHP
28.10.2016 23:44:41, Muhammad Surya: bukan Symfony
28.10.2016 23:45:26, Muhammad Surya: Untuk yang Contact ini gue ga akan membahas lagi Controller-nya karena sama aja dengan group, bahasan cuma sampai form aja 😊
28.10.2016 23:46:00, Muhammad Surya: Ok bonus cara ketiga dan lebih fleksibel πŸ˜ƒ
28.10.2016 23:46:56, Muhammad Surya: 'choice_label' => function ($group) {
/** G@var Group $group */
return sprintf('%s | %s', $group->getCode(), $group->getName());
},
28.10.2016 23:47:07, Muhammad Surya: Pakai choice_label 😊
28.10.2016 23:47:27, Muhammad Surya: kalian bisa modifikasi label choicenya sesuka kalian
28.10.2016 23:48:37, Muhammad Surya: Bagaimana? ada pertanyaan?
28.10.2016 23:48:40, Muhamad: di bagian ini /** G@var Group $group */
28.10.2016 23:48:44, Muhammad Surya: Waktu tinggal 10 menit 😊
28.10.2016 23:48:52, Muhammad Surya: Cuma comment 😊
28.10.2016 23:48:52, Nur Rahmat Taufik(you): Ditaruh dimana paj
28.10.2016 23:49:00, Muhamad: ini maksudnya G@var apa ya om
28.10.2016 23:49:04, Muhammad Surya: gantiin tadi
28.10.2016 23:49:06, Muhamad: ada G nyelip gtu
28.10.2016 23:49:13, Muhammad Surya: iya itu typo
28.10.2016 23:49:15, Muhammad Surya: kelebihan
28.10.2016 23:49:19, Muhammad Surya: harusnya @var
28.10.2016 23:49:22, Muhamad: owalah kirain apa
28.10.2016 23:49:39, Muhamad: *kali ada maksud tertentu
28.10.2016 23:49:46, Muhammad Surya: Gantiin ini @taufikherjanto
28.10.2016 23:50:16, Muhammad Surya: Dibagian choice_label
28.10.2016 23:50:58, Muhammad Surya: Bagaimana sudah bisa muncul code | name?
28.10.2016 23:51:10, Muhamad: bisa om
28.10.2016 23:51:11, Nur Rahmat Taufik(you): muncul
28.10.2016 23:51:26, Muhammad Surya: Ok mantab
28.10.2016 23:51:38, Muhammad Surya: sampai disini ada pertanyaan
28.10.2016 23:51:40, Nur Rahmat Taufik(you): nambahin option 'Pilih Group' gimana pak?
28.10.2016 23:52:55, Muhammad Surya: 'placeholder' => 'Pilih Group',
28.10.2016 23:53:00, Muhammad Surya: bisa pakai placeholder
28.10.2016 23:54:23, Nur Rahmat Taufik(you): bisa pak hehe
28.10.2016 23:54:40, Muhammad Surya: Bagaimana apakah masih ada pertanyaan lagi
28.10.2016 23:54:43, Muhammad Surya: 😊
28.10.2016 23:54:50, Muhamad: hari ini kyanya cukup om
28.10.2016 23:54:53, Muhammad Surya: sepertinya sudah pada ngantuk 😊
28.10.2016 23:54:56, Muhamad: hehehe
28.10.2016 23:55:21, Muhamad: mau di cerna2 dlu
28.10.2016 23:55:23, Iqbal: kalo kita mau nambahin style menggunakan class gimana om ?
28.10.2016 23:55:27, Muhammad Surya: Hehehe kalau memang sudah tidak ada, saya cukupkan sampai disini untuk pertemuan ke 3 (atau 4 ya?)
28.10.2016 23:55:36, Muhamad: 3 om
28.10.2016 23:55:46, Iqbal: itu kan class nya udh di isi Group::class
28.10.2016 23:56:13, Muhammad Surya: 'attr' => array('class' => 'css class')
28.10.2016 23:56:26, Muhammad Surya: Lihat Guidenesia bal πŸ˜ƒ
28.10.2016 23:56:40, Iqbal: ah iya yah lupa πŸ˜‚
28.10.2016 23:56:46, Iqbal: oke oke om udh cukup
28.10.2016 23:56:48, Muhammad Surya: Ok pertemuan ketiga ini saya akhiri ya πŸ˜ƒ
28.10.2016 23:56:53, Iqbal: terimakasih banyak ilmu nya 😊
28.10.2016 23:57:05, Muhammad Surya: Semoga yang sedikit ini bisa bermanfaat bagi kita semua termasuk saya 😊
28.10.2016 23:57:06, Nur Rahmat Taufik(you): terima kasih pak
28.10.2016 23:57:23, Muhammad Surya: Dengan sharing seperti ini, saya juga belajar kembali 😊
28.10.2016 23:57:56, Muhamad: terima kasih banyak om sur... mudah2n ilmunya tambah berkah ya
28.10.2016 23:57:59, Muhammad Surya: Terima kasih semuanya... Semoga ilmunya makin berkah dan manfaat 😊
Sampai bertemu minggu depan, Assalamu'alaikum warohmatulalh wabarokatuh
28.10.2016 23:58:05, Muhamad: dan cepat kita cerna
28.10.2016 23:58:10, Muhammad Surya: amiiiinnnnnn
28.10.2016 23:58:14, Muhamad: sampai minggu depan lagi om
28.10.2016 23:58:18, Muhamad: wa'alaikum salam..
28.10.2016 23:58:30, Nur Rahmat Taufik(you): wa'alaikumussalam wr. wb
28.10.2016 23:59:05, rudjok: waalaikumsalam, makasih banyak untk materi minggu ini, om.
28.10.2016 23:59:23, Iqbal: Amin.
28.10.2016 23:59:27, Iqbal: walaikumsalam...
29.10.2016 00:00:56, Fariz: Walaikumsalam
29.10.2016 00:01:00, Muhammad Surya: Materinya sudah ane upload 😊
29.10.2016 00:01:01, Muhammad Surya: https://github.com/ad3n/SymfonyIdCourse
29.10.2016 00:01:12, Muhammad Surya: hari ini lebih 1/2 jam dari jadwal wkwkwk πŸ˜ƒ
29.10.2016 00:03:21, Nur Rahmat Taufik(you): Hitung hitung sedekah pak πŸ˜‚
29.10.2016 00:03:43, Muhammad Surya:
29.10.2016 00:03:45, Muhammad Surya: πŸ˜‚πŸ˜‚πŸ˜‚πŸ˜‚
29.10.2016 00:03:56, Muhammad Surya: seeeepppp
29.10.2016 00:04:05, Muhamad: *bisa jadi om sur keasikan nostalgia ketika belajar dlu, hehehe
29.10.2016 00:09:55, Yuan: wah saya ketiduran. hahaha.. nanti direview semua yang di sini. xie xie
29.10.2016 00:12:34, Muhammad Surya: Sadar kok sebenarnya cuma memang materinya nanggung jadi habisin sekalian
29.10.2016 00:12:49, Muhammad Surya: Pertemuan depan mulai masuk ke service
29.10.2016 00:39:53, dery: undefined
29.10.2016 00:40:24, Muhamad: siap om sur... sekali lagi makasih banyak ya om 😊
29.10.2016 02:07:00, Iyan: undefined
29.10.2016 04:40:56, Achmadi: undefined
29.10.2016 05:35:16, Hendro: undefined
29.10.2016 05:35:29, Sapto: undefined
29.10.2016 05:44:56, Ari: undefined
29.10.2016 05:47:21, Muhammad Surya: @all new members:
Terima kasih sudah bergabung...
29.10.2016 05:48:29, Ari: terimakasih sudah di ijinkan bergabung om @AdenKejawen :)
29.10.2016 06:14:45, Indra: undefined
29.10.2016 06:23:45, Hendro: Cara lihat arsip diskusi gimana ya?
29.10.2016 06:26:50, budho: undefined
29.10.2016 06:56:22, Tri: undefined
29.10.2016 07:22:15, Muhammad Habib: undefined
29.10.2016 07:45:08, Budiman Oktavianus: undefined
29.10.2016 07:46:23, Budiman Oktavianus: salam kenal suhu2 disini, beginner nih
29.10.2016 08:13:16, Muhammad Surya: Discroll keatas pak
29.10.2016 08:15:06, anugrah: undefined
29.10.2016 08:18:13, Muhammad Surya: Yang penting udah bisa OO karena disini ga akan dibahas lagi hehehe
29.10.2016 08:20:03, Sapto: Mentok kang sur, historynya ga kluar
29.10.2016 08:21:11, Muhammad Surya: Ok nanti saya coba copas/rangkum dari awal untuk yang baru
29.10.2016 08:29:39, Sapto: Masyaallah... 😊
Terima kasih kang 😁
29.10.2016 08:31:40, Hendro: Ga bisa kang.
29.10.2016 08:31:56, Hendro:
29.10.2016 08:32:00, Hendro: Mentok
29.10.2016 08:32:03, Muhammad Surya: https://github.com/ad3n/SymfonyIdCourse
29.10.2016 08:32:18, Muhammad Surya: Untuk hasil terakhir itu
29.10.2016 08:32:49, Muhammad Surya: Cuma nanti pas luang saya rangkum
29.10.2016 08:39:28, Hendro: Oke terima kasih kang surya πŸ™
29.10.2016 08:51:24, Iyan: terima kasih master Surya
29.10.2016 08:51:29, Iyan: sudah diijinkan gabung
29.10.2016 08:51:37, Iyan: newbie nunut belajar symfony
29.10.2016 08:51:46, Iyan:
29.10.2016 08:51:58, Iyan:
29.10.2016 08:53:14, Iyan: ini om Hendro yang buat senayan ?
29.10.2016 09:18:31, Muhammad Surya: Yup
29.10.2016 09:19:20, Iyan: itu pakai PHP versi berapa om ?
29.10.2016 09:19:43, Iyan: yang platform sudah download begitu di composer install
29.10.2016 09:19:49, Iyan: butuh 5.6.17
29.10.2016 09:24:54, Hendro:
29.10.2016 09:33:55, Iyan: Wew ada master Senayan
29.10.2016 09:36:46, Akku Iki Alie: undefined
29.10.2016 09:37:08, Muhammad Surya: Pakai yang dilink
29.10.2016 09:37:19, Muhammad Surya: Jangan pakai Platform
29.10.2016 09:37:42, Iyan: yang ini om ?
29.10.2016 09:37:48, Muhammad Surya: Yup
29.10.2016 09:38:04, Iyan: itu PHP versi berapa ?
29.10.2016 09:38:29, Iyan: yang 7 belum install
29.10.2016 09:39:25, Iyan:
29.10.2016 09:42:29, Muhammad Surya: Asal bisa jalankan Symfony aja
29.10.2016 09:44:02, Matth: undefined
29.10.2016 09:45:10, Muhammad Surya: Pakai ini gan
29.10.2016 09:45:10, Muhammad Surya: https://github.com/ad3n/SymfonyIdCourse
29.10.2016 09:50:19, Muhammad Surya: Kalau ada yang bisa bantu ngerangkum @hak11 or Iqbal or Tegar or @taufikherjanto or Rujok
29.10.2016 10:52:19, Matth: undefined
30.10.2016 01:32:28, Nur Rahmat Taufik(you): ya saya coba ngerangkum
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment