项目作者: ofke-yazilim
项目描述 :
Laravel 5.5 Wamp Server
高级语言: PHP
项目地址: git://github.com/ofke-yazilim/laravel-proje.git
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ı
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