# Laravel
Laravel, MVC yapısında web uygulamaları geliştirme için tasarlanmış ücretsiz, açık kaynak PHP web uygulama iskeletidir. Laravel, GitHub sitesinde barındırılan kaynak kodu ile birlikte, MIT lisansı altında yayınlandı.


## Tarihçe.
Taylor Otwell, Laravel'i kullanıcı kimlik doğrulaması (authentication) ve yetkilendirme (authorization) için yerleşik destek gibi belirli özellikleri sağlamayan CodeIgniter framework'üne daha gelişmiş bir alternatif sağlama girişimi olarak geliştirdi. Laravel'in ilk beta sürümü 9 Haziran 2011'de kullanıma sunuldu, ardından aynı ay içinde Laravel 1 sürümü yayınlandı.
2014 ve 2015 yıllarında Sitepoint tarafından yapılan en popüler PHP uygulama iskeletleri anketlerinde Laravel iki sene üst üste en üst sırada yer aldı. Nisan 2015 tarihindeki verilere göre Laravel github'da barındırılan PHP projeleri arasında en çok takip edilen ve en popüler projedir.
Laravel, versiyon 4'ten itibaren bağımlılık yönetimi (dependency management) için composer paket yöneticisini tercih etmiştir. Yine versiyon 4'ten itibaren Doctrine, Monolog gibi paketlerin yanı sıra web iskeletini oluşturan komponentler için Symfony2 paketlerinden yararlanmaktadır.
Versiyon 5 ile birlikte dizin yapısında önemli bir değişikliğe gidilmiş ve PSR-4 standartlarına daha uyumlu bir yapı haline getirilmiştir.
Versiyon 7 3 Mart 2020'de yayınlanmıştır. Laravel 7 ile birlikte yeni bir özellik olan Laravel Airlock ekosisteme eklenmiş ve rota hızı (routing speed) geliştirmeleri ile özel Eloquent ORM sınıflarını içeren birçok yenilik kullanıcılara sunulmuştur.
Laravel 8, 8 Eylül 2020'de Laravel Jetstream, model factory sınıfları, migration squashing, pagination tasarımı için Tailwind CSS ve diğer kullanılabilirlik iyileştirmeleri gibi yeni özelliklerle piyasaya sürüldü.
En son Laravel sürümü, 8 Şubat 2022'de piyasaya sürülen Laravel 9'dur. Route için controller metodu, anonymous migration, yeni str fonksiyonları gibi birçok yeniliklerle birlikte yayınlanmıştır.


## Özellikler.
Laravel' in en önemli tasarım noktaları aşağıda listelenmiştir:
  - Composer sayesinde hem iskelet bağımsız hem de laravel'e özgü yazılmış paketlerin kullanımına imkân verir.
  - Eloquent ORM kullanımı basit ve kullanışlı bir ActiveRecord mimari deseni uygulamasıdır. Veritabanındaki her bir tabloya karşılık gelen bir model sınıfı bulunur. Bu sınıf kullanılarak oluşturulan nesneler ile akıcı arabirim (fluent interface) kullanılarak sorgular oluşturulabilir.
  - Yüksek kabiliyetli rota (route) tanımları ile bağlantılar programatik olarak oluşturulur. Rotalara isim vermek ya da rotaya cevap veren controller ve action tanımları ile programatik olarak URL oluşturmak mümkündür. Böylece SEO ya da diğer ihtiyaçlar nedeniyle gereken URL değişikliklerinin projenin genelinde kullanılan linklerde otomatik olarak görülmesini mümkün kılar.
  - Güçlü blade şablon dili ile MVC mimari deseninin View (V) kısmına çözüm sağlanır. View için blade kullanmak mecburi değildir, öntanımlı olarak PHP dilinin kendisi de bir şablon dili olarak tercih edilebilir.
  - İçerisinde kimlik doğrulama (authentication) ile ilgili hazır yapı bulunmaktadır. Yapı aktif hale getirildiği zaman yetkilendirmenin yanı sıra e-posta onaylama, "şifremi unuttum" özelliği gibi ihtiyaçlar için başlangıç dosyaları otomatik oluşturulur.
  - XSRF güvenlik açığı için hazır çözümü bulunmaktadır.
  - Migration ve data seeder özellikleri ile veritabanı şeması versiyonlaması ve otomatik veri girişi imkânı sağlamaktadır.
  - Yüksek I/O gerektiren ya da uzun süren işler için queue kütüphanesine sahiptir.
  - Arka planda ya da komut satırı üzerinden çalışması gereken programlar için altyapı sağlamaktadır.
  - Çoklu dil desteği bulunmaktadır.
  - Popüler SwiftMailer kütüphanesi üzerine kurulu e-posta gönderim kütüphanesi mevcuttur.
  - Birim testleri (unit testing) ve fonksiyonel testler (functional testing) için gerekli altyapı iskelete entegre edilmiş durumdadır.
  - Otomatik sayfalama desteği ile dizi ya da veritabanı sonuçları kolayca sayfalandırılabilir.


## Örnek Laravel kodu.
<?php
use Illuminate\Support\Facades\{Route, Mail};
use App\Models\User;
Route::get("/users/{user}", function(User $user) {
 return $user;
Route::post("/users", function(App\Http\Requests\CreateUserRequest $request) {
 $user = User::create($request->validated());
 Mail::to($user->email)->send(new App\Mail\WelcomeMessage);
 return $user;