Categories: Laravel

Laravel Başlangıç Rehberi – 6

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:

  • MVC
  • REST

MVC (Model – View – Controller)

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.

MVC yapısı

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.

View

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.

Model

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.

Controller

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

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.

 

GET

POST

PUT

DELETE

/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

Sırada Ne Var?

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
  • RESTful Controllers
  • Resource Controllers

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.

Share
Published by
yusufkaracin

Recent Posts

Celery Checklist [Python]

Celery ile alakalı "best practice"leri ve faydalı araçları bir araya getiren güzel bir checklist'e denk…

5 yıl ago

JavaScript Dizileri için 13 İpucu

Diziler en temel ve sık kullandığımız araçlardan... Kod yazarken işimizi kolaylaştıracak, daha temiz kod yazmamızı…

5 yıl ago

List & Tuple Mini Test (Python)

listve tuple bilginizi test etmek ister misiniz? realpython.com da keşfettiğim ve Türkçe'ye çevirdiğim mini teste…

5 yıl ago

Bilmeniz Gereken 11 Python Mülakat Sorusu

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…

5 yıl ago

Angular Componentlere Konsol Üzerinden Hızlı Erişim

Angular componentlerine console üzerinden hızlıca erişmek için kullanılan bir teknik. Unutmamak için kendime not düşüyorum.Devamını…

5 yıl ago

Birkaç Güzel JavaScript Sorusu İster Miydiniz?

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…

5 yıl ago