Laravel Başlangıç Rehberi - 6 - Yusuf Karaçin
Tarih: 14 Ocak 2015 | Yazar: yusufkaracin
Laravel öğrenmeye hızla devam ediyorum. Şu ana kadar Laravel’in temel yapılarından bazılarını öğrendim. Kısa bir özet geçmek gerekirse:
Route temelleri ve route parametreleri,
Blade template engine ve HTMLBuilder sınıfı,
Form işlemleri ve FormBuilder sınıfı,
Veritabanına bağlanma, temel veritabanı sorguları,
Bugün öğreneceğim konular ayrı bir öneme sahip. Buraya kadar olan eğitimde amaç temel yapıyı anlamaktı. Bundan sonraki kısımlarda kodlarımızı bir adım daha profesyonel seviyeye çıkarabiliriz diyebilirim. Çünkü artık MVC yapısını öğrenmeye başlıyoruz. Bugünkü konularım:
Bu eğitimi takip edenlerin çoğu muhtemelen MVC nin ne olduğunu biliyordur. Bilmeyenler ya da tekrar hatırlamak isteyenler için bu bölüm özet mahiyetinde olacak.
Laravel’i kurduğumuz dizini açıp app klasörünün içini incelersek, model, view ve controller klasörlerinin olduğunu görürüz. Çünkü Laravel’de MVC tasarım desenini kullanıyor. Şimdi MVC yapısına biraz daha yakından bakıp yukarıdaki görselin ne demek istediğini daha net anlayacağız.
Blade template engine kullanmayı öğrenirken, tasarımlarımızı view klasörü altında toplamıştık. View, kullanıcılara sunduğumuz görsel varlıkların yer aldığı kısım oluyor. Yani projemizin arayüzü view altında toplanıyor diyebiliriz.
Genel olarak veritabanı işlemlerini gerçekleştirdiğimiz kısım. Veritabanımızdaki tabloları bir modelle ilişkilendirdiğimizi düşünelim. Örneğin bir haber portalımız var. Veritabanında kullanıcılar ve haberler tablosu bizim için birer model olacaktır. Kullanıcı işlemleri için ayrı bir model, haberler için ayrı bir model dosyası oluşturabiliriz. Kullanıcılara ait ekleme, silme, güncelleme vb.. işlemleri kullanıcılar model dosyası altında yaparken haberlerle ilgili ekleme, silme, güncelleme vb. işlemleri haberler model dosyası altında yapabiliriz. Böylelikle şimdiden büyük bir kod karmaşasının önünü kesmeye başladık bile.
MVC yapısının kilit noktası controllerdır. Çünkü katmanlar ve kullanıcı arasında köprü görevi görüyor.
Tekrar görsel üzerinden MVC yapısını anlamaya çalışalım.
Kullanıcı (insan ya da sunucu olabilir) uygulamamızdan bir istekte bulunuyor. Controller bu isteği alıp inceliyor. Eğer veritabanı üzerinde bir sorgu yapılması gerekirse model katmanı ile iletişime geçiyor. Model gerekli sorgulamaları yaptıktan sonra controllera veriyi gönderiyor. Controller gelen veriyi view katmanına aktarıyor. View katmanı ile gelen bilgiyi arayüze yerleştirip kullanıcıya sunuyoruz. Ve tabii ki controller katmanı her zaman model ve view katmanlarıyla iletişim kurmak zorunda değil. Gerekli durumlarda katmanlar arasında iletişim sağlanıyor.
MVC ile projelerimiz daha düzenli ve ileriye yönelik bir hal alıyor. Çünkü kodlarımızı belli katmanlara bölüyoruz ve hepsinin kendine ait sorumlulukları var. Böylece kodlarımız karmaşık olmaktan kurtuluyor. Veritabanı sorgularımız model katmanında, arayüzümüz view katmanında. Arayüz üzerinde rahatça farklı kişiler çalışırken, veritabanı işlemleri için farklı kişiler birbirine engel olmadan çalışabilir. Projemize sonradan dahil olan kişiler için de kolaylık sağlamış oluyoruz.
REST daha önce sadece adını duyduğum bir kavramdı. Aslında sürekli farkında olmadan kullandığım bir şey olduğunu yeni farkettim. Gelecek derste MVC yapısını ve REST’i biraz daha detaylı öğrenceğim ama şimdilik kısa bir özetle aşina olmaya çalışmakla başlıyorum. “Ben biraz daha detaylıca öğrenmek isterim” diyen varsa buraya link bırakıyorum.
REST (Representational state transfer) bir iletişim protokolü. İstemci ve sunucu arasında iletişim sağlıyor. Ve kullandığı protokol HTTP. Eminim bunu öğrenince benim gibi REST’i bilmeyenler şimdi “haa, bizim REST bu ya” demiştir 🙂 Demeyenler için şunu belirtirsem daha açıklayıcı olur sanırım: “…World Wide Web dediğimiz yapı HTTP protokolü üzerine kurulu *“. Hala demediyseniz yapacak bir şeyim yok. Usulca devam ediyorum…
REST mimarisini kullanan servislere genel olarak RESTful servis deniyor*. Şimdi RESTful web uygulamalarını nedir öğrenmeye başlıyorum. İsterseniz eğitimin anasayfasından hazırlanmış sunum dosyasını indirebilir ya da videoyu izleyebilirsiniz. Ayrıca bu linkteki sunum dosyası da yardımcı olacaktır.
İlk olarak bilmemiz gereken bir kavram var: “Resource” yani “Kaynak”. Resource yani kaynak, en sade ifadeyle verilerimizi temsil ediyor. Daha açıklayıcı olması açısından birkaç örnek:
Yemek tarifleri sunan bir sitenin kaynağı yemek tarifleridir.
Kütüphaneye ait bir web sitesinin kaynağı kitaplardır.
Sosyal medya sitelerinin kaynağı kullanıcılarıdır.
Yemek tarifleri sunan site üzerinden devam ediyoruz. Öncelikle sitemize gelen kullanıcılar, sitemiz üzerinde hangi işlemleri gerçekleştirmek isteyebilir bunları düşünelim:
Kullanıcının yapmak isteyeceği eylemler Kullanıcının gitmesi gereken URL
Tüm tarifleri görüntülemek /tarifler
Belli bir tarifi görüntülemek, spagetti gibi /tarifler/spagetti
Yeni tarif oluşturmak /tarifler/olustur [form]
Var olan bir tarif üzerinde işlemler yapmak(Spagettiyi güncellemek ya da silmek gibi) /tarifler/spagetti/duzenle [form]
Diğer bilmemiz gereken bir kavram ise: “Verb / Action” yani “Eylem”. Verb yani eylem, kaynaklar üzerinde yaptığımız işlemlere deniliyor. Kullanıcı tüm yemek tariflerini görüntülemek için /tarifler urline geldiği zaman bir eylem olması gerekiyor. HTTP nin bizlere sunduğu eylemler,
GET: Veriyi getirmek için kullandığımız eylem
POST: Veri oluşturmak için
PUT: Veriyi güncellemek için
DELETE: Veriyi silmek için
Kullanıcımızın yeni bir tarif oluşturmak istediğini varsayalım. Bunun için /tarifler/olustur urlinde basit bir form olsun. Yemek adını, malzemeleri ve tarifi girdikten sonra kullanıcı gönder butonuna tıkladığı zaman /tarifler urlinde POST eylemi gerçekleşmelidir.
Kullanıcı belli bir tarif üzerinde düzenleme yapmak isterse, mesela spagettiyi güncellemek gibi, /tarif/spagetti/duzenle urlindeki formu doldurup güncelle butonuna tıkladığı zaman tarifler/spagetti urlinde PUT eylemi gerçekleşmelidir. Kullanıcı spagetti tarifini silmek isterse, aynı form üzerinde sil butonuna bastığını varsayalım. Bu sefer tarfiler/spagetti üzerinde DELETE eylemi gerçekleşmelidir.
Şimdi tablo üzerinde HTTP eylemlerinin belirlediğimiz urllerdeki sonuçlarına bakalım.
/tarifler Veritabanındaki tüm tarifleri listele Veritabanına yeni bir tarif ekle Veritabanındaki tüm tarifleri güncelle Veritabanındaki tüm tarifleri sil
/tarifler/spagetti Spagettinin tarifini göster
Veritabanında spagettinin tarifini güncelle Veritabanından spagettinin tarifini sil
/tarifler/olustur Yeni bir tarif oluşturmak için formu göster
/tarifler/spagetti/duzenle Spagetti üzerinde işlem yapmak için düzenleme formunu göster
Gelecek derste Controller yapısını biraz daha detaylı öğreneceğim ve RESTful controller mantığını anlamaya çalışacağım. Bugünkü dersler, bunlar için bir hazırlıktı. Dolayısıyla bugünkü dersler biraz havada duruyormuş gibi gelebilir ki bence normal. Sıradaki konular,
Controller yapısının temelleri
Önceki yazı Laravel Başlangıç Rehberi – 5
Sonraki yazı Laravel Başlangıç Rehberi – 7