Saya menyadari pertanyaan seperti ini , di mana orang cenderung membahas konsep bundel Symfony 2 umum.
Masalahnya adalah, dalam aplikasi tertentu, seperti, misalnya, aplikasi seperti twitter, haruskah semuanya benar-benar ada di dalam bundel generik, seperti yang dikatakan dokumen resmi ?
Alasan saya menanyakan hal ini adalah karena ketika kita mengembangkan aplikasi, secara umum, kita tidak ingin memasangkan kode kita ke beberapa kerangka kerja stack penuh.
Jika saya mengembangkan aplikasi berbasis Symfony 2 dan, pada titik tertentu, saya memutuskan Symfony 2 bukan pilihan terbaik untuk menjaga pengembangan berjalan , apakah itu akan menjadi masalah bagi saya?
Jadi pertanyaan umumnya adalah: mengapa semuanya menjadi bundel adalah hal yang baik?
EDIT # 1
Hampir setahun sekarang sejak saya mengajukan pertanyaan ini, saya menulis artikel untuk membagikan pengetahuan saya tentang topik ini.
sumber
Jawaban:
Saya telah menulis posting blog yang lebih menyeluruh dan diperbarui tentang topik ini: http://elnur.pro/symfony-without-bundles/
Tidak, tidak semuanya harus dalam satu bundel. Anda dapat memiliki struktur seperti ini:
src/Vendor/Model
- untuk model,src/Vendor/Controller
- untuk pengontrol,src/Vendor/Service
- untuk layanan,src/Vendor/Bundle
- untuk bundel, sepertisrc/Vendor/Bundle/AppBundle
,Dengan cara ini, Anda hanya akan memasukkan
AppBundle
hal-hal yang benar-benar spesifik untuk Symfony2. Jika Anda memutuskan untuk beralih ke kerangka kerja lain nanti, Anda akan menyingkirkanBundle
namespace dan menggantinya dengan hal-hal kerangka kerja yang dipilih.Harap perhatikan bahwa yang saya sarankan di sini adalah untuk kode khusus aplikasi . Untuk bundel yang dapat digunakan kembali, saya masih menyarankan menggunakan praktik terbaik .
Menjaga entitas dari bundel
Untuk menjaga entitas di
src/Vendor/Model
luar bundel apa pun, saya telah mengubahdoctrine
bagianconfig.yml
dariuntuk
Nama-nama entitas - untuk diakses dari repositori Doktrin - mulai dengan
Model
dalam kasus ini, misalnyaModel:User
,.Anda dapat menggunakan subnamespaces untuk mengelompokkan entitas terkait bersama, misalnya
src/Vendor/User/Group.php
,. Dalam hal ini, nama entitas adalahModel:User\Group
.Menghindari pengontrol dari bundel
Pertama, Anda perlu memberi tahu JMSDiExtraBundle untuk memindai
src
folder untuk layanan dengan menambahkan ini keconfig.yml
:Kemudian Anda mendefinisikan pengontrol sebagai layanan dan menempatkannya di bawah
Controller
namespace:Perhatikan bahwa saya menggunakan ElnurAbstractControllerBundle saya untuk menyederhanakan mendefinisikan pengontrol sebagai layanan.
Hal terakhir yang tersisa adalah memberi tahu Symfony untuk mencari templat tanpa bundel. Saya melakukan ini dengan mengesampingkan layanan penebak template, tetapi karena pendekatannya berbeda antara Symfony 2.0 dan 2.1, saya menyediakan versi untuk keduanya.
Mengganti penebak templat Symfony 2.1+
Saya telah membuat bundel yang melakukan itu untuk Anda.
Mengganti pendengar template Symfony 2.0
Pertama, tentukan kelasnya:
Dan kemudian beri tahu Symfony untuk menggunakannya dengan menambahkan ini ke
config.yml
:Menggunakan templat tanpa bundel
Sekarang, Anda dapat menggunakan templat dari bundel. Simpan di bawah
app/Resources/views
folder. Misalnya, templat untuk dua tindakan dari contoh controller di atas berada di:app/Resources/views/User/add.html.twig
app/Resources/views/User/profile.html.twig
Saat merujuk ke templat, cukup abaikan bagian bundel:
sumber
generate:doctrine:crud
misalnya mengharapkan entitas (= model dalam kasus elnur) berada di dalam sebuah bundel agar dapat bekerja.Tentu saja Anda dapat memisahkan aplikasi Anda. Hanya mengembangkannya sebagai perpustakaan dan mengintegrasikannya ke
vendor/
folder symfony (baik dengan menggunakandeps
ataucomposer.json
, tergantung apakah Anda menggunakan Symfony2.0 atau Symfony2.1). Namun, Anda memerlukan setidaknya satu bundel, yang bertindak sebagai "frontend" dari perpustakaan Anda, tempat Symfony2 menemukan controller (dan semacamnya).sumber
symfony-2.0
saya anggap Anda menggunakan versi 2.0 saat ini. Dalam hal ini buat repositori git di mana pun Anda suka dan masukkan semuanya ke dalamnya, apa yang ingin Anda kembangkan independen dari symfony. Dalam proyek-symfony Anda, perbaruideps
-file Anda seperti yang disebutkan di sini symfony.com/doc/current/cookbook/workflow/... Kemudian buat satu (atau lebih) bundel aplikasi () (php app/console generate:bundle
) untuk barang-barang khusus symfony.Distribusi symfony biasa dapat bekerja tanpa bundel (aplikasi) tambahan, tergantung pada seberapa banyak fungsionalitas yang ingin Anda gunakan dari kerangka stack penuh.
Misalnya, pengontrol Anda bisa berupa panggilan apa pun yang dapat diletakkan di mana saja dalam struktur proyek Anda, segera setelah mereka dimuat secara otomatis.
Dalam file definisi perutean, Anda dapat menggunakan:
Itu bisa berupa objek php lama biasa, hanya terikat pada kerangka oleh fakta bahwa ia harus mengembalikan
Symfony\Component\HttpFoundation\Response
objek.Templat ranting Anda (atau yang lain) dapat diletakkan seperti
app/Resources/views/template.html.twig
dan dapat dirender menggunakan::template.html.twig
nama logis.Semua layanan DI dapat didefinisikan di app / config / config.yml (atau diimpor dari
app/config/services.yml
misalnya, dan semua kelas layanan dapat berupa objek php lama yang biasa juga. Tidak terikat dengan kerangka kerja sama sekali.Semua ini disediakan secara default oleh framework full stack symfony.
Di mana Anda akan memiliki masalah adalah ketika Anda ingin menggunakan file terjemahan (seperti xliff), karena mereka ditemukan hanya melalui bundel .
The symfony cahaya tujuan distribusi untuk memecahkan masalah semacam ini dengan menemukan segala sesuatu yang akan biasanya ditemukan hanya melalui bundel.
sumber
Anda bisa menggunakan KnpRadBundle , yang mencoba menyederhanakan struktur proyek.
Pendekatan lain adalah menggunakan
src/Company/Bundle/FrontendBundle
misalnya untuk bundel dansrc/Company/Stuff/Class.php
untuk kelas-kelas yang symfony independen dan yang dapat digunakan kembali di luar kerangka kerjasumber
Bundle
langsung berbagi secara publik. Ketika saya menulis beberapa aplikasi, saya tidak ingin membagikan kode saya, kecuali untuk bagian-bagian yang saya sengaja buat sebagai modul berbasis komunitas. Apakah aku salah?Karena sudah 5 tahun berlalu, berikut adalah beberapa artikel tentang Bundel Symfony.
TLDR:
TLDR:
sumber
Kerangka kerja Symfony sangat baik untuk meluncurkan bukti konsep dengan cepat dan semua kode dapat dimasukkan dalam aplikasi bundel default di src /
Dalam bundel ini, Anda dapat menyusun kode sesuai keinginan.
Setelah jika Anda ingin menggunakan teknologi lain untuk mengembangkan POC Anda, Anda dapat dengan mudah menerjemahkannya karena Anda tidak menyusun semua kode Anda dalam konsep paket.
Untuk semua konsep Anda tidak melakukan ekstremisme ini. Bundel itu bagus tapi bundel segalanya dan setiap hari tidak bagus.
Mungkin Anda dapat menggunakan Silex (kerangka mikro Symfony) untuk mengembangkan Bukti Konsep Anda untuk mengurangi dampak bundel pihak ketiga.
sumber