Symfony en iyi uygulamaları (resmi tavsiye)
Web ajansı » Dijital haberler » Symfony en iyi uygulamaları (resmi tavsiye)

Symfony en iyi uygulamaları (resmi tavsiye)

Birkaç gün önce, Sensio aracılığıyla Fabien Potencier, bir Symfony projesi geliştirmek için en iyi uygulamaları ve tavsiyeleri bir araya getiren bir e-kitap yayınladı. Topluluk tarafından yayınlanan tavsiyelerden derlenen bu belgenin amacı, ph ile ilgili bir dizi tavsiye vermektir.iloSymfony'den Sophia. Bu yazıda İngilizce olarak açıklanan 31 ipucunu kısaca özetlemeye çalışacağım.

Giriş

Bu belge, belgeyle ilgili bize ilham vermeyi amaçlayan bazı tavsiyeler ve birkaç cümle ile başlamaktadır.

"Bu belge bir öğretici değildir"

Bu belge, tüm Symfony geliştiricileri tarafından okunmak amacıyla yazılmıştır. Hem uzmanlar hem de acemiler.

"Uygulamalarınızı yeniden düzenlemeyin"

Belgenin başından itibaren, bu okumanın ardından, uygulamalarımızı Sensio'nun çoklu tavsiyelerine tam olarak uyması için güncellemememiz ve yeniden düzenlemememiz gerektiği özellikle açıklanmaktadır. Bu nedenle, belgede geliştirilen ilk fikirlerle hemen bağlantı kurabiliriz: bu iyi uygulamalar, kod incelemesini basitleştirmenin yanı sıra hayatımızı basitleştirmemize izin vermelidir. Sözlerimi desteklemek için üç neden öne sürülüyor:

  • Mevcut uygulamalarınız yanlış değil, sadece başka bir dizi yönergeyi takip ediyorlar;
  • Tam bir kod tabanı yeniden düzenlemesi, uygulamalarınızda hatalara neden olabilir;
  • Bunun için harcanan iş miktarı, testlerinizi geliştirmeye veya son kullanıcılara gerçek değer sağlayan özellikler eklemeye daha iyi ayrılabilir.

Proje oluştur

Bir Symfony projesinin nasıl ilan edileceğini ve yaratılacağını ele alan 2. bölümde, ilk “En İyi Uygulama” verilmektedir:

_Her zaman Composer'ı kullanın. _Composer, bağımlılık çözümü aracılığıyla modern PHP'nin temellerini tanıttı. Onun sayesinde dosyada kayıtlı bağımlılıklar composer.json projenizde çözülecek ve kullanılabilir olması için ülkesine geri gönderilecektir. Ayrıca kolay güncellemeler yapılabilmektedir.

Bu şekilde, bir Symfony projesinin yapısal organizasyonuna saygı gösterebilirsiniz. (bkz. sayfa 8).

exemples:

  • uygulama/önbellek önbelleği saklayacak;
  • uygulama/günlükler günlükleri saklamak;
  • uygulama/Kaynaklar uygulamanız için şablonların yanı sıra genel çevirileri de depolar;
  • src / uygulama paketlerinizi saklayın;
  • satıcı / projenizin bağımlılıklarını saklayın;
  • ağ/ varlıkları (css, js, resimler, vb.) ve ön dosyayı (app.php) depolayarak isteklerinizi daha sonra denetleyicilerinize yeniden yönlendirmenizi sağlar.
    Sonuç olarak, paketler hakkında yeni bir öneri. ph'ı sorgulayabilecek kendi analizimi yapmadaniloSymfony'den Sophie (ki istemiyorum), işte tavsiye:

Bir uygulama için tek bir AppBundle paketi oluşturun. Bu, Symfony'nin tasarlanma biçiminden kaynaklanmaktadır. Her paket bağımsız olmalıdır. _Bu nedenle özerk ve bağımsız olarak yaşayabilmelidirler.

Sizi bu tavsiye üzerine meditasyon yapmaya bırakıyorum…

yapılandırma

Üçüncü bölüm, uygulamasını yapılandırmamız için bize tavsiyeler veriyor. Bazı yapılandırma öğeleri, bir geliştirme sisteminden bir üretim sistemine değişebilir.

Önerinin belirttiği gibi, bu nedenle altyapınızla ilgili yapılandırmayı app/config/parameters.yml dosyasında tanımlayın.

