Laravel 5.6 Wamp Server
- Windows üzerine http://www.wampserver.com/en/# adresinden wamp server indirip kuruyoruz.
- Wamp server kurulumu bittikten sonra C://wamp64/www dizini içerisinde laravel adında bir klasör oluşturuyoruz.
- Ardından composer kullanarak laravel dosyalarını laravel klasörümüzün içerisine kuruyoruz.
-
Not : Windows Üzerine Composer kurulumu yapmadıysanız Aşağıdaki Adımları Takip Edin
- Composer nasıl kurulur : https://getcomposer.org/Composer-Setup.exe adresinden indirilen exe next, next ile kurulur.
- Ardından command ekranı kullanılarak composer eklenmek istenilen projeye gidilir örneğin ben wamp üzerinde proje yapıyorum "cd C:\wamp64\www\laravel" bu projeye gidebilirim.
- Proje yolunu command ekranında tanıttıktan sonra "composer init" yazarak composer.json dosyamı oluturuyorum. (composer.json oluştururken bir kaç bilgi isteyecek bizden.girerek enter yapalım.)
- Command ekranında cd C:\wamp64\www\laravel dizinine giderek
composer create-project --prefer-dist laravel/laravel laravelproje
Kodunu çalıştırıyorum bir süre sonra laravel kurulumum tamamlanıyor. -
Yukarıdaki adımları takip edip Laravel dosyalarımı local bilgisayarıma indirdim şimdi sanal sunucu oluşturarak projenin çalışmasını sağlamalıyım bunun için aşağıdaki adımları takip etmeliyim.
- Wamp server ile kurulu olarak gelen apache dizini içerisinde bulunan httpd.conf dosyası açılarak Include conf/extra/httpd-vhosts.conf yazısı bulunur ve aktif edilir.
Not : Benim httpd.conf dizinimin dosya yolu :
C:\wamp64\bin\apache\apache2.4.23\conf \ httpd.conf - Daha sonra C:\wamp64\bin\apache\apache2.4.23\conf\extra dizini içerisinde bulunan httpd-vhosts.conf dosyası açılarak sanal sunucu yönlendirmeleri yapılır . Örneğin ben laravel projemin http://laravel.localhost/ şeklinde açılmasını istiyorsam https://github.com/ofke-yazilim/laravel-proje/blob/master/httpd-vhost.conf dosyasında bulunan kodları httpd-vhosts.conf dosyasının en altına eklerim .
- Wamp server ile kurulu olarak gelen apache dizini içerisinde bulunan httpd.conf dosyası açılarak Include conf/extra/httpd-vhosts.conf yazısı bulunur ve aktif edilir.
- Yukarıdaki işlemlerden sonra wamp server restart edilir ve browser açılarak http://laravel.localhost/ adresine gidilerek projenin çalıştığı görülür.
- Öncelikle projemiz içerisinde kullanacağımız veritabanı bilgilerini .env dosyasına belirtiyoruz. .env dosyası direk ana dizin içerisinde bulunur.
-
Migration kullanılarak database içerisinde tablolar oluştururuz. Migration dizini dosya yolu: /database/migrations
- Migration class dosyası terminal ekranına kodu php artisan make:migrate usertable yazılarak oluşturulur. Usertable adında bir class oluşturduk.
- Yukarıdakinden farklı olarak php artisan make:migrate usertable --create:user yazılarakda migration oluşturulur. Burada up ve down fonksiyonları dolu gelir bu kodla migration oluşturmak daha mantıklıdır. user database içerisine oluşacak olan tablonun ismidir.
- Oluşan migration dosyasına girilerek oluşturulmak istenen tablo özellikleri ayarlanır.
- Migration iki adet fonksiyon taşır. up fonksiyonu tablo oluştururken down oluşan tabloyu kaldırır. up fonksiyonu içerisine tabloya ait sütun özellikleri belirtilir.
Örnek(Tablo oluşturma): https://github.com/ofke-yazilim/laravel-proje/blob/master/database/migrations/2017_12_08_182505_usertable.php
Örnek(Oluşturulmuş Tablo Güncelle) : Örnek(Tablo oluşturma): https://github.com/ofke-yazilim/laravel-proje/blob/master/database/migrations/2017_12_08_182649_userupdate.php - Tablo özellikleri belirtildikten sonra php artisan migrate kodu çalıştırılır ve özellikleri belirtilen tablo veritabanına oluşturulur.
- Daha önce tanımlamış olduğumuz migration üzerinde güncelleme yapmak için php artisan make:migration user_add_colums --table:user kodunu çalıştırmamız yeterli
bu kod user tablosunda güncelleme işlemi yapacağımız yeni bir migration oluşturur bu migration dosyası açılıp düzenlemeler yapıldıktan sonra
php artisan migrate komutu ile yapılan değişiklikler database üzerine aktarılır.
Örnek(Oluşturulmuş Tablo Güncelle) : Örnek(Tablo oluşturma): https://github.com/ofke-yazilim/laravel-proje/blob/master/database/migrations/2017_12_08_182649_userupdate.php - Migration ile ilgili ayrıntılı bilgi için bakınız: https://laravel.com/docs/5.5/migrations
Aşağıda Bahselilen Satır numaralarını incelemek için https://github.com/ofke-yazilim/laravel-proje/blob/master/routes/web.php sayfasını açınız.
- Route üzerinde direk view ekranına yönlendirme yapabiliriz.Benim projem içerisinde routes/web.php 15. satırda örnek görebilirsiniz.
- İşlemleri direk olarak route üzerinde yapabiliriz. Örneğin ekrana bir string yazdırabiliriz.Örnek için 21. satır inceleyebilirsiniz.
- Url üzerinde herhangi bir parametre göndrerek işlem yapabilirsiniz. Örnek için 26. satır.
- Url üzerinden parametre gönderme işlemlerinde eğer istenilen parametre gönderilmez ize hata verir örneğin diyelim ki http:\\laravel.localhost\urunler\1 şeklinde çalışan bir adresimiz olsun eğer biz bu adresi http:\\laravel.localhost\urunler\ şeklinde çalıştırır isek hata verir bu hatayı optional kullanral önleyebiliriz optional parametre boş olarak gelirse default olarak atanan bir değere göre işlem yapmamızı sağlar. Örnek için 31. ve 38. satırlar.
- Kullanılan route işlemine isim vermek için bakınız 45.satır. Route verilen isim sayfa içerisinde yani view yapıları içerisinde tanımlamada kolaylık sağlar. Örneğin bir route işlemine "routeislem" adında tanımlar ise view içerisinde yönlendirme link adresine {{route('routeislem')}} yazılarak ulaşılabilir.
-
Route üzerinden controller dosyasına yönlendirme örneği için 52. satırı inceleyebilirsiniz.
-
Controller dosyaları Model ve view yapıları arasında köprü görevi gören dosyalarımızdır.
- Laravel üzerinde controller dosyları /app/Http/Controllers içerisinde bulunur.
- Yeni bir controller oluşturulurken iki yöntem vardır 1.yöntem php artisan make:controller newcontroller Bu yöntem ile newcontroller.php adında bir controller dosyamız oluşur. Bu dosya içerisinde class hazır gelir fakat fonksiyonları biz oluştururuz. Örneğin : https://github.com/ofke-yazilim/laravel-proje/blob/master/app/Http/Controllers/newcontroller.php
- 2. yöntem ise php artisan make:controller new2controller --resource şeklinde çalışan sistemdir.
Bu yöntemde index,store,create.. vb fonksiyonlar hazır olarak gelir.
Örneğin https://github.com/ofke-yazilim/laravel-proje/blob/master/app/Http/Controllers/new2controller.php dosyasını inceleyebilirsiniz. - 2.yöntem ile tanımlama yaparsak route yönlendirme işlemlerini çok kolaylaştırmış oluruz öreneğin yukarıda oluşturmuş olduğumuz new2controller adındaki controller dosyasına yönlendirme yaparken Route::resource('yonetimpaneli','new2controller'); yazarız bu sayede hazır olarak gelen tüm fonksiyonların yönlendirme linkleri oluşturulmuş olur. Örnek için 130.satır.
- Route üzerinde namespace kullanımı : Namespace şu nedenle gereklidir diyelimki urunler adında iki adet controller oluşturmak istiyoruz
Bu controllerden biri kullanıcı arayüzü işlemleri için diğeri yönetim paneli işlemleri için kullanılmak isteniyor olsun fakat aynı klasör
içinde urunler adında iki adet dosya oluşturulamaz bu sebeple namespace geliştirilmiştir yani iki farklı klasör oluşturulur ve bu klsörler
içerisine urunler adında controller dosyası oluşturulur.Şimdi kullanıcı arayüz urunler için ve yönetim paneli ürünler için
kullanılacak olan controller dosyalarını oluşturan kodları yazalım.
php artisan make:controller admin/urunler --resource
php artisan make:controller kullanici/urunler --resource
Controller dosyalarımız oluştu şimdi bu controller dosyalarına route üzerinde nasıl yönlendirildiğini görmek için 33.satır- 43.satır arasını inceleyebilirsiniz. - Oluşturulan route yönlendirmelerinin listesini ve link yapılarını görebilmek için php artisan controller:list kodu kullanılır.
- Route dosyası içerisinde query builder işlemleri yapıldı örnek query builder kullanımları için. 66. satırdan itibaren inceleyebilirsiniz. Daha ayrıntılı bilgi için https://laravel.com/docs/5.5/queries adresini ziyaret edin.
- Collection için Controller dosyasında yapılan örneklere : https://github.com/ofke-yazilim/laravel-proje/blob/master/app/Http/Controllers/newcontroller.php dosyasından inceleyebilirsiniz.
- Collectionların view üzerinde kullanım örnekleri için : https://github.com/ofke-yazilim/laravel-proje/blob/master/resources/views/collection.blade.php dosyasına bakabilirsiniz.
- Daha Ayrıntılı Öğrenmek için : https://laravel.com/docs/5.5/collections adresini ziyaret edin.
- Model dosyamızı oluşturmak için php artisan make:model Kullanici yazarız bu sayede default olarak Kullanicis tablosunda işlem yapacak olan Model dosyamız /app/Http/Kullanici.php şeklinde oluşur.
- Ayrıca Model dosyamızı oluşturuken aynı zamanda migration dosyamızıda oluşturan bir kod vardır. php artisan make:kullanici -m bu kod sayesinde Model dosyamız /app/Http/Kullanici.php dosya youlunda oluşurken aynı zamanda bu Model dosyamızın işlem göreceği tablo olan Kullanicis tablosunun özelliklerini ve sütun isimlerini belirtebileceğimiz migration dosyamız ise /database/migrations/ dizini altında oluşur. Bu durumda önce gidip migration dosyamızı kullanarak 2.1 başlığı altında anlattığım Migration Kullanım Aşamalarını takip ederek database üzerine tablomuzu oluşturmalıyız. Dilersek default olarak gelen kullanicis tablosu ismini migration dosyamız içerisinden istediğimiz şekilde değiştirebiliriz. Eğer Tablo ismini değiştirdik ise ozaman Model dosyamız içerisinde bulunan class içerisine yeni tablo ismimizi tanıtmalıyız bu tanıtımı ise protected $table = "kullanicilar"; yazarak yapabiliriz. Ben bu kodu yazarak Model dosyamın artık kullanicilar tablosunda işlem yapmasını istediğimi belirtiyorum.
-
ORM Sorgu örneklerini https://github.com/ofke-yazilim/laravel-proje/blob/master/app/Http/Controllers/newcontroller.php dosyasında index fonksiyonu
içerisinde gerçekletirdim. Daha önce Route dosyam içerisinde 66. satırdan sonra query builder örnekleri yapmıştım bu
örnekler içerisinde kullandığım methodlar ORM işlemleri için de geçerlidir.
Örnek Query Builder Methodları için : https://laravel.com/docs/5.5/queries adresini ziyaret ediniz.
- Bu Relationships türü ile iki tablo arasında bire bir ilişki kurmamızı sağlar.
- Örneğin bir image tablosu oluşturalım ve bu tablo üzerinde kullanıcılara ait resim bilgileri tutulsun. Her kullanıcı için tek bir resim tutulabiliyor olsun işte bu durumda One To One kuralı geçerlidir.
-
Model dosaymız üzerindeki one to one işlemlerini : https://github.com/ofke-yazilim/laravel-proje/blob/master/app/kullanici.php
https://github.com/ofke-yazilim/laravel-proje/blob/master/app/Image.php dosyalarından inceleyebilirsiniz. - Controller dosyamız içerisindeki örnekler için https://github.com/ofke-yazilim/laravel-proje/blob/master/app/Http/Controllers/newcontroller.php dosyasında index methodu içerisinde 52. satırdan itibaren inceleyebilirsiniz.
-
Daha önce kullanıcıları tutan tabloya ait migration ve model dosyalarımı oluşturmuştuk.
Şimdi Kullanıcılara ait makale verilerini tutacak olan
makale tablom için model ve migration dosyalarını oluşturmak için terminal ekranına
php artisan make:model Makale -m kodunu yazalım Makale tablomuz için
Model dosyamız ve migration dosyamız oluştu şimdi migration dosyamızı oluşturmak istediğimiz
tablo özelliklerine uygun olarak hazırlayarak php artisan migrate kodunu yazalım
veritabanına makaleler tablomuz eklendiğini göreceğiz daha sonra Makale model dosyamızı açarak tablo ismimizi tanıtalım.
Makale Model Dosyası : https://github.com/ofke-yazilim/laravel-proje/blob/master/app/kullanici.php
Makale Migrations Dosyası : https://github.com/ofke-yazilim/laravel-proje/blob/master/database/migrations/2017_12_12_124217_create_makales_table.php -
Makale Kullanıcı tablom ve Makale tablom arasında kurmuş olduğum one to many relatioships ilişkisinin Model dosylarında nasıl sağlandığını görmek için.
https://github.com/ofke-yazilim/laravel-proje/blob/master/app/kullanici.php
https://github.com/ofke-yazilim/laravel-proje/blob/master/app/Makale.php dosyalarını inceleyebilirsiniz. - Controller dosyamız içerisindeki örnekler için https://github.com/ofke-yazilim/laravel-proje/blob/master/app/Http/Controllers/newcontroller.php dosyasında index methodu içerisinde 64. satırdan itibaren inceleyebilirsiniz.
- Orm sorguları ile database üzerinde çekilen verinin view üzerine listelenem örneğini https://github.com/ofke-yazilim/laravel-proje/blob/master/resources/views/makaleler.blade.php dosyasını açarak inceleyebilirsiniz.
- Öncelikle Urunler modeli ve urunler tablosunu oluşturmamızı sağlaycak urunler migration dosyası oluşturulur.
- Elimizde bulunan kullanicilar ve urunler tabloları arasında bağlantı sağlayabilemek için bir bağlantı tablosu oluşturuyoruz. Bu tabloyu oluşturmak için öncelikle özelliklerini girebileceğimiz migration dosyasını oluşturalım php artisan make:migration kullanici_urunler_baglanti --create=urun_kullanici_baglanti Oluşturmak istediğimiz urun_kullanici_baglanti tablosuna ait sütun özelliklerini migration dosyamızda tanımlayarak (tanımladığımız sütun özellikleri ise ürün id değerini tutan urun_id ve kullanıcı id değerini tutan kullanici_id) php artisan migrate yazıyor ve tablomuzu oluşturuyoruz. yazarak tablomuzu database içerisinde oluşturuyoruz.
- Artık kullanıcılar ürün aldıklarında aldıkları bu ürüne ait urun_id ve kullanıcıya ait kullanici_id değerleri birlikte bu bağlantı tablosuna eklenmeli.
- Many To Many Relationships ilişkisinin Model dosyları üzerinde nasıl kullanıldığını görmek için https://github.com/ofke-yazilim/laravel-proje/blob/master/app/kullanici.php ve https://github.com/ofke-yazilim/laravel-proje/blob/master/app/Urun.php dosyalarını inceleyebilirsiniz.
- Controller dosyamız içerisindeki örnekler için https://github.com/ofke-yazilim/laravel-proje/blob/master/app/Http/Controllers/newcontroller.php dosyasında index methodu içerisinde 76. satırdan itibaren inceleyebilirsiniz.
- Model dosyası üzerinde örnek kullanım için https://github.com/ofke-yazilim/laravel-proje/blob/master/app/Makale.php dosyasını inceleyebilirsiniz.
- Controller dosyası üzerinde kullanımı için https://github.com/ofke-yazilim/laravel-proje/blob/master/app/Http/Controllers/newcontroller.php dosyasını 81. satırı inceleyebilirsiniz.
- Önce Makale ve ürün resimlerinin tutulacağı tabloyu ve Orm işlemlerimizi yapacağımız Model dosyamızı oluşturalım. Tablomuzun sütun özelliklerini tanımlayacağımız Migration dosyamızı ve Orm işlemleri için kullnacağımız model dosyamızı oluşturmak için terminal ekranımıza php artisan make:model Resim -m kodunu yazıyoruz.
-
Resimler için oluşturmuş olduğumuz Migration dosyasını açarak sütun özelliklerini tanımlıyoruz. Bu tabloda Polymorphic ilişki için iki önemli
sütun tanımlamalıyız bu sütunlardan biri {Senin Belirleyeceğin Bir Değer}_id ve {Senin Belirleyeceğin Bir Değer}_type şeklinde olmalıdır(Örnek : image_id,image_type).
Diğer sütunları istediğin gibi ayarlayabilirsin.
Örnek Kullanım : https://github.com/ofke-yazilim/laravel-proje/blob/master/database/migrations/2017_12_14_063050_create_resims_table.php - Örnek kullanımdan da gördüğünüz şekilde tanımlamalar yapıldıktan sonra php artisan migrate yazılarak database üzerinde resimler tablomuz oluşturulur.
-
Resimler Tablomuz üzerinde database işlmelerini sağlaycak olan Resim Adındaki model dosyamız açılarak resimler tablosu model dosyamıza tanıtılır.
Model Dosyası : https://github.com/ofke-yazilim/laravel-proje/blob/master/app/Resim.php - Resimler tablomuzdan örneğin Makalelerimize ait resimleri alabilmek için kurmuş olduğumuz Polymorphic Bağlantı örneği için https://github.com/ofke-yazilim/laravel-proje/blob/master/app/Resim.php adresi üzerindeki model dosyamızı inceleyebilirsiniz.
- One To Many Polomorfik İlişkisi için Controller dosyası üzerinde yapılan örneği : https://github.com/ofke-yazilim/laravel-proje/blob/master/app/Http/Controllers/newcontroller.php dosyası 85. satırdan itibaren inceleyebilirsin.
- Öncelikle terminal ekranında projemizin bulunduğu dosya dizini içerisinde composer require phpmailer/phpmailerkodunu çalıştırıyoruz. Composer kullanarak phpmailler sınıfını projemize dahil etmiş olduk.
- Daha sonra Mail gönderimi yapcağımız controller dosyası içerisinde en üst kısma use PHPMailer\PHPMailer; yazarak projemize PHPMailler sınıfını dahil ediyoruz.
- Örnek Gönderim kodları için : https://github.com/ofke-yazilim/laravel-proje/blob/master/phpmailler.txt adresini inceleyebilirsiniz.
- Middleware yapısını ara katman olarak düşünebiliriz. Sayfa üzerinde işlemler yapmadan önce gerçekleştireceğimiz işlemler için kullanabiliriz. Örneğin Kullanıcı girişi yapılmış mı ya da kullanıcının ilgili sayfaya erişmeye izni var mı gibi kontroller sağlayabiliriz. Fakat ben kullanıcıların girdiği ilgili sayfa üzerinde log bilgisinin alınması işlemini gerçekledim.
- Öncelikle Log kayıtlarımı tutabileceğim bir model ve migration oluşturuyorum. Projemin bulunduğu ilgili dizinde php artisan make:model Log -m kodunu çalıştırarak Log Adında bir model sınıfı ve logs adında tablomu oluşturacağım migration dosyam oluşmuş oldu. Migration dosyamı açarak sütun tanımlarımı yapıyorum ardından php artisan migrate kodunu çalıştırarak ilgili log tablosunu oluşturuyorum.
- Log Model sınıfını açarak kayıt işlemlerini yapacağım static fonksiyonumu tanımlıyorum.
- Ardından Middleware oluşturmak için php artisan make:middleware LogActivity yazarak LogActivity adında bir middleware oluşturuyorum middleware dosyasını açarak handle fonksiyonu içerisinde dilediğim işlemleri gerçekleyebiliyorum.
- Son olarak app klasörü içerisinde kernel.php dosyasını açarak $middleware içerisine 'LogActivity' => \App\Http\Middleware\LogActivity::class, şeklinde middlewaretanımlamamızı yapıyoruz. Artık middleware kullanılmaya hazır.
rm -rf vendor/ composer.lock
composer install --no-dev
composer update --no-dev