Spagetti’den Laravel’e Geçiş
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..
Karşımıza konsol dediğimiz msdos sayfası gibi bir sayfa çıkıcaktır.. İlk olarak composer ı test etmek için composer yazalım.
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;
1 |
composer create-project laravel/laravel your-project-name --prefer-dist |
Kodunu kullanıyoruz.
Bunu şöyle yapalım.
Örnek olarak ben
1 |
composer create-project laravel/laravel testproje --prefer-dist |
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.
Ve sistem bittiğinde
Karşımızda kurulumun tamamlandığına dair bir not çıkıyor ve keyimizi üretiyor.
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?
1 |
php artisan serve |
Composera hemen bu komutu yazalım.
(Laravel klasörü içerisindeyken sağ tıklayıp use composer here deyip yeni konsola da yazabilirsiniz)
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.
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.
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ü:
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.
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.
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.
1 2 3 4 |
Route::get('/', function() { return View::make('hello'); }); |
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.
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
1 |
Route::get('/', array('as' => 'anasayfa', 'uses' => 'HomeController@anasayfa')); |
Ş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.
1 2 3 4 5 6 7 8 9 10 11 |
<?php class HomeController extends BaseController { public function anasayfa() { $lahmacun = "olsa da yesek"; return View::make('hello'); } } |
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.
1 2 3 4 5 |
public function anasayfa() { $lahmacun = "olsa da yesek"; return View::make('hello',compact('lahmacun')); } |
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 ;
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.
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
laravel ,laravel ilk kullanım ,laravel kurulum ve kullanım
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(….));
});
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? 🙂