Tersine, statik olacak olan projenize özgü yapılandırma, içinde bildirilecektir. uygulama/config/config.yml.

Ek olarak, dosya parametreler.yml sürüm olmamalıdır. bu dosya parametreler.yml.dist kim olmalı Uygulamanızı yapılandırmak için size temel seçenekleri verecek olan bu dosyadır. (öneri sayfası 12).

Sonuç olarak, _ dosyasıuygulama/config/config.yml _itself bir tavsiye niteliğindedir.

app/config/config.yml'de uygulamanızla ilgili yapılandırmayı ayarlayın
Bununla birlikte, bu öneriyi takiben, bir dosya oluşturmanız önerilir. yapılandırma.yml, yapılandırma_dev.yml ve bir dosya yapılandırma_prod.yml. Bu dosyalar, geliştirme ortamına ve üretim ortamına özgü sabitleri depolamak için tasarlanmıştır.
Değeri çok az değiştiğinde bir değeri sabit kabul etmeliyiz.

Bağımlılık Enjeksiyonu

Buradayız ! Üçüncü bölümde, bağımlılıkların kullanımına ilişkin bir öneri detaylandırılmıştır. Açıklamam size belirsiz görünüyorsa, bu tavsiyeyi okumanızı tavsiye ederim.

Bu öneri, hizmetlerin hizmetlere enjekte edilmesiyle ilgilidir. Sensio, bunları bir dosyada bildirmenizi önerir. src/AppBundle/Resources/config/services.yml.

Ayrıca sizi, bağımlılık enjeksiyonu ve süper hizmet konteynerinin kullanımının nasıl sınırlandırılacağı hakkındaki makalemi okumaya davet ediyorum.

Dahili mantığı bildir

4. Bölüm, başvurunuzu düzenlemeyi kapsar. İhtiyaçlarınıza bağlı olarak, organizasyon farklılık gösterecektir. Global ve ticari olmayan işlevler için Sensio, bunların bir klasöre yerleştirilmesini önerir. Utils veya bunları paketinizden çıkarın ve ayrı bir klasöre koyun. Bunu takiben, sınıfınızı bir hizmet olarak bildirmeniz şiddetle tavsiye edilir. Bunları beyan etmemize yardımcı olmak için yeni bir tavsiye verilir.

Hizmetinizin adı mümkün olduğunca kısa, ideal olarak tek kelime olmalıdır.

Dosya formatını seçme

Symfony'de özellikle Yaml formatına bağlı olarak, bu noktanın anlaşmazlıkları artıracağını tahmin ediyorum. Sensio, uygulamalarda Yaml formatının kullanılmasını tavizsiz bir şekilde önerir. Geliştirilen paketler iki biçim arasında paylaşılır: XML ve Yaml.

Sensio ikincisini önermeye karar verdi çünkü daha fazla " kullanıcı dostu ". Başka bir biçim kullanmak, uygulamanızın çalışma şeklini değiştirmez.

Hizmetlerinizin beyanı için bir değişken tanımlamayın

Bu, belirli paketlerde çokça göreceğiniz bir uygulamadır ve yine de Sensio sizi uyarmaktadır. İşte verilen örnek yemek kitabı :

1
2
3
4
5
6
7
8
#app/config/services.yml
# hizmet defiparametre olarak sınıf ad alanıyla nition
parametreleri:
slugger.class: AppBundleUtilsSlugger
hizmetler:
sümüklü böcek
sınıf:
"%slugger.class%"

İşte işe yaramaz bir kod örneği. Bir hizmet için kullanılacak sınıfı bildirmek bir hatadır, çünkü bu değişken muhtemelen kodun başka bir yerinde kullanılabilir. Ek olarak ve Sensio'nun belirttiği sebep bu, hizmetin oluşturulmasına ağırlık veriyor.

ORM'nin seçimi

Sensio, Symfony içinde Doctrine ORM'nin kullanılmasını önerir. Bir Doctrine kullanıcısı olarak, Symfony'ye entegrasyonu çok gelişmiştir. Bu, projelerimizin mantıksal organizasyonunu yeniden başlatan bir öneriyle sonuçlanır. Varlık bildirimi, mantığı bir paket içinde tutmalıdır. 18. sayfadaki örneğe bakın.

Eşleme beyanı

Doktrin eşleme beyanı, tercihen Doktrin çerçevesinde ve diğer uygulamalar için önerilen açıklamalar kullanılarak yapılmalıdır.

