Symfony2 uygulamasına özel sınıf ekleme
Symfony2 framework’ü ile çalışırken projenize kendinizin hazırlamış olduğunuz yardımcı sınıfları eklemeniz gerekebilir. Bu yardımcı sınıfları kullanacağız yere göre include etmek yerine, composer ile tek seferde include etmeniz yeterli olacaktır.
composer ile nasıl autoload yapılır sorusuna gelirsek bunun birden fazla yöntemi olduğunu ancak bu yazıda sadece bu yöntemlerden birini yani classmap yöntemi ile autoload yapımını anlatacağım.
Diğer autoload yöntemleri için bu sayfayı inceleyebilirsiniz.
Dizinin tanıtılması
Projenizin kök dizininde bulunan composer.json dosyasını açalım. autoload objesinin içine classmap adında bir key ve boş bir dizi value’su ekleyelim. Bu dediklerimi yaptıktan sonra aşağıdaki gibi bir sonuç olmalı.
"autoload": { "psr-4": { "": "src/", "SymfonyStandard\\": "app/SymfonyStandard/" }, "classmap": [] },
Şimdi ise, projenizin hangi dizininde veya dizinlerinde yardımcı sınıflarınız var ise bunları classmap içine veriyoruz. Burada dikkat edilmesi gereken nokta, dosyaların bulunduğu dizinin verilmesidir. Yani eğer yardımcı sınıflarınız src/helper/ dizininde ise bu yolu classmap’e eklemeniz yeterli olacaktır.
Benim yardımcı sınıflarım src/Helper/ dizininde bulunuyor. Bu nedenle composer dosyam aşağıdaki gibi gözüküyor.
"autoload": { "psr-4": { "": "src/", "SymfonyStandard\\": "app/SymfonyStandard/" }, "classmap": [ "src/Helper" ] },
Bu ekleme işlemini yaptıktan sonra sınıflarımızı composer’ün include etmesini beklemeniz normal ancak yapmanız gereken son bir adım mevcut. projenizin kök dizinine gelip composer dump-autoload parametresini vermeniz gerekmektedir.
Bu parametreyi her yeni sınıf eklediğinizde, namespace, sınıf ismi güncellendiğinde yapılması gerekmektedir.
Sınıfın kullanımı
Dizinleri tanıtıp composer’ü güncellediğimize göre artık sınıfımızı kullanabiliriz. Ben bu yazıda örnek olarak bir controller içinde sınıfımı kullanmak istiyorum.
Deneme adında bir sınıfım mevcut ve bu sınıfın içerisinde herhangi bir namespace tanımlaması yapılmadı. AppBundle içinde DefaultController içindeki indexAction metodunda bu sınıfı aşağıdaki gibi başlatabilmem mümkün.
new \Deneme();
Dilerseniz controller’ın en üstüne use Deneme; ekleyerek her seferinde sınıfı başlatırken “\” eklemek zorunda kalmazsınız.
Umarım faydası olmuştur. İyi çalışmalar.