Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

Menyelam Kedalam Symfony 2

by
Difficulty:IntermediateLength:LongLanguages:

Indonesian (Bahasa Indonesia) translation by Sayektisri1967 (you can also view the original English article)

Kerangka kerja adalah topik hangat dalam industri web dan telah berlangsung selama beberapa waktu. Dalam lautan rasa luas ini Symfony - kerangka kerja PHP yang luas yang mengikuti paradigma MVC yang pernah populer. Kurva belajarnya mungkin sedikit lebih curam daripada sesama pesaingnya, seperti CodeIgniter. Jangan khawatir, setelah tumbuh pada Anda, Anda akan merasa lebih kuat dari sebelumnya dan Anda akan dapat mengembangkan aplikasi yang fantastis.


1. Persyaratan

Dalam artikel ini Anda harus menggunakan program konsol. Saya pribadi suka Git Bash, tapi ada yang mau. Anda juga perlu memasang curl untuk menginstal Composer.

Jika Anda pengguna Windows, Anda bisa mendapatkan semua paket di atas dengan menginstal Git untuk Windows, yang tersedia di sini: Git downloads.


2. Apa yang Akan Anda Pelajari

Selama artikel ini Anda akan mempelajari lebih lanjut tentang:

  • Alur aplikasi Symfony
  • Menginstal Symfony 2.1 menggunakan Composer
  • Struktur file dan bundel Symfony
  • Konsol
  • Rute dan pengontrol
  • Respon
  • Twig (ranting?)

3. Siklus Hidup Symfony

Sebelum kita mendapatkan tangan kita kotor dan berpasir, saya ingin menggunakan momen untuk menjelaskan aliran siklus kehidupan Symfony.

symfony-2-diagram

Permintaan

Seperti semua hal lainnya di web, semuanya dimulai dengan permintaan. Ini diambil oleh Symfony yang akan mencocokkannya dengan rute yang kami tetapkan (jangan khawatir, ini akan dijelaskan nanti), yang kemudian dicocokkan dengan pengontrol. Jadi kami memberi tahu Symfony URL mana yang kami ingin cocokkan dengan pengontrol tertentu dan fungsinya.

Kernel

Ini adalah dimana keajaiban terjadi. Symfony akan membedah URL dan mencocokkannya dengan salah satu rute kami. Kemudian akan memuat pengontrol yang telah kami tetapkan ke rute.

Controller

Kontroler dimuat dan tindakan yang diberikan dijalankan berdasarkan rute.

Responnya

Sama seperti permintaan HTTP normal, permintaan Symfony harus mengembalikan objek respons.
Objek respons dapat dibentuk dengan berbagai cara, misalnya dengan header.
Suatu tindakan harus mengembalikan objek respons yang valid atau pengecualian lain akan dibuang.

Jadi sekarang Anda telah memiliki pengantar singkat tentang mekanisme Symfony - sekarang saatnya untuk menyelam.


4. Instalasi Melalui Komposer

Salah satu hal yang indah tentang pengembangan web saat ini, adalah alat yang tersedia untuk mempermudah proses Anda. Salah satunya adalah Composer - manajer paket untuk PHP. Artikel ini tidak akan menyertakan detail penggunaan Composer, tetapi jika Anda tertarik, ini adalah pengantar yang bagus: Pengelolaan Paket Mudah dengan Komposer

Pertama-tama, jika Anda tidak memiliki Composer yang dipasang secara global, Anda dapat mengunduh instalasi lokal dengan menjalankan perintah berikut:

Uji apakah penginstalan bekerja dengan mengetik:

Jika semua berjalan lancar, Anda akan melihat menu perintah yang tersedia. Jika tidak, periksa apakah Anda telah mengatur PHP dalam variabel lingkungan Anda.

