Symfony 4: En İyi Uygulamalar

Bir projenin herhangi bir büyük versiyonu en iyi uygulamalarını tekrar ziyaret etmek için bir fırsattır. Onları modernize ediyor. Bunları projenin yeni özelliklerine uyarlama. Symfony 4 istisna değildir.

Önce standardizasyon

Symfony 4, daha standart araçları kullanmaya çalışan mevcut uygulamaların bir evrimi olacak.

Symfony, PHP ve web standartlarını benimsemek için çabalıyor. Besteci'nin olmadığı bir zamanda Symfony 2'nin başladığına inanmak zor. O zamandan beri, PHP topluluğu birkaç öneride bulunan Fig grubunu başlattı. Symfony, PSR'lerin çoğunu benimseyen, geriye dönük uyumluluk kırmadan ilk büyük çerçevelerden biriydi. PSR-3 yıllar önce giriş yapmak için. Otomatik yükleme için PSR-4. Daha yakın zamanlarda, önbellekleme için PSR-6. Symfony'nin bir sonraki sürümü olan 3.3 sürümü, önbellekleme için PSR-16'yı ve konteynerlerin birlikte çalışabilirliği için yepyeni PSR-11'i uyguluyor. PSR-13 için bir kullanım durumumuz bile olabilir.

Standartları kullanmak birlikte çalışabilirlik konusunda yardımcı olur, aynı zamanda kodunuzu çerçeveden ayırma konusunda da yardımcı olur.

Paketsiz Uygulamalar

Paketsiz uygulamalara geçiş, önceki blog gönderisinde açıklandı. Mevcut en iyi uygulamalar setinde önemli bir değişiklik olduğu için burada tekrar söylüyorum.

Ortam Değişkenleri

Mevcut Symfony en iyi uygulamalar kitabı, bir Symfony uygulamasında yapılandırma ayarlarının nasıl oluşturulacağını çok ayrıntılı olarak açıklamaktadır. Altyapı ile ilgili yapılandırma için app / config / parameters.yml, uygulama ile ilgili yapılandırma için app / config / config.yml kullanıldığında.

Mümkün olduğunca app / config / config.yml kullanmaktan kaçınmak için tavsiye verdiğim kadar ileri giderdim. Geçerli kullanım durumları var, ancak bir yandan onları sayabilirim.

Symfony 4, app / config / parameters.yml eşdeğerine sahip olmaz. Bunun yerine ortam değişkenlerini kullanın. Çoğu çerçevenin başka dillerde de yaptığı şey budur. Bu aynı zamanda 12 Faktör Uygulama Manifestosu'nun önerilerinden biridir. Biri birçok modern barındırma platformu tarafından teşvik edilmektedir.