Varlık eşlemesini bildirmek için ek açıklamaları kullanın.
Sayfa 19'da bir örnek verilmiştir.

Armatürlerin montajı

Sensio, öne sürmeden armatürlerin kurulmasını tavsiye eder. Deneyimsiz olanlar için bunlar, varsayılan olarak uygulamayı üretime geçmeden önce başlatmak için kullanılacak veri kümeleridir.

Kodlama standartları (4. bölümün sonu)

Bu, Sensio'nun garip bir şekilde neredeyse gölgede bıraktığı bir kısım. Benim için önemli bir parça olduğu için garip bir şekilde söylüyorum.

Symfony, PSR1 ve PSR2 standartlarına göre kodlanmıştır. Bu standartlar, Symfony geliştiricileri topluluğu içinde ve aynı zamanda PHP geliştiricileri arasında tanıtılmalıdır. Symfony, " Kodlama Standartları ". Sensio'nun lideri Fabien Potencier, standartlara uygunluğu kontrol etmek için GitHub'a da bir araç koydu.

Kontrolörler

Kontrolörler söz konusu olduğunda, Symfony'nin ph'ıilosophie "zayıf denetleyiciler ve şişman modeller". Bu, denetleyicilerin hafif kalması gerektiği anlamına gelir. Bir rota üzerinden erişilecek her yöntem (eylem) bir eylemi temsil eder. Bu yöntemlerin her biri için kod "hafif" olmalı ve eylemleri çağırmalı ve koordine etmelidir. Bu paylar hizmetlerde olmalıdır.

Bu model, uygulama kodlarını/parçalarını kullanan bir denetleyici sunar.

Bir denetleyicinin birkaç kurala uyması gerekir

  • Bir kontrolörün maksimum 5 değişkeni olmalıdır.
  • Bir denetleyicinin maksimum 10 eylemi vardır.
  • Her eylem en fazla 20 satır içermelidir.
    • Bir yöntem, kullanılan kodun çarpanlarına ayrılamaması koşuluyla 20'den fazla satır içerebilir.

      Bir denetleyici, Sensio'nun FrameworkBundle temel denetleyicisini devralmalı ve yolları, önbelleğe almayı ve güvenliği yönetmek için ek açıklamaları kullanmalıdır.

      Ek açıklamaların kullanılması önerilir, ancak XML, YAML veya PHP kullanımı da geçerlidir. Uygulama yalnızca tek bir biçim kullanmalıdır.

@Template'i kullanmayın

Bu, daha az beklenmedik olanlar için bir tavsiyedir ve yine de açıklama özellikle güçlüdür.

Denetleyici tarafından kullanılan şablonu yapılandırmak için @Template() açıklamasını kullanmayın
Açıklama basittir, @Template, olay gerçekleştiğinde çağrılan bir TemplateListener kullanır. çekirdek.görünümü Atıldı.
Bu belgenin üretimi sırasında bir test gerçekleştirilmiştir. @Template'in kullanımı, nesli başlatmadan önce 26 ms sürerken, aynı sayfa için " $this->render(…) », 5 milisaniye bekleme süresi.

ParamConverter açıklamasını kullan

Bu ek açıklamanın kullanılması, bir varlığın hidrasyonunun otomatikleştirilmesini mümkün kılar.

ParamConverter numarasını kullanmak, basit ve kullanışlı olduğunda iyidir.

Şablonlar

Bölüm 6, şablon oluşturmanın ayrıntılarını verir. Birkaç tavsiyenin ardından belgenin bize verdiği şey sorunsuz.

  • Twig şablon motorunu kullanın
    Sensio, Twig'i birçok nedenden dolayı önerir. olmanın yanı sıra motor Hem PHP geliştiricileri hem de PHP topluluğu tarafından yaygın olarak kullanılır sıfırdan, yalnızca Symfony geliştiricileri ve diğer çerçeveler tarafından. Sadelik vurgulanır ve ürünlerinin tanıtımı açıkça görülür. Son olarak, Sensio, Symfony için sürüm 3'e kadar desteği garanti eder. Ayrıca, sürüm 3'e geçmek üzere kodunuzu hazırlamak için yapılacak ilk geçişleri de bulabilirsiniz.
  • Uygulama şablonlarını şurada saklayın: uygulama/Kaynaklar/görünümler.
    Varsayılan olarak, geliştiriciler şablonlarını klasörde saklamaya alışmışlardır. Kaynaklar her paketin Bu kötü bir şey değil ama Fabien Potencier, uygulamanız için global şablonları yukarıda belirtilen klasörde saklamanızı önerir.
  • Twig uzantılarınızı şurada tanımlayın: AppBundle/Twig ve içindeki hizmetleri yapılandırın app/config/services.yml.
    Dal uzantıları zayıf görünürlükten muzdariptir. Bu uzantılar, her ne kadar çok yararlı olsa da, bazen çok sistematik olarak kullanılmaktadır. Sensio, gerekli bulduğum bu kısmı, iş kodunu şablonlarına enjekte etmenin bir yolu olarak sunuyor. Bir Twig uzantısının nasıl bildirileceğini okumanızı tavsiye ederim.