Sekarang kita akan melanjutkan ke instalasi Symfony. Ganti your-folder dengan nama folder apa pun yang Anda inginkan untuk proyek Anda. Anda juga dapat mengganti versi di bagian akhir dengan pilihan Anda. Saya merekomendasikan memeriksa Packagist: Symfony Framework Standard Edition untuk rilis stabil terbaru.

Anda sekarang harus melihat Composer mengunduh dependensi ke dalam folder. Jika pemasangan Anda berjalan dengan baik, buka your-project.local/web/config.php - di sini Symfony akan memberi tahu Anda tentang persyaratan server yang tidak ada atau ekstensi opsional yang dapat meningkatkan kinerja atau memudahkan pengembangan Anda.

Ketika Anda telah mengaktifkan ekstensi yang diperlukan dan opsional, buka /web/app_dev.php di mana Anda akan melihat layar selamat datang dengan tautan untuk berbagai pengalaman belajar. Ini berarti Symfony berhasil dipasang - selamat!


5. Pengantar Struktur File dan Bundel Symfony

Pada pandangan pertama, folder root Anda mungkin tampak agak membingungkan. Jangan khawatir, ada penjelasan logis di balik strukturnya. Akar Anda harus terdiri dari empat folder dan beberapa file ini. Anda dapat mengabaikan file, karena mereka tidak penting sekarang.

Direktori Aplikasi

Di sinilah konfigurasi tingkat tinggi proyek Anda berjalan. Sebagai contoh, ini adalah rumah kelas AppKernel yang memuat semua kode Anda dan pustaka pihak ketiga ke dalam kerangka kerja untuk Anda gunakan.

Direktori app juga berisi semua file konfigurasi utama, yang berisi informasi tentang login basis data, model keamanan, routing, dan banyak lagi.

Layout HTML dasar Anda juga ada di sini.

Direktori Src

Direktori src adalah rumah untuk semua kode Anda sendiri, yang dikelompokkan dalam kumpulan.

Siapa atau Apa itu Bundel?

Semua kode Symfony dikelompokkan secara logis ke dalam apa yang dikenal sebagai bundel. Sebagai contoh, katakanlah proyek Anda memiliki sistem pengguna, maka semua pengendali berorientasi pengguna Anda, CSS, JavaScript, entitas database dan sebagainya akan terkandung dalam UserBundle. Apa yang hebat dari sistem ini, adalah Anda dapat mengambil paket (misalnya bundel manajemen pengguna) dan menghubungkannya ke proyek Symfony apa pun.

Anda bahkan dapat mengunduh paket siap pakai dari situs web seperti KNP Bundles. Di antara pilihan populer adalah bundel sistem pengguna dan bundel administrasi CRUD generator. Pada saat menulis artikel ini, situs ini memiliki 1.779 bundel dan 4068 pengembang.

Direktori Vendor

Di sini kami akan menyimpan semua pustaka pihak ketiga. Ini sudah dikemas dengan pustaka, misalnya Symfony, Doctrine, Assetic, dan banyak lagi.

Direktori Web

Ini harus menjadi direktori root dari domain Anda karena ini adalah satu-satunya direktori yang dapat diakses publik dari proyek Anda. Ini adalah rumah dari file app.php dan app_dev.php pengontrol depan Anda, yang merupakan dua titik akses publik ke aplikasi Anda. Seorang pengguna akan memasuki situs Anda melalui URL seperti /app.php/products/jeans.

  • app_dev.php adalah titik masuk utama saat mengembangkan aplikasi Anda. Ketika Anda menggunakan ini sebagai titik masuk Anda, Symfony akan melewatkan caching dan menyediakan Anda dengan toolbar pengembangan mengagumkan.
  • app.php adalah titik masuk untuk mode produksi. Ini sebenarnya dibuat opsional melalui mod_rewrite, jadi URL /app.php/products/jeans dan /products/jeans sebenarnya mengarah ke lokasi yang sama.

6. Coding Dengan Konsol ... Tunggu, Apa?

