Symfony Framework nedir?

symfony2-svg

PHP programlama dili için geliştirilmiş çok popüler bir Framework’dür.

Normal PHP ile 5 birim zamanda yaptığınız bir yazılımı, 1 birim zamanda çıkarabilirsiniz.

Çok sayıda hazır kütüphanesi (bundle) bulunduğu için günlerinizi harcayacağınız modülleri bir kaç konsol komutu ile projenize dahil edip, her türlü özelleştirebilirsiniz.

Geniş bir geliştirici kitlesi olduğu için sürekli güncellenir, güvenlik ve stabilite konusunda yükü sizden alır. Bir çok popüler saldırı türlerine karşı (CSRF, XSS, SQL Injection vs.) güvenli geliştirme ortamı sağlar.

Aynı projeye birden fazla yazılımcı kod yazıyorsa, bunların belli bir kurguda kod yazmalarını sağlar.

Terminal (console) komutları ile manuel yaptığınız bir çok şeyi otomatize edersiniz. Örneğin: Bir ürünler tablonuz var. Admin panelinde buna ekle, çıkar, düzenle, listele gibi ekranlar yapmanız belki yarım gününüzü alır. Symfony’de ise yalnızca bir satır kod ve bir kaç sn üretim (generate) süresi.

Assetic özelliği saysinde “assets” dediğimiz CSS, JavaScript ve resimlerinizi (image) çok daha kolay ve düzenli bir şekilde organize edersiniz.

Dev, test ve prod geliştirme ortamları projenizi sistematize eder.

Doctrine ORM ve Twig Template motoru hali hazırda gelir.

Developer Toolbar sayesinde, yaptığınız her isteğin performans ölçümlemesini yaparsınız. Bulunduğunuz sayfada kaç sorgu çalışmış, bu sorgular ne kadar sürmüş, bu sayfa bellekte ne kadar yük tutmuş, Ajax istekleri ne durumda, vb. gibi bir çok parametreyi takip edebilirsiniz.

İlk fırsatta Symfony Framework’u tanıtan bir video hazırlayacağım inşaallah dostlar. :)

Symfony2 Monolog ile Hata Bildirimleri Loglama ve E-Posta Bildirimleri

Bir yazılım projesinin olmazsa olmaz yapı taşlarından birisi Error ve Bug Tracker’dir (hata izleyicileridir). Geliştirdiğiniz bir Symfony2 web projesindeki hata bildirimlerini loglamak, soket servislerine ve bildirim sunucularına rapor göndermek için Monolog kütüphanesini kullanabilirsiniz.

Symfony2 ile default vendor (varsayılan) olarak gelen Monolog kütüphanesini diğer PHP projelerinde kullanmak için composer paket yöneticisini kullanıp doğrudan kurabilirsiniz.

Örnek Senaryo:

Yazılım projemizde 400 ve 500 serisi bir hata aldığımız zaman (401, 403, 404, 500 vs.) bunu istediğiniz bir dizindeki .log dosyasında depolasın ve özel bir formatta belirttiğimiz e-posta adresine iletsin. Bu log dosyasında -eğer oturum açıldıysa- oturum açan kullanıcı hakkında ek bilgiler de yer alsın.

Not: Oturum açan kullanıcının bilgisine ulaşmak için Symfony2 projenizde FOSUserBundle kurulu olmalı ve oturum açmış olmalısınız.

1. Adım: config_prod.yml (Geliştirme aşamasında config_dev.yml’ı kullanmalısınız.)

 2. Adım: config.yml

3. Adım: AppBundle/Controller/SessionRequestProcessor.php

 4. Adım: parameters.yml (Swift Mailer ile e-posta gönderimi için)

 5. Adım: config.yml (Swift Mailer ile e-posta gönderimi için)

 6. Adım: Bir hata yapın! :)

Her şey yolunda gittiyse belirttiğiniz dizine bir “hata.log” dosyası oluşmuş olacak ve e-posta kutunuzda yeni bir “Hata Bildirimi” göreceksiniz.

Hata bildirim seviyelerini (level) şöyle sıralayabiliriz:

Ek olarak Monolog ile elde ettiğiniz hataları log dosyasına yazdığınız gibi:

  • Redis, MongoDB, MySQL platformlarında da depolayabilirsiniz,
  • AMQB gibi kuyruk protokolllerine gönderebilirsiniz (rabbitmq),
  • HipChat, PushOver, Growl gibi yazılım ve servislere entegre edebilirsiniz.

