Spagetti’den Laravel’e Geçiş

10 yıl önce Beyazıt Kölemen tarafından yazılmıştır.-4.578 Okunma

Bugün sizlere son 1 aydır aktif olarak kullandığım ve hep karşı durduğum (‘ ya olm ne var bu frameworklerde ne güzel class larımız hazır gömüp gömüp veriyoruz’) bir sistemi anlatmak istiyorum..

Bu zamana kadar yapmış olduğumuz projeler orta düzey ve tek geliştiricinin yeterli olduğu projeler olduğundan pek ihtiyaç duymamıştık. Ama komplike dediğimiz karmaşık bir sistem kodlamak zorunda kaldığımız da anladım ki framework şart hacı abi.

Araştırmalarım sonucunda (Bir çok karşılaştırma  ve yabancı forumlardaki tartışmalar sonucunda) en hızlı ve en kolay dökümantasyonun olduğu bir framework u buldum aslında.. Yii, FuelPHP, Slim Framework derken evet en mantıklısı Laraveldi!

Öncelikle makaleyi daha önce hiç MVC projesi yapmamış (MVC den kastım tek PHP değil, C# yada alternatif diğer projeler kullanmamış) birisi için hazırlamak istedim..

Kısaca Spagetti to Laravel diyebiliriz. (Spagetti: Eski kod düzeninde, eski standartlara göre PHP kod yazımı)

Öncelikle neden laravel seçtiğimi ve bunu öğrenmek istediğimi açıklayarak başlıyalım.

Neden laravel?

  • Proje büyüyünce yada devamlı geliştirmemiz gereken bir proje olduğunda eski kodlar ne kadar düzgün yazarsak yazalım ortalık karışıyor ve sonunda kafayı yiyebiliyorsunuz.
  • Template motoru dediğimiz twig, blade gibi motorların tek tek entegrasyonu en basitinden bir pagination için bile yarım saat uğraşmak zorunda kalmak.
  • Herhangi bir ortak kütüphanenin yani plugin sisteminin sıkıntılı entegrasyonu ( Package sistemleri vs)
  • Projeye sonradan katılan yazılımcıya kan kusturmak ( Hep sonradan katılan ben olduğumdan küfür etmek olmuyor)
  • Log ve Hata için yetersiz Debugger..
  • Multi tasking dediğimiz birden fazla işlemi yapmak gibi olaylarda canımızın çıkması.
  • Ufacık bir form da bir ton şeyle uğraşıp kafamızın karışması.
  • EzSQL güzel canda o da sıkıyor abi süreden sonra denmesi.Eloquent’in ayağını uzat, çay demle rahatlığıyla tanışmamış olmak.
  • Güvenlik ve Session/Cookie gibi işlerle çok fazla zaman kaybetmek, hatta bir çok açık için tek tek test etmek..
  • Ve en sıkıntılısı Validation olayıyla bir ton uğraşmak.
  • Üyelik zımbırtısında mutlaka sıkıntı çıkması vs vs.

daha sayabileceğim bir çok neden artık hamballık yaptığımızın göstergesiydi. Ve hepsinin mutlu sonla bittiği tek sistem olarak Laravel’i gördüm..

Her ne kadar ilk başta “olm PHP yazıyoruz konsol da ne işimiz var” ön yargısına kapılsamda şu an dünyanın en güzel şeyi artisan ı kullanmak diyebilirim.

Hadi Laravel’i biraz anlıyacağımız dilden tekrar yorumlayalım..

Laravel’deki o şeyler ne abi?

MVC dediğimiz Model  View Controller sistemine geçerken ilk önce bu zımbırtıyı kısaca değinmek gerek var aslında..

Model: Bu olay aslında basitçe SQL dediğimiz veritabanındaki işlemleri, tabloların birbirlerine bağlanmaları gibi işlerin bir dosyada toplanmasıdır..

View: Model ve Controller in birleşmesi sonucu bizim ekrana bastırmak istediğimiz kısım.. Yani türkçeye çevirisi göstermek olan sınıf.. Daha açık söylemek gerekirse bu bizim tema olayı hacı abi.

Controller: Evet işin en çok uğraştığımız ve asıl kodların döndüğü kısım diyebilirim.. Controller yani view ile model arasındaki bağı kontrol eden kodları yazdığımız dalga.. Kısaca view de bir form oluşturduk ve verileri oradan adama girdirdik, modelimiz de tablomuz da var.. Ama bu formun hangi sayfaya gireceği, validation dediğimiz olayı, hangi modele gideceği gibi olayların hepsi burada dönüyor..

—–

Kısaca Model de bir veritabanı yada bir obje yapıp, controllerde bu objeden bir nesne türetip, view de gösteriyoruz…(OOP a takılma gel sen 😀 )

Hadi laravele girelim..

Laravel.com üzerindeki Quick Start yani hızlı başlangıç ile başlayabiliriz aslında (Laravel.Gen.Tr üzerinde türkçesi var oradan inceleyebilirsiniz)

Kurulum:

İlk kurulum size biraz zevksiz gelebilir ama sonrasında alışınca gerçekten diğer işlemlerden oldukça kolay..

İlk işimiz bir composer ı kurmak..

Buradan hangi işletim sistemini kullanıyorsanız indirebilirsiniz.

—-

Ardından kurulumu yaptıktan sonra karşınıza şöyle bir olay çıkıcaktır (Bu işlem öncesinde Wamp yada diğer local sunucunuzun www klasörü içerisinde bir klasör oluşturun.. Ve içerisine girip sağ tıklayıp USE Composer Here seçeneğine basın..

Screenshot_2

Karşımıza konsol dediğimiz msdos sayfası gibi bir sayfa çıkıcaktır.. İlk olarak composer ı test etmek için composer yazalım.

Screenshot_3

 

Evet composerımız gayet güzel bir şekilde çalışıyor.. İlk olarak ” composer update” diyerek composer ı güncelleyebilirsiniz.

—-

Karşımız da gördüğünüz gibi bir çok PHP sistemin ortak olarak kullandığı bir sistemle karşı karşıyayız..

İlk yapmamız gereken iş create-project diyerek composer üzerindeki laraveli kurmak olacak.

Bunu yapmak içinse;

Kodunu kullanıyoruz.

Bunu şöyle yapalım.

Örnek olarak ben

Yazdım.. Unutmadan composer da herhangi bir olayı kullanmak istediğimiz de her zaman en başa composer yazmak zorundayız (Alışma sürecinde sıkıntı)

Ardından composer üzerinden laravel/laravel yazarak laravel dosyalarının bilgisayara indirilip kurulumu yapıyoruz. Prefer-Dist ise indirirken detayları göstermesi için.

Screenshot_4

Ve sistem bittiğinde

Screenshot_5

Karşımızda kurulumun tamamlandığına dair bir not çıkıyor ve keyimizi üretiyor.

Screenshot_6

Test projeye girdiğimiz de karşımıza böyle klasörler görüyoruz.

Burada hemen klasörleri tanıyalım.. Bizim yazıcağımız kodlar APP klasöründe olacak, VENDOR çekirdek laravel dosyalarının bulunduğu kısım, bootstrap ise eğer dosyaların yerlerini filan değiştirirsek sistemde ayarlamaları yapmamız için gelen dizindir vs dir onların olduğu kısım..

Burada en önemli iki kısım var karşımızda.. Public ve APP!

Öncelikle ilk olarak laravelimizi bi çalıştıralım bakalım çalışıyor mu?

Composera hemen bu komutu yazalım.

(Laravel klasörü içerisindeyken sağ tıklayıp use composer here deyip yeni konsola da yazabilirsiniz)

Screenshot_7

Evet artık laravelimiz çalışıyor..

İlk olarak burada şunla uğraşmayın. Abi wamp açık localhost/ontest/testproje yazınca girmiyor filan diye..

Direk localhost:8000 yazdığınızda bu projeye ulaşabiliyorsunuz.

Screenshot_8Ve evet..

Laravel Projemiz aktif ve çalışıyor!

Kurulum kısmını başarıyla tamamladıysak ( Artisan da php için bir kaç bilgisayara ayar yapılıyordu şu an hatırlamıyorum ama sıkıntı olursa araştırabilirim) diğer işlemlere geçelim.

Hadi şimdi biraz karıştıralım bunu.

Screenshot_9

Aslında tüm olayın döndüğü APP kısmına geldik.. Şimdi burayı tanımamız çok önemli ki benim 1 ay boyunca “olm bunlar ne işe yarıyor, niye böyle klasörlemişler” diye salakça sorduğum dönemlerdi. O yüzden tek tek anlatıyım..

—-

Config:

Sitenin genel ayarlarının yaptığımız kısım.. Yani bu tüm sitelerdeki config.php nin klasör halinde tüm sistemler için olan hali.

Config Klasörü:

Screenshot_10

Evet burada tüm kullanabileceğimiz özelliklerin ayarlarını yapıyoruz..

Örnek olarak veritabanı bilgilerini (database.php) içerisinden ayarlayabiliyoruz yada cache ayarlarını cache içerisinden ayarlıyabiliyoruz..

Misal; veritabanını bağlamak istiyoruz.. Hemen PHPMyAdminden bir tablo oluşturup database.php yi açtığımız da karşımıza çıkan.

Screenshot_11

Ayarından tüm MYSQL bağlantı türlerini isteğimize göre kullanabileceğimizi görebiliyoruz.. Default değerini misal sqlite kullanmak istediğiniz de sqlite olarak değiştirip onun değerlerini dolduruyoruz.. Yada mysql kullanmak istediğimiz de yukarıda işaretli olan database,username ve pass değerlerini kendi mysql şifrelerimizi vs girip halledebiliyoruz.

Buradan istediğimiz şekilde tüm uygulamanın Veritabanı yönetimini ayarlayabilirsiniz.

Yada mail.php den sistem üzerinden atıcağınız mailler için mail servisleri ( bu mail atan siteler mailgun vs) o siteleri için yada SMTP için ayarları basit bir şekilde yapabiliyoruz.. Yani kolaylık tarafı da bu.. Ekstra kod yazmak yerine sadece gerekeni seçip, doldurup bırakıyoruz laravelde.

—-

Controllers:

Yukarıda bahsettiğimiz MVC yapısının Controller klasörü karşımızda..

BaseController temel kontroller olup controllerların bağlantısını o zımbırtı yapıyor. Yani silmeseniz iyi olur.. Homecontroller ise ilk kurumda test olarak gelen giriş ekranı için geçerli controller.

Screenshot_12

Home Controlleri açtığımızda karşımıza bir tane fonksiyon çıkıyor..

showWelcome fonksiyonu.. Evet ipin koptuğu ve dikkatimizin dağılmaması gereken nokta..

Bunu anasayfa olarak nasıl yaptık?

—-

Sırası değildi ama hemen girmek istiyorum.. Route yani rota olayı.. (Ulan ne rotası demiştim diyebilirsiniz 🙂 )..

Rota olayı şu hacı abi.. Siteye örnek olarak beyazitkolemen.com/ yazdın girdin ya.. Burada route.php o sayfaya girdiğinde hangi controllera yada hangi view’a  gidiceğini işaret ediyor.. Yani rotayı gösteriyor.

Burada önce ufak bir bilgi veriyim / işareti anasayfayı işaret ediyor.

Ve bu route olayında en çok iki fonksiyon kullancaz.. Get ve POST .. Yani normal bir veri almadan gösterebileceğimiz sayfalar için GET, formdan yada o sayfaya bir veri göndereceğimiz zaman ise POST.. Ek olarak group ve crud için ek özellikler var ama en çok get ve post u kullandığımızdan onları geçelim.

Şimdi rotayı şöyle örnek verelim.. Bir form sayfasına veri girdirmek istiyoruz.. Bu form sayfasını get le controller yada direk view a gönderebiliriz.. Formda girilen verileri almak istiyoruz misal.. Forma girdiğimiz route değerini yine bir controllera yada view aktarmak istediğimiz zaman ise POST kullanıyoruz.. Yani bu bildiğimiz PHP nin GET- POST olayı.

—-

Şimdi Route’da biraz modifiye yapıp özelleştirelim.

Örnek olarak şöyle bir projemden kullandığım rota bilgilerini gösteriyim.

Screenshot_13

Yukarı da örnek olarak siteadi.com/ yazdığımda nereye gideceğini yada siteadi.com/sepet yazdığımda hangi controllera gideceğini rotada belirttim.

Biz de burada hemen bir controllera gönderip oradan view a verimizi gönderelim. Yada direk view a da gönderebiliriz.

Örnek olarak anasayfaya geldiğinde ben bunu HomeController.Php deki anasayfa fonksiyonuna göndermek istiyorum.

Bunu

Şeklinde gönderebiliriz. AS olarak da bu rotaya bir isim verdik.. Örnek site içerisinde anasayfaya link vericez.. Ana sayfanın adresiyle uğraşmak yerine direk Route – Anasayfa diyerek HomeController içerisindeki Anasayfaya gönderebiliyoruz.

Buradaki olay şu.. Uses da en başındaki HomeController yazan Controller klasöründeki HomeController.PHP yi temsil ediyor. @ yazarak HomeController.PHP içerisindeki bir fonksiyonu vericez.

Hemen HomeController.PHP yi açalım. Ve bu şekilde düzeltelim.

Evet bir değer oluşturduk misal.. $Lahmacun diye ve return diyerek bu controller ı view klasöründeki Hello ya gönderdik.

Ama biz bunu bu şekilde gönderdiğimiz zaman hello sayfasına bir şey göndermemiş olacağız.. Bunu return yaparken yani template e gönderirken verimizi de eklememiz gerekiyor. Ben sıklıkla compact kullanıyorum ama with ile de gönderebiliriz bunu.

Yani bu şekilde eklediğimiz de lahmacun değerini tema klasörümüzde $lahmacun yazdığımızda “olsa da yesek” stringini karşılayabileceğiz.

Hemen VİEW e gelelim.

View klasörü tema dosyalarımızın olduğu klasör diyebiliriz (CSS-JS gibi dosyalarımızı baştaki Public de saklıyoruz ama)..

Hello.PHP yi açtığımız da ;

Screenshot_15

Karşımızda o ilk localhost:8000 yazdığımız da girdiğimiz sayfa ( Napmıştı Route değeri bunu direk tema klasöründeki helloya göndermişti. Biz araya controller ekleyip, controllerdan yine direk view’a gönderdik)

Ve hemen lahmacun kodumuzu gösterelim.

Screenshot_16

Screenshot_17Bu iş bu kadar!

Gördüğünüz gibi rota – controller – view olayı bu şekilde..

Model olayını veritabanı için kullanıyoruz genelde yada bir sınıf üretmek istediğimiz de. Onu da bir sonraki yazımda anlatıyım..

Umarım yazım anlatıcı olmuştur.

Laravelin kendi sitesinde bir çok kullanım söz konusu.

Bir sonraki yazımda Veritabanına Bağlanma – Form oluşturma ve GET-POST olaylarını anlatmak umuduyla.

Hoşçakalın.t

 

, ,

“Spagetti’den Laravel’e Geçiş” için 2 yanıt

  1. Barış dedi ki:

    Beyazıt selam,

    Ayrıca şöyle bir güzelliği var; Route gruplara ayrılabildiği gibi, üyelik kontrolü gerektiren kısımları da aynı gruplama yöntemini kullanabiliriz.

    Örn;
    Route::group( array(‘prefix’ => ‘paket’, ‘before’ => ‘uyelik’), function()
    {
    Route::get(“/{id}/yorumlar”, array(….));
    });

  2. Gökhan YILDIZ dedi ki:

    Gayet güzel bir anlatım olmuş. Benim tek sıkıntım bu laraveli osx üzerinde xampp içinde kuramamak. Kurabilen var mı acaba? 🙂

Bir Cevap Yazın