Formlar

Bölüm 7 bize formları kullanmayla ilgili yönergeler veriyor.

  • Formlarınızı PHP sınıflarında tanımlayın.
    Symfony, belirli varlıklar için formların otomatik olarak oluşturulmasına izin veren PHP sınıfları oluşturma olanağı sağlar. ONLAR Formlar adlandırıldıkları gibi, tam entegrasyon sunar. Varlıkların değiştirilmesine yardım edilir. Ek olarak, Formların kullanılması, form yönetiminin şablonlardan alınmasını mümkün kılar.
  • Formunu göndermek için bir düğme beyan etmeyin.
    Bu özellik Symfony 2.5'te tanıtıldığı için bu şaşırtıcı bir noktadır. Bu satırların yazıldığı sırada Symfony 2.6 kabul edilme sürecindedir ve bu nedenle henüz resmi olarak yayınlanmamıştır. Bu nedenle, bu işlevin kullanışlılığı hakkında bazı sorular sorabiliriz, kullanılmamalıdır!Düğmeleri Formlar yerine şablonlara ekleyin, neden?
    Sensio ekibi yaptığı açıklamada, bu özelliğin aynı kalmasına rağmen "Kullanıcı dostu" ve formların uygulanmasını basitleştirdiği için bazı işlevler sınırlı kalır.
    Örneğin, türünde bir düğme eklerseniz sunmak "Oluştur" etiketiyle, bu form bir düzenleme sayfası için yeniden kullanılamaz. Daha sonra, formunuzu bir kalıtım gerçekleştirmek için bir hizmet olarak bildirmeniz gerekecek, bu biraz daha aşağıda tavsiye edilmemektedir.
  • Twig işlevlerini kullanmayın biçim() ve _formBaşlat().
    Şablonların işlenmesine ayrılmış bir bölüm oluşturuldu. Bize Twig işlevlerinin kullanımının biçim() Ve _ form_start()_ kullanımdan kaldırıldı. Bir kez daha, bu işlevler daha yeni kullanıma sunulduğundan, bu benim için bir hata.
    Symfony'de bir formu işlemenin birkaç yolu vardır. Oluşturmanın farklı yollarından en iyi yol, maksimum esneklik sunandır.
    Yukarıda listelenen Twig işlevlerini kullanmak çok az fayda sağlar. Sensio, yerel HTML etiketlerini kullanırken artan okunabilirlikten bahsediyor. Bu argümana rağmen, bu küçük bir faydayı temsil ediyor… Çok küçük!

Formlarınızı hizmet olarak bildirin

Formlar, bir hizmet olarak bildirilebilecekleri anlamına gelen PHP sınıflarıdır. Bu yöntemi şu paketlerde görebileceksiniz: Symfony'nin Arkadaşları. Bu yöntem, aşağıda alıntıladığım belirli durumlar dışında Sensio tarafından önerilmez:

  • Mevcut formları yeniden kullanmak istiyorsanız. İki form arasında kalıtımın ayarlanması, tüm özniteliklerin yeniden yazılmasını sınırlamayı mümkün kılar.
  • Varlık koleksiyonlarını gömmek istiyorsak.
    Form ekleme veya düzenleme durumunda formların hizmet olarak kullanılması önerilmez çünkü bir hizmetin kullanılması @konteyner. Üstelik bu servisin bir kontrolör tarafından kullanıldığını anlamak zor olacaktır.

Formlarını iliştirin (bağlayıcı)

