Selam,
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:
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 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 eylemPOST:
Veri oluşturmak içinPUT:
Veriyi güncellemek içinDELETE:
Veriyi silmek içinKullanı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.
|
|
PUT |
|
|
/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 |
404 |
Veritabanında spagettinin tarifini güncelle | Veritabanından spagettinin tarifini sil |
/tarifler/olustur |
Yeni bir tarif oluşturmak için formu göster |
404 |
404 |
404 |
/tarifler/spagetti/duzenle |
Spagetti üzerinde işlem yapmak için düzenleme formunu göster |
404 |
404 |
404 |
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,
Hatırlatma1: Laravel öğrenmek için bu linkteki eğitimi takip ediyorum ve öğrendiklerimi burada paylaşıyorum.Buraya tıklayarak eğitimin anasayfasına ulaşabilir ve kaynak kodlarını indirebilirsiniz.
Hatırlatma2: Lütfen eksik,hatalı ya da düzeltilmesi gereken bir şey farkederseniz bana bildirin.
Celery ile alakalı "best practice"leri ve faydalı araçları bir araya getiren güzel bir checklist'e denk…
Diziler en temel ve sık kullandığımız araçlardan... Kod yazarken işimizi kolaylaştıracak, daha temiz kod yazmamızı…
listve tuple bilginizi test etmek ister misiniz? realpython.com da keşfettiğim ve Türkçe'ye çevirdiğim mini teste…
Rehberlik sağlaması ve bilgi tazelemesi açısından faydalı olduğunu düşündüğüm bir Toptal blog paylaşımınıTürkçe'ye çevirdim.Devamını okuyunBilmeniz…
Angular componentlerine console üzerinden hızlıca erişmek için kullanılan bir teknik. Unutmamak için kendime not düşüyorum.Devamını…
Geçtiğimiz günlerde keşfettiğim ve oldukça da hoşuma giden repoyu paylaşmak istiyorum: lydiahallie/javascript-questions Genel olarak temel…