laravel-proje Wamp 3.1.0 Local Windows Projesi

Laravel 5.6 Wamp Server

1 - LARAVEL KURULUMU VE WİNDOWS SANAL SUNUCU OLUŞTURULMASI

  • 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 .

  • 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.

2 - LARAVEL KULLANIM AŞAMALARI


2.1 Migration Kullanımı

  • Ö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

2.2 Route ve Controller Kullanımı

Route Laravel üzerinde yönlendirme işlemlerini yaptığımız kısımdır. Laravel 5.6 üzerinde yönlendirme işlmeleri ana dizin içerisinde routes/web.php üzerinde yapılmaktadır.Routes isteklerin bir controller dosyasına ya da view dosyasına yönelmesini sağlar ya da yönlendirme yapmadan işlemlerinizi direk bu kısımda yapablirsiniz. Ayrıntılı kullanım örneklerini : https://github.com/ofke-yazilim/laravel-proje/blob/master/routes/web.php adresinden inceleyebilirsiniz.

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.

      2.2.1 Controller İşlemleri

      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.

2.3 Collection Kullanımı

Collectionlar Laravel içerisinde bulunan ve dizileri kullanmayı daha kullanışlı bir hale sokan methodları içeren bir sınıftır. Bu sınıfı kullanarak array verilerimizi collectionlara çevirerek daha kolay işleyebileceğiz.

2.4 Model ve ORM Yapıları

ORM : Oluşturmuş olduğumuz nesnemiz ile veritabanı bağlantısından bağımsız olarak yapmış olduğumuz veritabanı işlemleridir. ORM üzerinde bildiğimiz klasik sql sorguları yani select,update.. vb. bulunmamaktadır. Bu sayede ORM ile yapmış olduğumuz kodlama tüm veritabanı sistemlerinde geçerli olur. Laravel üerinde kullandığımız Model yapımız ise ORM ile yaptığımız işlermleri kapsamaktadır.
  • 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.

2.5 Eloquent: Relationships Kullanımı

Relationships : Sql sorgularında yapmış olduğumuz join işlemlerinin ORM üzerindeki karşılığıdır. Yani tablolar arası ilişkileri temsil ederler.

2.5.1 One To One Relationships

2.5.2 One To Many Relationships

Örneğin: Kullanıcıları tutan ve bu kullanıcılara ait makaleleri tutan iki tablomuz olsun bir kullanıcının bir çok makalesi olabilir. Bu sebeple bu iki tablo arasında One To Many ilişkisi vardır.

2.5.3 Many To Many Relationships

Örneğin : Ürünler tablomuz olsun ürünler tablomuz ve kullanıcı tablomuz arasında ilşki kurarken şöyle bir durum oluşur. Bir ürünü bir çok kullanıcı alabilir aynı zamanda bir kullanıcı bir çok ürün almış olabilir. İşte bu ilişki sitline Many To Many Relationships adı verilmektedir.
  • Ö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.

2.5.3 Has Many Through Relationships

Elimizde üç tablomuz bulunsun bu üç tablodan birini bağlantı tablosu gibi kullanarak diğer tablolardaki verilere ulaşmamızı sağlayan ilişki türüne Has Many Through denir. Örneğin elimizde image,kullanici ve makale tabloları mevcut olsun makaleyi yazan kullanıcının image blgisine ulaşabilmek için, image ve makale tabloları arasında kullanıcı tablosunu bağlantı tablosu olarak kullanırız işte bu ilişki yöntemi has many through diye adlandırılır. Bu örnekte makale tablosu içerisinde bulunanan kullanici_id ile kullanici tablosunda bulunanan id değeri eşleştirilir. Daha sonra Kullanici tablosu üzerinde bulunan image_id değeri ile image tablosunda bulunan id değeri eşleştirilerek sonuçlar alınır.

2.6 Eloquent: Polymorphic Relationships Kullanımı

Polymorphic İlişkinin ne olduğunu şöyle bir örnek ile açıklayabilirim: Bizim Makale ve Urun tablolarımız olduğunu düşünelim. Makale ve ürünlerimize ait resimleri tek bir tablo içerisinde tuttuğumuzu ve bu tablonun isminin ise resimler tablosu olduğunu varsayalım. Resimler tablosu ile Makale ve Urun tabloları arasında olab bu ilişki türüne Polymorphic ilişki denir. Ayrıntılı İncelemek İçin : https://laravel.com/docs/5.5/eloquent-relationships#polymorphic-relations

2.6.1 One To Many Polymorphic Relationships Kullanımı

  • Ö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.

2.7 Laravel 5.4 PHPMailler Kurulum ve Kullanımı

  • Ö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.

2.8 Laravel 5.4 Middleware Kullanımı

  • 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.

Composer Kullanarak Yükleme Yapılamaz ise

rm -rf vendor/ composer.lock
composer install --no-dev
composer update --no-dev