Serimizin bu makalesinde Symfony Framework ile ilk sayfamızı oluşturmaya başlayacağız. Aslında serinin sonraki makaleleri görüntülü hazırlamak istiyorum. Çünkü yazarak anlatması ve anlaması oldukça zorlayacak gibi geliyor.
Üzerinde Çalışacağımız Klasörler
Symfony ile çalışırken kodlamalarımızı src/ ve app/ klasörlerinde yapacağız sadece. Bu iki klasör sizin için oldukça önemli olacaktır. Aslında web/ klasörü üzerinde de değişiklik yapacağız fakat orası o kadar da önemli değil :) Kısacası app/ ve src/ klasörleri dışındaki tüm klasörleri bu aşamada görmezden gelin. src/ klasörünü oluşturduğunuz bütün class’ları saklarken app/ klasörüde tema ve ayar dosyalarınızı sakladığınız klasördür.
Symfony Framework’ün de İlk Sayfayı Oluşturalım
Symfony framework’ü ile hazırlanmış varsayılan sayfanızı çalıştırın. Yani localhost:8000 adresine gidin. Sizi karşılayan sayfa varsayılan olarak gelen sayfadır ve bu sayfa DefaultController.php dosyasından derlenir. src/ klasörünün altında bulabilirsiniz. Şimdi onu silin! Evet silin! Ona ihtiyacımız yok. Fakat isterseniz silmeden önce inceleyebilirsiniz. Anasayfayı tarayıcıda tekrar açın:
No route found for “GET /”
Bu hatayı alacaksınız gayet normal. Çünkü ana dizin için yani “/” için bir route tanımlanmadı. O zaman konumuza geri dönelim ve bir sayfa oluşturalım.
Projemiz bisiklet türleri üzerine olsun ve projemizin adı Piskiletçi olsun :) Bisiklet türlerinden ve bu türlerin farklılıklarına değinelim bol bol makalemizin içinde. İlk sayfamızda türlerimizden bir tanesi olan MTB’ye değinelim.
Symfony’de sayfa oluşturmak iki adımdan oluşuyor. Bunlar route ve controller ‘dır. Aslında modern bütün framework lerde bu böyledir. Route yeni sayfamızın URL’sini oluşturmamızı sağlarken, Controller da bu sayfamızın içeriğini oluşturmamızı sağlar.
Namespaces
O zaman adım bir ile başlayalım: route oluşturalım! Aslında biz adım iki başlayacağız. Sebebini anlayacaksınız. Şimdi AppBundle/Controller içine TurController isminde yeni bir sınıf ekliyoruz.
Fakat o da ne! Namespace alanı boş geliyor!?
Eğer bu şekilde boş gelirse yapacağınız şey çok basit, hiç boşuna paniklemeyin, hemen google’ı açıp delilercesine araştırmaya başlamayın. Esc’ye basın ve pencereyi kapatın. Soldaki proje dosyalarınızı src/ klasörünüzü bulun, ona sağ tıklayın ve “mark directory as sources root” seçeneğini seçin.
“Ohh be, sıkıntısız çözdük” dediğinizi duyar gibiyim. Şimdi tekrar yeni sınıfımızı oluşturmayı deneyelim ve sınıfımızın adı TurController olsun. Size otomatik olarak aşağıdaki gibi bir dosya oluşturacaktır:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php /** * Created by PhpStorm. * User: trkodlama * Date: 16.02.2017 * Time: 18:38 */ namespace AppBundle\Controller; class TurController { } |
Eğer Namespace kavramıyla ilgili bilginiz yoksa biraz araştırma yapmanızı öneririm. Yakında namespace üzerine belki bir makale yazabilirim. Fakat şu anda google’da arayıp birşeyler okumanızı öneriyorum.
Burada en önemli olay namespace ile proje dizininiz birbiriyle eşleşmelidir. Aksi halde Symfony framework çalışmayacaktır.
Controller ve Route
Şimdi
1 |
public function showAction() |
ile sayfamızı oluşturalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php /** * Created by PhpStorm. * User: trkodlama * Date: 16.02.2017 * Time: 18:38 */ namespace AppBundle\Controller; class TurController { public function showAction(){ } } |
İşte bu kadar. Bu bizim controller‘ımız. Sayfamızı oluşturacak temel iskelet bu aslında. Adının da bir önemi yok. Şimdi route oluşturacağız. Route oluşturmak için yorum satırlarını kullanıyoruz.
1 |
/** |
ile başlayıp
1 |
@Route |
ekliyoruz. Serimizin bir önceki makalesinde kurmuş olduğumuz PHP Annotations eklentisi sayesinde otomatik olarak tamamlıyor zaten PHP Storm. Fakat tamamlarken size birden fazla alternatif sunabilir. FrameworkExtraBundle‘ı seçmeye dikkat edin. Bu oldukça önemlidir. Son olarak da parantez içine “/tur” yazalım ve bitirelim:
Oto tamamlama burada çok önemli. Oto tamamlamayı kullanmak zorundasınız. Farkettiyseniz hemen
1 |
use |
komutunu ekledi sayfanıza. Bu sayede sınıfımızın son hali şu şekilde oldu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php /** * Created by PhpStorm. * User: trkodlama * Date: 16.02.2017 * Time: 18:38 */ namespace AppBundle\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; class TurController { /** * @Route("/tur") */ public function showAction(){ } } |
Çok güzel! Artık bir sayfamız çalışıyor. Projenizin ana dizini 404 hatası vermeye devam ederken
1 |
/tur |
adresine giderseniz artık boş bir sayfa ile karşılaşacaksınız. Bu da böyle bir sayfanızın olduğunu gösteriyor :)
Ekrana Çıktı Oluşturalım
Daha önce dediğim gibi controller’ın amacı sayfayı oluşturmak. Controller’ın bir kuralı var oda Symfony Response nesnesini kullanarak return yapmalısınız.
Return olarak çıktınızı html, json vs olarak rahatlıkla oluşturabilirsiniz.
Şu aşamada işleri biraz basit tutalım:
1 |
return new Response |
. Response sınıfı HttpFoundation komponentinden geliyor. Tabii ki yine oto tamamlamanının bizim yerimize tamamlamasına izin veriyoruz; bu sayede gerekli gördüğü namespace’i projemize hemen ekliyor. Aksi halde problemlerle karşılaşabiliriz:
Vee şimdi ekrana İki tekerli yoldaşlarımız yazdırıyoruz. Buyrun sınıfımızın son hali:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php /** * Created by PhpStorm. * User: trkodlama * Date: 16.02.2017 * Time: 18:38 */ namespace AppBundle\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Component\HttpFoundation\Response; class TurController { /** * @Route("/tur") */ public function showAction(){ return new Response('İki tekerli yoldaşlarımız'); } } |
İşte Bu Kadar!
Bir dosya ve bir fonksiyon ile sayfamızı oluşturduk. Bu iş bu kadar kolay. Anasayfanızı tekrar açın ve yenileyin. Tabii ki çalışmayacak çünkü aslında /tur adresini açmalıydınız :) Vuhuu! Symfony ile hazırlamış olduğunuz ilk sayfaya “Merhaba” deyin. Çok basit değil mi?
Serimizin bir sonraki makalesinde dinamik URL’ler oluşturmayı göreceğiz.
Sevgilerimle,
Yorumlar