Son zamanlarda Sensio, Symfony2 kodunun gelecekteki Symfony3 koduna sürekli geçişine başladı. Yapılabilecek değişikliklerin listesi arasında (hepsini UPGRADE-3.md'de bulabilirsiniz), yeni çözüm cilt ile bir form tarafından gönderilen istek Airdrop Formu hangi yaratıldı. Yeni metodoloji, kılavuzun 21. sayfasında ayrıntılı olarak açıklanmıştır. En İyi Uygulamalar.

Sunulan alıntıyı seslendirin:

1
2
3
4
5
6
7
8
9
10
11
12
13
halka açık işlev yeniEylem(İstek $istek)
{
// formunuzu oluşturun
$form->handleRequest($request);
if ($form->isSubmission() && $form->isValid()) {
$ em = bu $->konteyner->al("doctrine.orm.default_entity_manager");
$em->persist($post);
$em->flush();
dönüş bu $-> yönlendirme (bu $->oluşturUrl("admin_post_show"), dizi("İD" => $post->getId()));
}
}

uluslararası

Uluslararasılaştırma modülünün amacı, kullanıcının bölgesine veya diline bağlı olarak içeriği bir dilden diğerine çevirmektir. Bu bölüm, tavsiye verilerinden daha çok, her zaman hassas kalan bu kısımdaki olasılıkları göstermek için yazılmıştır.

Bölüm 8'de editörler, çeviri.

biçim ne olacak

Symfony çok sayıda çeviri formatı sunar:

  • PHP
  • Qt
  • .po
  • .mo
  • JSON
  • CSV
  • BU
  • Ve bircok digerleri

    Çeviri dosyalarınız için XLIFF biçimini kullanın.
    Bu alıntı açıkça bir Sensio tavsiyesidir. Evet ama neden ? Bize kısa ve kesin bir cevap verilir.
    Desteklenen tüm biçimler arasında yalnızca XLIFF biçimi ve gettext biçimi profesyonel çeviri araçları tarafından desteklenir. XLIFF, XML tabanlı olduğundan, içerik doğrulamasından yararlanır.
    Symfony 2.6, XLIFF dosyalarınızda "yorum yapmanıza" (notlar eklemenize) izin veren yeni bir özellik getiriyor. Bu büyük bir yenilik çünkü çeviri dosyalarının oluşturulması, çevirmenlerin bir cümlenin anlamını veya kullanıldığı bağlamı anlamasında sorunlara neden olabilir. Kısacası, XLIFF iyidir!

Çeviri dosyalarımızı nerede saklayacağız?

Bu soru bir tanıtır En iyi pratik. Sensio, dosyalarımızı şu klasörde saklamanızı önerir: uygulama/Kaynaklar/çeviriler.

Genellikle çevirilerimizi paketlerimizin her birinde saklardık. Bu kötü bir şey değildi, ancak çeviriler de genel olarak uygulamalarımızın küresel parçaları olarak kabul edilir, tıpkı küresel şablonlar gibi, bu nedenle Sensio bunları şu adreste saklamamızı önerir: uygulamayı yükleyeceğiz.

Uygulamalarımızı nasıl çeviririz?

İçeriğinizi çevirmek için her zaman tuşları kullanın.
Bu konuda En iyi, Uygulamaları çevirme fırsatım çok az olduğu için fikrimi söylemeyeceğim. Sensio, "Kullanıcı adı" gibi bir kelimeyi çevirmek için şunun gibi bir anahtar kullanmanız gerektiğini tavsiye ediyor: etiket.kullanıcı adı.

35. sayfada bir örnek verilmiştir.

Güvenlik

Kitabın 9. Bölümü, Symfony'nin merkezi bir bölümüyle ilgilidir; Güvenlik !

Symfony, uygulamalarımıza bağlanmak isteyen kullanıcıları kolayca yapılandırmak ve doğrulamak için tasarlanmıştır. Bu kısım çok karmaşık ve ayrıntılarla dolu, bu yüzden kaba bir taslak. Özel sayfada daha fazla belge bulabilirsiniz.

Güvenlik duvarlarınızı bildirin

Konfigürasyon seçenekleri dosyaya girilmelidir. güvenlik.yml hangisi içinde uygulama/yapılandırma.

Uygulamanızla (sistem ve kullanıcılar) iki farklı bağlantınız olmadığı sürece, anonim seçeneği etkinken yalnızca bir giriş güvenlik duvarı kullanmanızı öneririz.
Vay vay vay! Bekle, Symfony'ye geldim, hiçbir şey anlamadım!

Güvenlik duvarı nedir?

Symfony'de yerel kimlik doğrulamanın nasıl bildirileceği ve ayarlanacağı hakkında Wanadev'de yapılmış bir makale bulabilirsiniz. Bu yazıda güvenlik duvarı nedir detaylı olarak anlatılmıştır.

Tek bir güvenlik duvarı mı? Neden bir ?

Yukarıda bağlantısı verilen makaleyi yeni okuduysanız, birkaç güvenlik duvarının bildirildiğini fark etmiş olabilirsiniz.

Söz konusu haberde üç isim yer alıyordu. dev, ana et giriş. Buna rağmen, verilen kurala uyulur, yalnızca bir güvenlik duvarı ağ geçidi olarak kabul edilebilir.

  • dev : bu güvenlik duvarı izin verir hata ayıklama çubuğu göstermek.
  • ana : bu güvenlik duvarı bizim GİRİŞ NOKTASI. Anonim kullanıcılar, kurala saygı duyuyormuş gibi oturum açabilecektir. / ile başlayan tüm rotalar bu girişi kullanacaktır.
  • giriş : Bu bir güvenlik duvarıdır. Bu, tek bir durumda ağ geçidimiz olacak: eğer bağlanmak istiyorsak. Bu, bir oturum açma formuna erişebilmek için gereklidir.
    Bu nedenle kurala saygı duyulur.

Bir kodlama tanımlayın

Parolaları kodlamak önemli bir karardır. gibi çoklu algoritmalar mevcuttur. sha (sha1, sha256, sha512, md5...).

Bir kodlama bildirilirken (kodlamanın nasıl bildirileceğine bakın), üç parametre verilebilir.

  • Şifreleme algoritması (varsayılan: sha512);
  • Yineleme sayısı (varsayılan olarak: 5000);
  • Kodlama, kodlanmış parolanın base64'üdür (varsayılan: true).
    Sizi uygulamalarınız için değiştirmeye davet ettiğim bu varsayılan değerlere rağmen. Sensio ayrıca algoritmanın kullanılmasını önerir. bcrypt.

    Kullanıcı parolalarını şifrelemek için bcrypt kodlamasını kullanın.
    Sensio, bcrypt'in nasıl kullanılacağını açıklıyor. Bu içerir tuzlama değer. Bu, saldırıları sınırlar ve kaba kuvvet tipi saldırılara karşı daha dirençlidir. Yukarıdaki Wikipedia makalesinde daha fazla ayrıntı bulabilirsiniz.

İzinleri ayarla

Bir bağlantı sırasında, Symfony hangi güvenlik duvarının kullanılması gerektiğini saptar. Ardından ve hatta kontrolöre erişmeden önce bir erişim kontrolü gerçekleştirilir. Dosyada tanımlanmışlar güvenlik.yml,

Sensio'nun önerileri:

  1. "uç URL kalıplarımızı" koruyun, global kalıplarımızı anlayın (örnek: /admin);
  2. Ek açıklamaları kullan @Güvenlik mümkün olduğunca;
  3. Hizmet aracılığıyla bir kullanıcının haklarını kontrol edin güvenlik.bağlam (Symfony 2.6'dan beri hizmet gelişti, buraya bakın);
  4. Yol güvenliğini kolayca yönetmek için seçmenleri tanımlayın;
  5. Kullan ACL nesne ve kullanıcı haklarını yönetmek için.

@Security ek açıklamalarını kullanın

Sensio, @Security ek açıklamasını kullanmanızı önerir.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
kullanım sensiodemetÇerçeveEkstraBundleyapılandırmaRota;
kullanım sensiodemetÇerçeveEkstraBundleyapılandırmaGüvenlik;
//…
/ **
* Yeni bir Gönderi varlığı oluşturmak için bir form görüntüler.
* @Yol(“/yeni”, ad=”admin_post_new”)
* @Güvenlik("has_role('ROLE_ADMIN')")
*/
halka açık işlev yeniEylem()
{
//…
}

Kısıtlamaları daha karmaşık hale getirmek için ifadeleri kullanın

Sensio bize, bu ek açıklamanın, iki nesne arasında iki özniteliğin karşılaştırılması gibi daha karmaşık koşulların oluşturulmasını da mümkün kıldığını açıklıyor. Bu ek açıklama kullanımını gerektirebilir Param Dönüştürücü.

Belgede daha fazla bilgi bulabilirsiniz:

  • İfadeler Oluştur
  • Nitelikleri nesnelere dönüştür

Twig'de erişim güvenliği

Bağlı kullanıcıyı bir nesnenin kullanıcısı ile karşılaştırmak isterseniz, Twig'den erişebilirsiniz. kullanıcı Devam eden.

1
2
3
{% if uygulama.kullanıcı … %}
...
{% endif %}

Güvenliğinizi kolayca yönetin

Güvenliği yönetmek genellikle hassas bir bölümdür ve kodumuzu düzenlemek, uygulamamızı başarılı bir şekilde güvenli hale getirmenin önemli bir parçasıdır. Kullanımı Seçmenler Şiddetle tavsiye edilir. Kodunuzu düzenlemenin diğer yolları düşünülebilir. Örneğin bir kararı varlığımızın bir metoduna aktarabiliriz.

Sensio örneğini 40. sayfada görüntüleyebilirsiniz.

Bu kısım, Symfony'nin sunduğu olanaklara kıyasla çok az detaylandırılmıştır. Bir güvenlik göreviyle karşı karşıya kalırsanız, bu bölümle ilgili biraz daha fazla belge okumanızı tavsiye ederim.

Web Varlıkları

Varlıklar, sayfalarınızdan erişilebilmesi için Javascript, CSS, fos yazı tipleri, resimler gibi kaynakları yönetmemizi sağlar.

Varlıklarınız web/ klasöründe saklanmalıdır
Bu şekilde, kaynaklarınızı şu şekilde şablonlarınıza yükleyebilirsiniz:

1
2
<Link rel="stil sayfası" href=« {{ asset(‘css/bootstrap.min.css’) }}«  />
<senaryo src=« {{ asset(‘js/jquery.min.js’) }}« ></senaryo>

Ortak web klasörünü ve içinde depolanan her şeyi saklayın.

Assetic'i kullan

Assetic'in dosya derleme gibi birçok ilgi alanı vardır. Örneğin, Less, Sass, TypeScript dosyaları… Bu nedenle klasör dosyalar gibi dosyalar içeremez .az.

GruntJS kullanmıyorsanız varlıklarınızı derlemek, birleştirmek ve küçültmek için Assetic'i kullanın.

Assetic hakkında daha fazla bilgi edinin

Assetic, bazı dezavantajlara rağmen eksiksiz bir araçtır. Aşağıdaki bağlantıları kullanarak bu modülle ilgili belgeleri bulabilirsiniz:

  • Assetic'i kullan
  • CSS ve JS'yi küçültün
  • Görüntüleri sıkıştır
  • Resmi belgelere bakın

testleri ayarla

Test, çoğu geliştirici tarafından gerekli olarak kabul edilir. Ancak sadece bir azınlık bunları uyguluyor.

Sensio'nun testlerimizi gerçekleştirmemizi nasıl tavsiye ettiğini göreceğiz.

Birim testleri gerçekleştirin

Birim testleri, uygulamanızın mantığını test edecek fonksiyonel testleri gerçekleştirmek için kullanılır. Symfony, testlerinizi test etmek için belirli bir araç belirlememiştir. Aletler PhpBirimi et PhpSpec alıntı yapılır.

İşlevsel testler gerçekleştirin

İşlevsel testleriniz için iyi senaryolar oluşturmak çok önemlidir ve yine de geliştiriciler bunları uygularken hızla sorunlarla karşılaşır.

Sayfanızın doğru şekilde yüklenip yüklenmediğini test etmek için bir işlevsel test tanımlayın.

Oluşturucu aracılığıyla oluşturmak yerine sabit kodlanmış URL'leri kullanmayı deneyin.

JavaScript işlevselliğini test edin

Gibi birçok araç var Vizon (bir PHPUnit kitaplığı) ve Casper JS.

Veri kümeleri oluştur

Bu genellikle veri kümeleri oluşturan geliştiriciler için bir endişe kaynağıdır.

Sensio kitaplıkların kullanılmasını önerir numaracı et atış.

Sonuç

Bu makale şu adresten alınmıştır: En İyi Uygulamalar için Symfony'nin. Bu makale, basit olmakla birlikte, yeni Symfony geliştiricilerine rehberlik etmek için 50 sayfalık tavsiyeyi incelemeyi amaçlamaktadır.

★ ★ ★ ★ ★