Konsol telah terbukti menjadi alat yang brilian dalam proses pengembangan saya dan dengan demikian saya berkata kepadamu: Engkau tidak akan takut akan konsolmu, karena Engkau adalah pencipta segala sesuatu.

Bagi saya, salah satu hal (yang aneh) aneh tentang beralih ke Symfony adalah penggunaan berat konsol.

Mari kita menyelaminya. Buka konsol Anda dan temukan akar proyek. Masukkan perintah ini:

Ini adalah perintah yang Anda inginkan. Sebagian besar Anda akan menggunakan generator, cache, dan manajemen aset. Anda juga akan menggunakan ini untuk menghasilkan kumpulan, menghasilkan skema database, rute debugging, pembersihan cache dan banyak lagi.


7. Cukup Bicara. Saya Ingin Kode!

Dengan beberapa pengetahuan dasar tentang struktur dan konsol, Anda sekarang siap untuk terjun ke Symfony!

Pergi ke app_dev.php. Layar selamat datang yang Anda lihat di sini sebenarnya adalah bundel, seperti yang akan kami buat dalam satu menit. Pergi ke src/ dan hapus direktori Acme. Jika Anda me-refresh halaman, Anda akan melihat kesalahan. Ini karena kelas AppKernel sedang mencoba memuat bundel yang baru saja kita hapus. Setiap kali Anda menambahkan atau menghapus bundel, Anda harus mengedit kelas AppKernel.

Jadi buka app/AppKernel.php. Anda akan melihat array seperti ini:

Di sinilah Anda akan menginisialisasi bundel baru. Jika Anda membuat bundel melalui konsol, itu akan ditambahkan secara otomatis.

Lebih jauh ke bawah Anda akan melihat if-block seperti ini:

Ini adalah bundel pengembangan, yaitu, kumpulan yang hanya dimuat saat Anda berada di lingkungan pengembangan (app_dev.php). Anda akan melihat bahwa ini adalah tempat kumpulan dihapus kami diinisialisasi. Hapus baris AcmeDemoBundle dan simpan file.

Jika Anda me-refresh, sekarang Anda akan melihat halaman pengecualian Symfony. Di sinilah semua pengecualian yang tertangkap akan mengarahkan Anda ke dan menampilkan lebih banyak informasi. Anda akan melihat pengecualian yang terjadi seperti ini:

Ini karena Symfony mencari rute yang ditentukan dalam file kontroler SecuredController.php (yang ada di AcmeDemoBundle yang dihapus).

Jadi, Apa itu Rute?

Sekarang mungkin saat yang tepat untuk menjelaskan sedikit lebih banyak tentang rute. Pada dasarnya rute adalah templat URL. Bayangkan Anda memiliki blog, dengan posting, oleh berbagai kategori. Jadi Anda akan ingin pengguna memasukkan URL seperti ini:

Di Symfony Anda dapat menentukan templat URL yang Anda cocokkan dengan pengontrol. Bayangkan contoh sebelumnya. Anda akan membutuhkan fungsi, yang diberi nama kategori dan mencari posting blog menggunakannya. Dalam aplikasi MVC, dan oleh karena itu di Symfony, fungsi ini dibungkus dalam controller. Jadi pada dasarnya akan terlihat seperti ini:

Catatan: Ini bukan kode Symfony yang valid, tetapi hanya contoh pengendali blog sederhana.

Sekarang Anda hanya perlu menghubungkan tindakan pengontrol dan URL. Ini dilakukan dengan rute. Rute dalam kasus ini akan terlihat seperti ini:

Ketika string ditulis dalam kurung kurawal, itu ditafsirkan sebagai variabel, yang kemudian diteruskan ke tindakan yang diberikan. Di Symfony Anda dapat menentukan rute dalam XML, YML atau dengan anotasi. Demi menjaganya agar tetap sederhana, kami hanya akan menggunakan anotasi dalam tutorial ini.

