Symfony Flex’i kullanarak Symfony Uygulamalarını Yönetmek
Symfony Flex, Symfony uygulamalarını kurmanın ve yönetmenin yeni yoludur. Flex, yeni bir Symfony sürümü değildir, Symfony Installer’ı değiştiren ve geliştiren bir araçtır.
Symfony Flex, bundle’ları ve diğer bağımlılıkları kurma ve kaldırma gibi Symfony uygulamalarının en yaygın görevlerini otomatikleştirir. Symfony Flex, Symfony 3.3 ve daha yeni sürümleri için çalışır. Symfony 4.0'dan başlayarak Flex varsayılan olarak kullanılacaktır, ancak kullanımı yine de isteğe bağlı olacaktır.
Flex Nasıl Çalışır
Symfony Flex, require ve update komutlarının davranışını değiştiren bir Composer eklentisidir. Flex özellikli bir uygulamaya bağımlılık yüklerken veya güncellerken Symfony Flex, Composer çalışmasından önce ve sonra çalışır.
Aşağıdaki örneği inceleyelim:
$ cd my-project/
$ composer require mailer
Bu komutu Flex kullanmayan bir Symfony uygulamasında çalıştırırsanız, mailer
in geçerli bir paket adı olmadığını açıklayan bir Composer hatası görürsünüz ancak eğer Symfony Flex’i yüklü ise bu komut Symfony uygulamaları için resmi mailer olan Swiftmailer’i bütünleştirmenin en iyi yolu olan SwiftmailerBundle’ı kurup etkinleştirir.
Symfony Flex ile uygulamaya yüklendiğinde ve composer require
ile uygulama Composer ile paketi kurmaya başlamadan önce Symfony Flex sunucularına bir istekte bulunur:
- Paket hakkında hiçbir bilgi yoksa, Flex sunucusu hiçbir şey döndürmez ve paket yüklemesi Composer temelli olağan prosedürü izler;
- Paketle ilgili özel bilgiler varsa Flex bunu “recipe” adlı bir dosyaya döndürür ve uygulama hangi paketin yükleneceğine ve yükleme sonrasında hangi otomatik görevlerin çalıştırılacağına karar vermek için kullanır.
Yukarıdaki örnekte, Symfony Flex mailer paketini sorar ve Symfony Flex sunucusu mailer’in aslında SwiftmailerBundle için bir takma ad olduğunu algılar ve bunun için “recipe” döndürür.
Symfony Flex Recipes(Tarifler)
Tarifler manifest.json
dosyasında tanımlanır ve istediğiniz sayıda başka dosya ve dizini içerebilir. Örneğin, SwiftmailerBundle için manifest.json
:
{
"bundles": {
"Symfony\\Bundle\\SwiftmailerBundle\\SwiftmailerBundle": ["all"]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"MAILER_URL": "smtp://localhost:25?encryption=&auth_mode="
},
"aliases": ["mailer", "mail"]
}
Takma ad seçeneği Flex’in kısa ve anlaşılması kolay isimleri kullanarak paketleri yüklemesine olanarak tanır. (composer require mailer
vs composer require symfony/swiftmailer-bundle
). bundles
seçeneği Flex’a hangi ortamların otomatik olarak etkinleştirileceğini Flex’a bildirir. env
seçeneği Flex’i uygulamaya yeni çevre değişkenleri eklemeye zorlar copy-from-recipe
taramanın dosyaları ve dizinleri uygulamanıza kopyalamasına izin verir.
Bu manifest.json
dosyasında tanımlanan talimatlar, Symfony Flex tarafından tüm değişiklikleri geri almak için bağımlılıkları kaldırırken (ör. composer remove mailer
) kullanılır. Bu, Flex’in SwiftmailerBundle’ı uygulamadan kaldıracağı veMAILER_URL
çevre değişkeninin ve bu tarif tarafından oluşturulan diğer tüm dosyaları ve dizini silebileceği anlamına gelir.
Symfony Flex tarifleri topluluk tarafından sağlanır ve iki ortak depoda saklanır:
- Ana tarif deposu(Main recipe repository), kaliteli ve bakımlı(maintained) paketler için hazırlanmış tariflerin bir listesi. Symfony Flex sadece varsayılan olarak bu havuza bakar.
- Topluluk tarif deposu(Contrib recipe repository), topluluk tarafından oluşturulan tüm tarifleri içerir. Hepsinin çalışması garanti edilir, ancak ilişkili paketleri düzenlenemez. Symfony Flex bu tarifleri varsayılan olarak yoksayar, ancak projenizde bunları kullanmaya başlamak için bu komutu çalıştırabilirsiniz:
$ cd your-project/
$ composer config extra.symfony.allow-contrib true
Kendi paketleriniz için nasıl tarif oluşturulacağı ilgili her şeyi öğrenmek için Symfony Tarifler belgelerini okuyun.
Yeni Uygulamalar’da Symfony Flex’i Kullanma
Symfony, yeni uygulamalar oluşturmak için önerilen minimal bir Symfony projesi olan yeni bir “skeleton” projesi yayınladı.
$ composer create-project symfony/skeleton my-project
Symfony 3.3'den beri yeni uygulamalar oluşturmak için Symfony Installer’ın kullanımı artık önerilmez bunun yerine, Composer create-project komutu kullanın.
Varolan Uygulamaları Flex’a Yükseltme
Symfony Flex’i kullanmak opsiyoneldir. Flex’in varsayılan olarak kullanılacağı Symfony 4'de bile isteğe bağlıdır ancak verimliliğinizi arttırmak için şiddetle mevcut uygulamalarınızı yükseltmek tavsiye edilir.
your-project/
├── Makefile
├── config/
│ ├── bundles.php
│ ├── packages/
│ ├── routes.yaml
│ └── services.yaml
├── public/
│ └── index.php
├── src/
│ ├── ...
│ └── Kernel.php
├── templates/
└── vendor/
Bu uygulamanıza symfony/flex
bağımlılığının yüklenmesinin yeterli olmadığı anlamına gelir. Ayrıca dizin yapısını yukarıda gösterilen dizine yükseltmelisiniz bu yükseltmeyi yapmak için otomatik bir araç mevcut değildir bu nedenle alttaki manuel adımları izlemelisiniz:
- Yeni bir boş symfony uygulaması oluşturun (composer create-project symfony/skeleton my-project-flex)
- Yeni projenin
composer.json
dosyasına orijinal projenincomposer.json
dosyasında tanımlanmışrequire
verequire-dev
bağımlılıklarını kopyalayın. - Yeni projenizde
composer install
çalıştırarak bağımlılıkları yükleyin. Bu Symfony Flex’in ayar dosyalarınıconfig/packages/
altında oluşturmasını sağlayacaktır. - Oluşturulan
config/packages/*.yaml
dosyalarını gözden geçirin ve orijinal projenizinapp/config/config_*.yml
dosyasında tanımlanan yapılandırmaya göre gerekli değişiklikleri yapın. Bunun, yükseltme işleminin en çok zaman alan ve hata oluşan adım olduğundan dikkat edin. - İhtiyaçlarınıza göre
app/config/parameters.*.yml
’de tanımlanan özgün parametreleri yeniconfig/services.yaml
ve.env
dosyalarına taşıyın. - Orjinal kaynak kodunuzu
src/{App,...}Bundle/
klasrönden her namespace’i güncelleyereksrc/
klasörü altına taşıyın. - Orijinal şablonları(templates)
app/Resources/views/
adresindentemplates/
taşıyın - Uygulamanız tarafından gereken diğer değişiklikleri yapın. Örneğin, orijinal
web/app_*.php
front controllers özelleştirilmişse, bu değişiklikleri yenipublic/index.php
denetleyicisine ekleyin.