Çevre değişkenlerini kullanmak, mükemmel olmaktan uzak, şu anda yaptığımız işlerden çok yarar sağlıyor. Ortam değişkenleri, çevreye bağlı olan ayarları yönetmenin daha “standart” bir yoludur (örneğin, bir parametreyi yönetmenize gerek yoktur). Ortam değişkenleri kodunuzdan, çerçeveden ve dilden bağımsız oldukları için birkaç uygulama tarafından okunabilir. Ortam değişkenleri, kodunuzdan çıkarıldığı için salt okunur dosya sistemi dağıtımına yardımcı olur. Ortam değişken değerleri, uygulamanızı yeniden dağıtmadan (dinamik bir şekilde "Symfony önbelleğini temizlemeden) değiştirilebilir. Son fakat en az değil, ortam değişkenleri mevcut araçlar tarafından yönetilebilir.

Sırları çevre değişkenlerine kaydetmenin bir yapılandırma dosyasına kaydetmekten daha “güvenli” olmadığını unutmayın.

Ortam değişkenlerini kullanmak geliştirme açısından hantal olabilir, “standart” bir .env dosyası kullanmak daha kolay ve tavsiye edilir. Symfony 3.3, Symfony 4 uygulamalarında varsayılan olarak kullanılacak yeni bir Dotenv bileşeni ile birlikte gelir. Bir .env dosyası ve "gerçek" ortam değişkenleri arasında geçiş otomatik ve şeffaf bir şekilde yapılacaktır.

Size daha iyi hissettiriyorsa, ortam değişkenlerini parameters.yaml dosyasında da tanımlayabileceğinizi unutmayın. Yine de önerilen yol bu olmayacak. Parameters.yaml parametresinin bir yazım hatası olmadığını unutmayın. Bu, daha sonraki bir makalede ele alınacak olan Symfony 4'teki başka bir değişikliktir.

Güzel bir yan etki olarak, Symfony ortamının ve hata ayıklama bayrağının hem konsol hem de web uygulamaları tarafından nasıl yönetildiğini basitleştirmeye yardımcı olur.

Şu anda, Symfony konsol aracı, --env ve --no-debug bayraklarını kullanarak çevreyi ve hata ayıklama bayrağını alabilir. Veya alternatif olarak SYMFONY_ENV ve SYMFONY_DEBUG ortam değişkenleri aracılığıyla.

Symfony 4 ile artık buna ihtiyaç yok. APP_ENV ve APP_DEBUG, hem web ön kontrolörü hem de konsol aracı için kullanılabilir.

Artık ./bin/console foo: bar - env ​​= prod - no-debug veya SYMFONY_ENV = prod SYMFONY_DEBUG = 0 ./bin/console foo: bar. Sadece ./bin/console foo: bar kullanın.

Sadece işe yarıyor. Geliştirme ve üretim sunucularında.

Symfony 4 bu tür basitleştirmelerle doludur.

Birleşik Web Ön Denetleyicisi

Symfony 3, iki ağ ön denetleyicisine sahiptir. Bir üretim için optimize edilmiş. Bir geliştirme için optimize edilmiş. Symfony 4 sadece bir tane kullanır. Geliştirme web ön denetleyicisini artık kaldırmanıza gerek yok. Eğer unutursan daha fazla güvenlik sorunu olmaz.

Kodun öncekinden daha karmaşık olduğunu düşünürsünüz. Pek çok “eski” kodu kaldırabildiğimiz için durum böyle değil. Çevre değişkenleri sayesinde. PHP 7 ve önyükleme ve sınıf önbelleklerinin kaldırılması sayesinde. Belirli bir otomatik yükleyiciye olan ihtiyacı ortadan kaldıran Symfony 3.3 sayesinde.

Makefile

Birçok projenin bazı özel komut dosyaları vardır: ünite veya entegrasyon testlerini çalıştırmak için bir sarmalayıcı, PHP yerleşik sunucusunu çalıştıran bir komut dosyası ve daha fazlası. Symfony konsolu komutu yazmanın bir anlamı yoktur.

Kolaylık olması için bunları uygulama composer.json dosyanızda tanımlamış olabilirsiniz. Silex, PHP yerleşik sunucusunu çalıştıran bir komut dosyası girişi ile bunu yapar. Ancak bu, zaman aşımına uğrayan veya ANSI çıkış kodlarını desteklemeyen birçok sorunla birlikte gelir.

Komutları merkezileştirmek, keşfedilebilirlik konusunda yardımcı olur Bunun yerine Makefile kullanmaya ne dersiniz? Bu belki de Symfony 4'ün en tartışmalı özelliği. İleri geri gittim. Ancak bunun çok değerli olduğuna ve bazı sorunların çözülmesine yardımcı olduğuna inanıyorum.

make iyi bilinen bir "standart" araçtır. Composer tarafından yürütülen senaryolardan daha güçlüdür. PHP'ye dayanmaz. Dağıtımı kolaylaştırmak, uzak sunuculara SSH aracılığıyla bağlanmak, Blackfire test senaryosunu çalıştırmak için kullanın. Npm, gulp, webpack'i çalıştırmak için kullanın. Symfony komutlarını kullanmanın pratik veya istenmediği görevler.

Paralel tarifler uygulamasından kar edin. Hiçbir şey değişmediyse görevleri çalıştırmayın. Yapmak güçlü.

Bir örnek alalım, önbellek temizleme. Symfony, önbelleği temizleme ve ısınma komutuna sahiptir. Her ikisini de aynı işlemde yapmak, PHP değiştirildiyse bir sınıfı yeniden yükleyemeyeceğinden iyi çalışmaz. Ancak bunu make ile yapmak kolaydır:

önbellek net:
  test -f bin / console && bin / console önbelleği: clear --no-warmup || rm -rf var / önbellek / *
.PHONY: önbellek temizle
önbellek ısınma: önbellek temizle
  test -f bin / console && bin / console önbelleği: warmup || echo "önbelleği ısıtamıyor (symfony / console gerekiyor)"
.PHONY: önbellek ısınma

Başka bir örnek olarak, PHP projelerimin çoğunda Blackfire testlerini çalıştırmaya yardımcı olan iki görev var:

bf-dev:
   blackfire-player --endpoint = http: // `bin / konsol sunucusu: status --filter = adres` çalışma testleri / bkf / all.bkf
.FONY: bf-dev
bf-prod:
  blackfire-player --endpoint = https: //twig.sensiolabs.org çalışma testleri / bkf / all.bkf --variable = "env = prod"
.FONY: bf ürünü

Bir uygulamaya “bakım” moduna geçmek ister misiniz? Bir Symfony komutu değil, make kullanın.

Varlık Yönetimi

Assetic, Symfony Standard Edition 3.0'da çıkarıldı. JavaScript dünyası hala “standart” bir araç üzerinde çalıştığından, şu anda herhangi bir değişiklik önermiyoruz. Ancak Symfony 4 bir öneride bulunacak ve bazı derinlemesine entegrasyon sağlayacaktır. Birkaç hafta içinde daha fazlası. Yine de, varlıkların sembolik olarak demetlerden web'e / paketlere / varlıklar yoluyla kopyalandığını / kopyalandığını desteklediğimizden bahsetmek istedim: install, ancak bu muhtemelen Symfony 5'e dayanamayacak bir şeydir. Özellikle paketsiz bir uygulama yapısına sahip olduğumuz için şimdi.

Yeni en iyi uygulamaların desteklenmesi, bir sonraki konunun konusu olan dizin yapısı üzerinde bir miktar etkiye sahiptir. Bizi izlemeye devam edin!

Başlangıçta fabien.potencier.org de yayınlandı.