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:
- Route temelleri ve route parametreleri,
- View yapısı,
- Blade template engine ve HTMLBuilder sınıfı,
- Form işlemleri ve FormBuilder sınıfı,
- Veritabanına bağlanma, temel veritabanı sorguları,
- QueryBuilder sınıfı
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.
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 eylemPOST:
Veri oluşturmak içinPUT:
Veriyi güncellemek içinDELETE:
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.
|
|
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 |
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.
Yorumlar