Faydalı olması dileğiyle.

Kaynaklar:

 

Symfony2 Projesi Yayınlama

Symfony2 ile geliştirdiğiniz yazılım projenizi yayınlamak için aşağıdaki adımları izleyebilirsiniz.

1. app/cache dizini içerisindeki dev ve prod klasörlerini silin.

2. app/logs dizini içerisindeki dev.log ve prod.log dosyalarını silin. (Log dosyalarını saklamak isterseniz ayrı bir yerde yedekleyebilirsiniz.)

3. Herhangi bir FTP yazılımı ile hosting hesabınıza bağlanın.

4. Projenizin ana dizinindeki tüm klasörleri (app, bin, src, vendor, web) upload edin. (cPanel kullanıcıları için public_html, Plesk kullanıcıları için http_docs).

5. Yükleme işlemi tamamlandıktan sonra web dizini altındaki app.php dosyasındaki:

 false olan değeri true  yapın.

Önizleme:

6. Şuan da projenize www.siteadi.com/web/app.php adresinden erişebilirsiniz. Doğrudan www.siteadi.com olarak erişmek için public_html ya da http_docs içerisinde .htaccess dosyası oluşturup aşağıdaki kod bloğunu ekleyin.

Tebrikler. Eğer tüm adımları sorunsuz bir şekilde tamamladıysanız artık www.siteadi.com olarak erişim sağlayabilirsiniz.

İyi çalışmalar.

Symfony2 Flash Message

Uygulamalarımızda bazen bilgi mesajı vermemiz gerekebilir. Bunun için Symfony2’deki flash message yapısını aşağıda kısa bir kod bloğu ile paylaşmak isterim.

Controller’içerisinde session içerisindeki flash bag’e mesaj tipi ve içeriğini set edelim.

Twig içerisinde de aşağıdaki şekilde kontrol ve gösterilmesini sağlayalım.

 Not: Twig içerisinde Bootstrap alert kutularına uygun stil şablonu sınıfları (class) verilmiştir. Dilerseniz kendi stil yapınıza uygun şekilde özelleştirebilirsiniz.

Detaylar için orijinal Symfony dökümantasyonuna gözatabilirsiniz:
http://symfony.com/doc/current/book/controller.html#flash-messages

Symfony2 Assets Yolu Belirtme

Twig içerisinde kullandığınız {{ asset(‘…’) }} fonksiyonu ile erişmek istediğiniz assetlerin URL bilgisini (prefix) config.yml içerisinde aşağıdaki şekilde tanımlayabilirsiniz.

Dilerseniz daha önce parameters.yml içinde tanımlamış olduğunuz site_url parametresini %site_url% olarak config.yml içerisinde de kullanabilirsiniz.

Twig’de Oturum ve Rol Kontrolü

Twig’de mevcut ziyaretçinin oturum açıp açmadığını ve rolünü kontrol etmek için aşağıdaki kod bloklarını kullanabilirsiniz.

Oturum Kontrolü (Var / Yok)

[php]

{% if app.user %}

Ziyaretçi herhangi bir rolde oturum açmıştır. (logged in)

{% elseif not app.user %}

Ziyaretçi oturum açmamıştır.

{% endif %}

[/php]

Oturum Tipi Kontrolü

[php]

{% if is_granted(‘IS_AUTHENTICATED_FULLY’) %}

Kullanıcı bilgilerini (credentials) girerek oturum açmış.

{% elseif is_granted(‘IS_AUTHENTICATED_REMEMBERED’) %}

Kullanici çerez ile (cookie) oturum açmış. (Önemli işlemlerde tekrar oturum açma istenir.)

{% elseif is_granted(‘IS_AUTHENTICATED_ANONYMOUSLY’) %}

Ziyaretçi oturum açmamış ya da tanımlanamayan kullanıcı.

{% endif %}

[/php]

 Rol Kontrolü

[php]

{% if is_granted(‘ROLE_SUPER_ADMIN’) -%}

Kullanıcının rolü “ROLE_SUPER_ADMIN” mi?

{% elseif is_granted(‘ROLE_ADMIN’) -%}

Kullanıcının rolü “ROLE_ADMIN” mi?

{% elseif is_granted(‘ROLE_USER’) -%}

Kullanıcının rolü “ROLE_USER” mı?

{% else %}

Herhangi bir rolü yoksa…

{%- endif %}

[/php]