Anda dapat melihat semua rute yang ditentukan dengan menggunakan perintah berikut di konsol:

Tapi ingat, kami mengalami kesalahan. Ini karena Symfony masih mencari rute yang ditentukan di pengendali AcmeDemoBundle kami (yang tidak ada). Jadi buka app/config/routing_dev.yml dan untuk sekarang, yang perlu Anda ketahui adalah semua rute didefinisikan atau diimpor di routing.yml dan routing_dev.yml. Hapus tombol _demo, _welcome dan _demo_secured. Jika Anda menyegarkan, sekarang Anda akan melihat No route found for "GET /". Ini karena tidak ada rute yang cocok dengan URL saat ini - jadi mari kita buat satu yang melakukannya.

Tapi Pertama, sebuah Kontroler

Saat menulis rute sebagai anotasi, Anda menulisnya tepat di atas tindakan yang ingin Anda lakukan ketika seorang pengguna memasuki rute yang diberikan. Oleh karena itu, apa yang kita butuhkan sekarang adalah bundel, yang akan memegang kendali dan tindakan kita.

Buka konsol Anda dan masukkan perintah berikut:

Pertama, Anda harus memasukkan ruang nama bundel Anda. Template umum untuk ini adalah:

Vendor adalah penulis bundel. Di sini Anda dapat memasukkan nama perusahaan Anda atau apa pun yang Anda suka. Saya suka menggunakan inisial EP saya. Gunakan apa pun yang Anda inginkan, tetapi tetap pendek.

Nama bundel harus diakhiri dengan Bundle. Jadi saya akan masuk sebagai berikut:

Selanjutnya, Anda dapat memilih nama yang ingin Anda gunakan saat mengidentifikasi bundel dalam kode Anda.
Saya biasanya menghilangkan nama vendor, tetapi demi tutorial ini, cukup tekan enter.
Ada lebih banyak langkah dalam generator, tetapi Anda akan menginginkan nilai default untuk tutorial ini, jadi cukup tekan enter sampai Anda selesai.

Sekarang buka src/YourVendorName/BlogBundle/ di editor Anda. Anda akan melihat bahwa struktur bundel dasar telah dibuat untuk Anda. Saat ini kami akan melewati detail dan langsung menuju ke direktori pengontrol. Buka DefaultController.php di controller /.

Ini sangat mirip dengan contoh dasar yang saya tulis sebelumnya, kecuali pengontrol adalah turunan dari Kontroler - kelas dari bundel kerangka Symfony, yang memegang fungsi dasar untuk pengontrol.

Jika Anda melihat aksinya, Anda akan melihat beberapa anotasi yang terlihat seperti ini:

Anotasi @Route memberi tahu Symfony bahwa kita ingin mencocokkan rute /hello/{name} dengan aksi \EP\BlogBundle\Controller\DefaultController:: indexAction() dan bahwa ada  variabel yang disebut name di URL. Jadi, jika seseorang masuk dalam URL yang mirip dengan ini:

... mereka semua akan pergi ke tempat yang sama, karena mereka semua akan dicocokkan dengan rute /hello/{name}.

The @Template annotation memberitahu Symfony yang Lihat untuk digunakan. Ketika dibiarkan kosong, Symfony akan menebak tampilan mana yang akan menggunakan tampilan berdasarkan nama kontroler dan nama aksi.

Tapi Bukankah Semua Tindakan Harus Mengembalikan Objek Respons yang Valid?

The Observwan Padawan akan memperhatikan sekarang bahwa tidak ada objek respon yang dikembalikan dalam tindakan ini, yang saya klaim adalah persyaratan sebelumnya dalam artikel.

Respons adalah objek yang berisi kode yang ingin Anda tampilkan, kode layanan, header, dll. Misalnya, jika Anda ingin menampilkan halaman "Hello World" Anda akan melakukan sesuatu seperti ini:

Jika Anda ingin membuat halaman untuk panggilan AJAX, itu bisa dilakukan seperti ini:

Jika Anda ingin mengarahkan pengguna, Anda dapat melakukannya dengan objek RedirectResponse.

Catatan: Anda selalu dapat memodifikasi respons Anda sesuai dengan kebutuhan Anda - kode status, header dan banyak lagi. Tidak ada yang terlarang.

Biasanya, jika Anda ingin membuat tampilan ke pengguna, Anda akan mengembalikan objek respons baru seperti ini:

Ini adalah pintasan panjang yang mengembalikan objek respons dengan template yang ditampilkan sebagai kontennya. Untungnya, kelas pengendali dasar, yang dikendalikan oleh pengontrol kami, memiliki banyak fungsi pintas yang bagus. Kita bisa menggunakan metode render() untuk menghemat waktu kita:

Ini hanya cara pintas ke metode pertama yang saya tunjukkan di atas. Parameter pertama adalah tampilan yang akan dirender. Semua pandangan kami berada di dalam bundel kami di Resources/views/. Pandangan dipisahkan menjadi direktori berdasarkan pengontrol yang bertanggung jawab untuk tampilan. Oleh karena itu konvensi penamaan Bundle: Controller: View.

Tampilan tata letak dasar Anda (template utama aplikasi Anda) ada di app/Resources/views/. Karena ini tidak ada dalam Bundle atau direktori Controller, ini hanya disebut sebagai ::base.html.twig. Tampilan dalam bundel Anda, yang ditempatkan di direktori root bundle-views, disebut sebagai Bundle :: View.

Dan terakhir, parameter kedua dari fungsi render() kami adalah variabel yang kami inginkan dapat diakses oleh kami di View kami.

Membuat Template dengan Twig

Twig adalah mesin template yang dibangun oleh Sensiolabs - pencipta Symfony. Symfony dibundel dengan Twig, meskipun itu bukan keharusan untuk menggunakannya.

Twig memiliki banyak fungsi bagus yang berada di luar cakupan artikel ini, tetapi jangan ragu untuk memeriksanya di situs web resmi Twig.

Jika Anda membuka EPBlogBundle:Default:index.html.twig Anda akan melihat kode yang terlihat seperti ini:

Twig menggunakan {{ }} dan {%%} sebagai tag awal dan akhir. Dua kurung kurawal berarti untuk menghasilkan sesuatu, mirip dengan setara dengan PHP . Jadi {{ name }} berarti untuk menampilkan nilai variabel $name kami (yang kami beri tahu Symfony yang ingin kami gunakan ketika kami membuat objek respons kami).

Untuk memberi Anda contoh kecil kedahsyatan Twig, saya akan menunjukkan beberapa filter. Filter adalah fungsi yang dapat Anda terapkan pada variabel. Ini diterapkan dengan menggunakan sintaks ini {{ var|filter }}. Inilah beberapa contoh.

Anda dapat melihat daftar lengkap dari tag, filter, dan fungsi di dokumentasi Twig resmi. Yang benar-benar membuat Twig mengagumkan adalah sebenarnya sangat mudah untuk membuat filter dan fungsi Anda sendiri. Tetapi Anda harus menunggu tutorial lain untuk informasi lebih lanjut tentang Twig dan kemampuannya yang diperpanjang.


Kesimpulan

Ini adalah akhir dari perjalanan kita yang luar biasa - dan sungguh sebuah petualangan!

Kita tidak hanya belajar tentang struktur Symfony dan bundel, tetapi juga kekuatan rute dan pengontrolnya. Taburkan ini dengan sedikit ranting dan Anda telah diperkenalkan ke Symfony! Saya akan segera kembali dengan lebih banyak tutorial mendalam tentang subjek yang lebih spesifik seperti manajemen aset dengan Assetic dan templating dengan Twig. Terima kasih sudah membaca.

Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.