Laravel 5.3
The PHP Framework For Web Artisans
Laravel Life Cycle
ROUTES: Gelen istekleri karşılar ve controller’a gönderir.
MODELS : Veritabanını sorgular ve gerekli verileri döndürür.
VIEWS : Template Engine ile render edilmiş görünüm sayfalarıdır.
CONTROLLERS : Kullanıcı isteklerini idare eder, modellerden veri alır ve görünümlere iletir.
Laravel Root / App
Öncelikle /app dizinine bir göz atalım.
Uygulamamızın ana dizini /app klasörüdür.
Uygulama geliştirirken, neredeyse vaktimizin tamamını
bu klasör altında geçireceğiz.
Console
Tüm artisan komutlarını içerir.
Http
Tüm denetçilerinizi (Controllers), ara katmanlarınızı
(Middlewares), gelen isteklerinizi (Requests) ve
rotalarınızı içerir.
Providers :
Tüm uygulama servis sağlayıcılarını içerir. Laravel’in
çekirdek hizmetlerinin tamamı servis sağlayıcılar
tarafından önyüklenebilir.
Laravel Root / App
Events
Tüm etkinlik sınıflarını içerir.
Listeners
Etkinlik sınıflarını dinleyen listener sınıflarını içerir.
Exceptions
Uygulamaki özel durum hatalarını yakalayan sınıfları
içerir.
Jobs
Uygulamanız tarafından sıraya alınan tüm işleri içerir.
Policies
Uygulamanız için yetkilendirme sınıflarını içerir. Bir
kullanıcının bir işlemi gerçekleştirebileceklerini belirlemek
için kullanılır.
Not: Klasör içerisindeki user.php bir model dosyasıdır.
Laravel dizin yapısında model klasörü bulunmamaktadır.
Model sınıfları /app dizininin altında oluşturulmaktadır.
Laravel Root / Other
bootstap
Uygulamanın autoloading ve önbellek dosyalarını içerir.
config
Uygulamanın ayar dosyalarını içerir.
Laravel Root / Other
database
Veritabanı Seeder ve Migration dosyalarını içerir.
Örnek Migration
Laravel Root / Other
public
Resimler, CSS, Javascript dosyalarını içerir.
resources
Görünüm (views) ve dil dosyalarını içerir.
Laravel Root / Other
Storage
Tüm compile edilmiş blade şablonlarını, cache
dosyalarını ve log kayıtlarını içerir.
tests
Test sınıflarını içerir.
vendor
Uygulamadaki paket bağımlılıklarını içerir.
Application Example
Örnek bir veri listeleme işlemi yapalım.
Uygulamayı ilk kez indiriyorsanız aşağıdaki adımları takip ediniz.
1. git clone https://github.com/laravel/laravel.git
2. cd laravel
3. cp .env.example .env
4. composer install
5. php artisan key:generate
Application Example
Uygulamayı host ediyoruz.
• php artisan serve
Application Example
Uygulama host edildi. Artık örnek uygulamaya başlayabiliriz.
Application Example
Terminal’I açıp uygulama dizinine geliyoruz. Artisan komutuyla yeni bir controller
oluşturuyoruz.
php artisan make:controller ExampleController
IDE ile projemizi açıp /app/Http/Controller
dizininde ExampleController.php dosyasını
göreceksiniz.
Hemen düzenlemeye başlıyoruz.
Sınıf içerisine index adından yeni bir
fonksiyon tanımlayalım.
Application Example
Peki bunun çıktısını nasıl göreceğiz ?
Bunun için hemen /routes/web.php dosyasını açıp rotamızı ilgili sınıfın fonksiyonuna
bağlıyoruz.
Gelen URL parametresi ile sınıf içerisindeki fonksiyonu bağlıyoruz.
Application Example
Browser’a gelip hemen kontrol edelim.
Gördüğünüz gibi rotamızı ExampleController’ın index fonksiyonuna başarıyla
Bağlamış olduk.
Application Example
Route’da aşağıdaki gibi bir fonksiyonda kullanılabilir ama bu tavsiye edilen bir yöntem
değildir.
GET yöntemiyle bir istek yapmış olduk. Mevcut yönlendirici yöntemlerini de sıralayalım.
Application Example
Bazen birden çok HTTP fiiline yanıt veren bir yönlendirme kayıt etmeniz gerekebilir.
Bunu match yöntemi kullanarak yapabilirsiniz.
Route Parametreleri
URL içerisindeki ID’yi yakalamak için yönlendirme parametreleri tanımlayabilirsiniz.
Application Example
Örneklere devam ediyoruz. DuyuruController içerisinde liste oluşturup bunu view
dosyasına göndereceğiz.
• Rotamızı belirleyelim.
Route::get('/duyurular', 'DuyuruController@liste');
• Terminal üzerinden Controller’ı oluşturalım.
Php artisan make:controller DuyuruController
• resources/views/ klasörü içerisinde duyurular.blade.php adında bir dosya
oluşturalım.
Application Example
DuyuruController içerisinde aşağıdaki fonksiyonu yazalım.
Peki ne yaptık ?
$duyurular adında bir dizi oluşturduk. duyurular.blade.php adında ki view dosyasına with ile
duyurular değişkenini with ile gönderdik. Laravel, Blade Template Engine’i kullanır ve compile
edilebilmesi için view dosyalarının sonuna .blade eklenmelidir.
Örneğin; dosyaadi.blade.php ( View’i return ederken yanlızca dosya adı yazılır.
Dosya, view dizini içerisinde bir alt klasör içerisinde olduğunda klasoradi.dosyaadi seklinde
yazıyoruz.
Application Example
Şimdi duyurular.blade.php dosyamızı açıp gönderilen değişkeni listeleyelim.
Bu bölümde Blade’I anlamaya
çalışacağız.
Blade içerisinde <?php ?> tagları
kullanılabilir fakat tercih edilen bir
yöntem değildir.
Döngüler
@foreach($cogul as tekil)
@endforeach
Tag
<?php tagları yerine çift süslü parantez
kullanılır.
{{ $var }}
Application Example
Şimdi browser’da duyurular linkine tıklayalım.
http://localhost:8000/duyurular
Application Example
BLADE TEMPLATE ENGINE
Blade, Laravel ile gelen pratik, ancak güçlü şablonlama motorudur. Diğer popüler PHP şablonlu motorların
aksine, Blade, view dosyalarında düz PHP kodunu kullanmanızı kısıtlamaz. Aslında, tüm Blade görüntüleri
düz PHP kodu halinde derlenir ve değiştirilene kadar önbelleğe alınır, yani Blade uygulamanıza sıfır yük
ekler. Blade görünümü dosyaları .blade.php dosya uzantısını kullanır ve genellikle resources / views
dizininde saklanır.
Layout Kullanımı
İlk olarak, bir ”master" sayfa düzenini inceleyeceğiz. Çoğu web uygulaması çeşitli genel sayfalarda
aynı genel düzenini koruduğu için, bu düzeni tek bir blade görünümü olarak
tanımlamak daha uygundur:
Application Example
BLADE TEMPLATE ENGINE
Master Layout
(views/layouts/master.blade.php)
Extends Master
(views/blog.blade.php)
Application Example
BLADE TEMPLATE ENGINE
Bazen bir değişkeni yazdırmak isterken değişkenin tanımlanmış olduğundan emin olamadığımız
durumlarda shorthand if/else yapısını kullanırız.
Bunun yerine blade ile aşağıdaki kısayolu kullanabiliriz. Blade bunu üçlü ifade gibi derleyecektir.
Varsayılan olarak, XSS saldırılarını önlemek için Blade {{}} ifadeleri otomatik olarak PHP'nin
htmlentities işleviyle gönderilir. Verilerinizin çıkmasını istemiyorsanız aşağıdaki sözdizimini
kullanabilirsiniz:
Application Example
BLADE TEMPLATE ENGINE
IF/ELSE
If ifadelerini @if, @elseif, @else ve @endif yönergelerini kullanarak oluşturabilirsiniz. Bu yönergeler PHP
eşdeğerleriyle aynı işlevi görür:
Application Example
BLADE TEMPLATE ENGINE
IF/ELSE
If ifadelerini @if, @elseif, @else ve @endif yönergelerini kullanarak oluşturabilirsiniz. Bu yönergeler PHP
eşdeğerleriyle aynı işlevi görür:
UNLESS
Kolaylık sağlamak için, Blade ayrıca bir @unless
yönergesi sağlar. (Sonuç false ise)
Application Example
BLADE TEMPLATE ENGINE
LOOP
Koşullu ifadelere ek olarak, Blade PHP'nin döngü yapılarıyla çalışmak için basit yönergeler sağlar. Yine, bu
yönergelerin her biri PHP eşdeğerleriyle aynı işlev görür:
Application Example
BLADE TEMPLATE ENGINE
Döngüler
Döngüler kullanırken, döngüyü de sonlandırabilir veya geçerli yinelemeyi atlayabilirsiniz:
Koşulu tek bir satırda da belirtebilirsiniz.
Application Example
BLADE TEMPLATE ENGINE
Loop Değişkeni
Döngü yaparken, döngü içinde $loop değişkeni bulunur. Bu değişken, geçerli döngü dizini ve bunun döngü
aracılığıyla ilk veya son yineleme olup olmadığı gibi yararlı bazı bilgilere erişilmesini sağlar:
İç içe geçmiş bir döngüyseniz, parent özelliğinden
döngünün $ loop değişkenine erişebilirsiniz:
Application Example
BLADE TEMPLATE ENGINE
Loop Property
$ loop değişkeni ayrıca çeşitli özellikleri de içerir:
Geçerli döngü yinelemesi dizini (0'dan başlar).
Geçerli döngü yinelemesi dizini (1’den başlar).
Döngü döngede kalır.
Döngüdeki öğeleri toplar.
Döngünün ilk öğesi
Döngünün son öğesi
Geçerli döngü derinliği
Geçerli döngünün bir üst öğesi
Comment Satırı
PHP Tag
Application Example
BLADE TEMPLATE ENGINE
Include
Blade'in @include yönergesi, Blade görünümünü başka bir görünüme dahil etmenizi sağlar. Üst görünümde
kullanılabilen tüm değişkenler, birlikte gelen görünüme de aktarılacaktır.
Dahil edilen görünüm, üst görünümde mevcut tüm verileri devralacak
olsa da, ek bir dizi veriyi dahil edilen görünüme de aktarabilirsiniz:
Olabileceği veya olmayabileceği bir görünümü eklemek isterseniz
@includeIf yönergesini kullanmalısınız:
Blade ile ilgili daha detaylı bilgi için;
https://laravel.com/docs/5.3/blade
Application Example
Şimdi örnek uygulamamıza devam edelim. Öncelikle mysql veritabımızı uygulamaya tanıtalım. Daha sonra blog
adında bir tablo oluşturup kayıt oluşturup listeleyelim.
1. Öncelikle uygulamanın rootunda yer alan .env dosyamızı açıyoruz. Mysql bilgilerimizi yazıp kaydediyoruz.
Application Example
• Tablo oluşturabilmek uygulama içerisinde terminali çalıştırıp aşağıdaki komutu yazıyoruz
php artisan make:migration blogs_tablosunu_olustur --create=blogs
Bu komut ile birlikte yeni bir migration sınıfı oluşturduk. Veritabanı şemasını oluşturacağız.
Application Example
Migrasyon sınıfı bağlı fonksiyonlarıyla birlikte oluşturuldu.
Şimdi tek yapmamız gereken istediğimiz alanları eklemek!
Öncelikle döküman üzerinden veritiplerini inceleyelim.
Tüm liste için tıklayın;
https://laravel.com/docs/5.3/migrations
Application Example
Alanlarımızı belirlediğimizi ve döküman üzerinden veri tiplerine göre şemaya eklediğimizi varsayıyorum.
Çıktı aşağıdaki gibi olacaktır;
Eklediğimiz alanlar; title, description, content, active
Application Example
Alanları ekledikten sonra tekrar terminal’e gelip aşağıdaki komutu çalıştırıyoruz.
php artisan migrate
İşlem bu kadar basit artık veritabanımızda belirlediğimiz alanlar ve veri tipleriyle birlikte blogs tablomuz oluşturuldu.
Application Example
Blog için tablomuzu migrate ettik. Şimdi modelimizi oluşturacağız. Terminal üzerinden aşağıdaki komutu yazalım.
php artisan make:model Blog
Laravel’de genellikle model isimleri tekil, tablo isimleri ise çoğuldur.
Örneğin; Tablo adı “articles”, model adı Article şeklinde.
Şimdi /app dizinimizin altına bakalım ve model sınıfımızın oluşup / oluşmadığını kontrol edelim.
Application Example
Eğer belirttiğimiz gibi model adı tekil, tablo adı çoğul değil ise sınıf içerisinde tablo adını belirtmek zorundayız.
Varsayılan olarak Laravel model adına s takısı ekleyip veritabanı içerisinde o tabloyu arar ve modele eşler.
Dikkat ettiyseniz model sınıfı Eloquent ORM ‘den extend ediliyor. Peki nedir bu Eloquent ORM ?
Laravel ile birlikte gelen Eloquent ORM, veritabanınızla çalışmak için güzel, basit bir ActiveRecord uygulaması sağlar. Her
bir veritabanı tablosu, bu tabloyla etkileşimde bulunmak için kullanılan bir "Model" e sahiptir. Modeller tablolardaki verileri
sorgulamanın yanı sıra tabloda yeni kayıtlar eklemenize izin verir.
Application Example
Eloquent ORM’de dilediğiniz veritabanını, sorgularınızı hiç değiştirmeden kullanabilirsiniz.
Varsayılan veritabanını ve bilgileri yapılandırmak için /config/database.php dosyasını inceleyebilirsiniz.
Application Example
• Şimdi örnek uygulamıza geri dönelim ve BlogController’ı oluşturalım.
php artisan make:controller BlogController --resource
Application Example
• Rotalarımızı oluşturalım. (routes/web.php)
Eğer dikkat ettiyseniz Route::get, Route::post şeklinde bir kullanım yerine Route::resource şeklinde kullandık.
Şimdi terminal’e gelelim ve aşağıdaki komutu yazalım.
php artisan route:list
Gördüğünüz gibi resource kullandığımız için yönlendirici yöntemlerini uygulama rotalara dahil etti.
BlogController oluştururken de –resource ekini kullanmıştık ve bu metotların tümü sınıfımıza eklenmişti.
Application Example
• Şimdi isterseniz Browser’ı açıp URI’leri test edelim.
http://localhost:8000/blog URI’sinin Action’ı;
AppHttpControllersBlogController@index
Fonksiyon boş olduğu için beyaz bir sayfa ile
karşılaştık.
Application Example
• Şimdi hemen resources/views dizini altına blade dosyalarımızı oluşturalım.
Master Page Layout’u oluşturalım.
(resources/views/layouts/master.blade.php)
Application Example
• Create view’i (Yeni Blog Ekleme Sayfası) oluşturalım. (resources/views/blog/create.blade.php)
Application Example
• Rotayı, view’e bağlayalım.
( BlogController’da create fonksiyonu çalıştığında blog/create.blade.php’yi return eder. )
Application Example
• Rotayı, view’e bağlayalım.
( BlogController’da create fonksiyonu çalıştığında blog/create.blade.php’yi
return eder. )
Form submit edildiğinde store fonksiyonu
çalışacak.
Bu fonksiyonun içerisine de gelen request’i
return ediyoruz.
Application Example
• Form’den gelen request’i JSON formatında return ettik.
Peki formdan gelen request’i veritabanına nasıl kaydedeceğiz ? Oldukça kolay!
Application Example
• Formu tekrar submit ediyoruz.
Formumuz blogs tablosuna kaydedildi. Sizce de oldukça kolay olmadı mı ? 
Application Example
• Şimdi bloglarımızı listeleyelim. Hemen ilgili alanları düzenliyoruz.
BlogController@index fonksiyonu içerisinde;
resources/views/blog/index.php içerisinde;
Application Example
• Hemen browser’a tekrar gelip http://localhost:8000/blog yazalım ve kontrol edelim.
Şimdi bu listeye bir de düzenle ikonu ekleyelim ve bu içerikleri nasıl düzenleyebiliyoruz görelim....
Font Awesome’u CDN’den çekelim.
Application Example
• Listeye ikonlarımızı da ekledik.
Application Example
• Rota’da belirlediğimiz gibi düzenle ikonuna tıkladığımızda BlogController@edit fonksiyonu çağırılacaktır.
Application Example
• /resources/views/blog/edit.blade.php’yi düzenliyoruz.
Application Example
• Form submit edildiğinde BlogController@update fonksiyonu çalışır. Burada da request’i alıp model’e kaydediyoruz.
Application Example
• Güncelleme tamamlandığında listeye tekrar geri gönderiyoruz.
Şimdi bir de liste üzerinde başlığa tıklayarak blog detay sayfasını hazırlayalım.
Bunun için BlogController@show methodunu kullanacağınız. İlk önce listedeki başlıkları linklendirelim.
Application Example
• blog/index.blade.php içerisinde başlıklarımıza detay sayfası için linkler verildi.
HTML link çıktısı şu şekilde olacak;
Application Example
• BlogController@show fonksiyonunu düzenliyoruz;
• Birde resources/blog içerisinde show.blade.php dosyasını oluşturup düzenliyoruz. Bunu daha önce oluşturmamıştık.
Application Example
• Sonucu görelim; http://localhost:8000/blog/3
Application Example
• Silme için de BlogController@destroy fonksiyonunu kullanacağız. Onu da aşağıdaki şekilde düzenliyoruz.
• Destroy form üzerinden submit edilmelidir. Çünkü GET ile request kabul etmez.
<form action="{{ route('blog.destroy', ['id' => $blog->id]) }}”>
<input name="_method" type="hidden" value=”DELETE">
</form>
Link olarak göndermek istiyorsanız GET ile yeni bir rota ve fonksiyon oluşturmalısınız.
Route
Route::get('blog/delete/{id}', ['as' => 'blog.delete’, 'uses' => 'BlogController@delete']);
BlogController
Public function delete($id) {}...
Teşekkürler
Daha detaylı bilgi için Laravel Dökümantasyonunu inceleyebilirsiniz.
Cüneyd Tural
cuneydtural.com
turalcuneyd@gmail.com
https://twitter.com/cuneydtural

Yeni başlayanlar için Laravel

  • 1.
    Laravel 5.3 The PHPFramework For Web Artisans
  • 2.
    Laravel Life Cycle ROUTES:Gelen istekleri karşılar ve controller’a gönderir. MODELS : Veritabanını sorgular ve gerekli verileri döndürür. VIEWS : Template Engine ile render edilmiş görünüm sayfalarıdır. CONTROLLERS : Kullanıcı isteklerini idare eder, modellerden veri alır ve görünümlere iletir.
  • 3.
    Laravel Root /App Öncelikle /app dizinine bir göz atalım. Uygulamamızın ana dizini /app klasörüdür. Uygulama geliştirirken, neredeyse vaktimizin tamamını bu klasör altında geçireceğiz. Console Tüm artisan komutlarını içerir. Http Tüm denetçilerinizi (Controllers), ara katmanlarınızı (Middlewares), gelen isteklerinizi (Requests) ve rotalarınızı içerir. Providers : Tüm uygulama servis sağlayıcılarını içerir. Laravel’in çekirdek hizmetlerinin tamamı servis sağlayıcılar tarafından önyüklenebilir.
  • 4.
    Laravel Root /App Events Tüm etkinlik sınıflarını içerir. Listeners Etkinlik sınıflarını dinleyen listener sınıflarını içerir. Exceptions Uygulamaki özel durum hatalarını yakalayan sınıfları içerir. Jobs Uygulamanız tarafından sıraya alınan tüm işleri içerir. Policies Uygulamanız için yetkilendirme sınıflarını içerir. Bir kullanıcının bir işlemi gerçekleştirebileceklerini belirlemek için kullanılır. Not: Klasör içerisindeki user.php bir model dosyasıdır. Laravel dizin yapısında model klasörü bulunmamaktadır. Model sınıfları /app dizininin altında oluşturulmaktadır.
  • 5.
    Laravel Root /Other bootstap Uygulamanın autoloading ve önbellek dosyalarını içerir. config Uygulamanın ayar dosyalarını içerir.
  • 6.
    Laravel Root /Other database Veritabanı Seeder ve Migration dosyalarını içerir. Örnek Migration
  • 7.
    Laravel Root /Other public Resimler, CSS, Javascript dosyalarını içerir. resources Görünüm (views) ve dil dosyalarını içerir.
  • 8.
    Laravel Root /Other Storage Tüm compile edilmiş blade şablonlarını, cache dosyalarını ve log kayıtlarını içerir. tests Test sınıflarını içerir. vendor Uygulamadaki paket bağımlılıklarını içerir.
  • 9.
    Application Example Örnek birveri listeleme işlemi yapalım. Uygulamayı ilk kez indiriyorsanız aşağıdaki adımları takip ediniz. 1. git clone https://github.com/laravel/laravel.git 2. cd laravel 3. cp .env.example .env 4. composer install 5. php artisan key:generate
  • 10.
    Application Example Uygulamayı hostediyoruz. • php artisan serve
  • 11.
    Application Example Uygulama hostedildi. Artık örnek uygulamaya başlayabiliriz.
  • 12.
    Application Example Terminal’I açıpuygulama dizinine geliyoruz. Artisan komutuyla yeni bir controller oluşturuyoruz. php artisan make:controller ExampleController IDE ile projemizi açıp /app/Http/Controller dizininde ExampleController.php dosyasını göreceksiniz. Hemen düzenlemeye başlıyoruz. Sınıf içerisine index adından yeni bir fonksiyon tanımlayalım.
  • 13.
    Application Example Peki bununçıktısını nasıl göreceğiz ? Bunun için hemen /routes/web.php dosyasını açıp rotamızı ilgili sınıfın fonksiyonuna bağlıyoruz. Gelen URL parametresi ile sınıf içerisindeki fonksiyonu bağlıyoruz.
  • 14.
    Application Example Browser’a geliphemen kontrol edelim. Gördüğünüz gibi rotamızı ExampleController’ın index fonksiyonuna başarıyla Bağlamış olduk.
  • 15.
    Application Example Route’da aşağıdakigibi bir fonksiyonda kullanılabilir ama bu tavsiye edilen bir yöntem değildir. GET yöntemiyle bir istek yapmış olduk. Mevcut yönlendirici yöntemlerini de sıralayalım.
  • 16.
    Application Example Bazen birdençok HTTP fiiline yanıt veren bir yönlendirme kayıt etmeniz gerekebilir. Bunu match yöntemi kullanarak yapabilirsiniz. Route Parametreleri URL içerisindeki ID’yi yakalamak için yönlendirme parametreleri tanımlayabilirsiniz.
  • 17.
    Application Example Örneklere devamediyoruz. DuyuruController içerisinde liste oluşturup bunu view dosyasına göndereceğiz. • Rotamızı belirleyelim. Route::get('/duyurular', 'DuyuruController@liste'); • Terminal üzerinden Controller’ı oluşturalım. Php artisan make:controller DuyuruController • resources/views/ klasörü içerisinde duyurular.blade.php adında bir dosya oluşturalım.
  • 18.
    Application Example DuyuruController içerisindeaşağıdaki fonksiyonu yazalım. Peki ne yaptık ? $duyurular adında bir dizi oluşturduk. duyurular.blade.php adında ki view dosyasına with ile duyurular değişkenini with ile gönderdik. Laravel, Blade Template Engine’i kullanır ve compile edilebilmesi için view dosyalarının sonuna .blade eklenmelidir. Örneğin; dosyaadi.blade.php ( View’i return ederken yanlızca dosya adı yazılır. Dosya, view dizini içerisinde bir alt klasör içerisinde olduğunda klasoradi.dosyaadi seklinde yazıyoruz.
  • 19.
    Application Example Şimdi duyurular.blade.phpdosyamızı açıp gönderilen değişkeni listeleyelim. Bu bölümde Blade’I anlamaya çalışacağız. Blade içerisinde <?php ?> tagları kullanılabilir fakat tercih edilen bir yöntem değildir. Döngüler @foreach($cogul as tekil) @endforeach Tag <?php tagları yerine çift süslü parantez kullanılır. {{ $var }}
  • 20.
    Application Example Şimdi browser’daduyurular linkine tıklayalım. http://localhost:8000/duyurular
  • 21.
    Application Example BLADE TEMPLATEENGINE Blade, Laravel ile gelen pratik, ancak güçlü şablonlama motorudur. Diğer popüler PHP şablonlu motorların aksine, Blade, view dosyalarında düz PHP kodunu kullanmanızı kısıtlamaz. Aslında, tüm Blade görüntüleri düz PHP kodu halinde derlenir ve değiştirilene kadar önbelleğe alınır, yani Blade uygulamanıza sıfır yük ekler. Blade görünümü dosyaları .blade.php dosya uzantısını kullanır ve genellikle resources / views dizininde saklanır. Layout Kullanımı İlk olarak, bir ”master" sayfa düzenini inceleyeceğiz. Çoğu web uygulaması çeşitli genel sayfalarda aynı genel düzenini koruduğu için, bu düzeni tek bir blade görünümü olarak tanımlamak daha uygundur:
  • 22.
    Application Example BLADE TEMPLATEENGINE Master Layout (views/layouts/master.blade.php) Extends Master (views/blog.blade.php)
  • 23.
    Application Example BLADE TEMPLATEENGINE Bazen bir değişkeni yazdırmak isterken değişkenin tanımlanmış olduğundan emin olamadığımız durumlarda shorthand if/else yapısını kullanırız. Bunun yerine blade ile aşağıdaki kısayolu kullanabiliriz. Blade bunu üçlü ifade gibi derleyecektir. Varsayılan olarak, XSS saldırılarını önlemek için Blade {{}} ifadeleri otomatik olarak PHP'nin htmlentities işleviyle gönderilir. Verilerinizin çıkmasını istemiyorsanız aşağıdaki sözdizimini kullanabilirsiniz:
  • 24.
    Application Example BLADE TEMPLATEENGINE IF/ELSE If ifadelerini @if, @elseif, @else ve @endif yönergelerini kullanarak oluşturabilirsiniz. Bu yönergeler PHP eşdeğerleriyle aynı işlevi görür:
  • 25.
    Application Example BLADE TEMPLATEENGINE IF/ELSE If ifadelerini @if, @elseif, @else ve @endif yönergelerini kullanarak oluşturabilirsiniz. Bu yönergeler PHP eşdeğerleriyle aynı işlevi görür: UNLESS Kolaylık sağlamak için, Blade ayrıca bir @unless yönergesi sağlar. (Sonuç false ise)
  • 26.
    Application Example BLADE TEMPLATEENGINE LOOP Koşullu ifadelere ek olarak, Blade PHP'nin döngü yapılarıyla çalışmak için basit yönergeler sağlar. Yine, bu yönergelerin her biri PHP eşdeğerleriyle aynı işlev görür:
  • 27.
    Application Example BLADE TEMPLATEENGINE Döngüler Döngüler kullanırken, döngüyü de sonlandırabilir veya geçerli yinelemeyi atlayabilirsiniz: Koşulu tek bir satırda da belirtebilirsiniz.
  • 28.
    Application Example BLADE TEMPLATEENGINE Loop Değişkeni Döngü yaparken, döngü içinde $loop değişkeni bulunur. Bu değişken, geçerli döngü dizini ve bunun döngü aracılığıyla ilk veya son yineleme olup olmadığı gibi yararlı bazı bilgilere erişilmesini sağlar: İç içe geçmiş bir döngüyseniz, parent özelliğinden döngünün $ loop değişkenine erişebilirsiniz:
  • 29.
    Application Example BLADE TEMPLATEENGINE Loop Property $ loop değişkeni ayrıca çeşitli özellikleri de içerir: Geçerli döngü yinelemesi dizini (0'dan başlar). Geçerli döngü yinelemesi dizini (1’den başlar). Döngü döngede kalır. Döngüdeki öğeleri toplar. Döngünün ilk öğesi Döngünün son öğesi Geçerli döngü derinliği Geçerli döngünün bir üst öğesi Comment Satırı PHP Tag
  • 30.
    Application Example BLADE TEMPLATEENGINE Include Blade'in @include yönergesi, Blade görünümünü başka bir görünüme dahil etmenizi sağlar. Üst görünümde kullanılabilen tüm değişkenler, birlikte gelen görünüme de aktarılacaktır. Dahil edilen görünüm, üst görünümde mevcut tüm verileri devralacak olsa da, ek bir dizi veriyi dahil edilen görünüme de aktarabilirsiniz: Olabileceği veya olmayabileceği bir görünümü eklemek isterseniz @includeIf yönergesini kullanmalısınız: Blade ile ilgili daha detaylı bilgi için; https://laravel.com/docs/5.3/blade
  • 31.
    Application Example Şimdi örnekuygulamamıza devam edelim. Öncelikle mysql veritabımızı uygulamaya tanıtalım. Daha sonra blog adında bir tablo oluşturup kayıt oluşturup listeleyelim. 1. Öncelikle uygulamanın rootunda yer alan .env dosyamızı açıyoruz. Mysql bilgilerimizi yazıp kaydediyoruz.
  • 32.
    Application Example • Tablooluşturabilmek uygulama içerisinde terminali çalıştırıp aşağıdaki komutu yazıyoruz php artisan make:migration blogs_tablosunu_olustur --create=blogs Bu komut ile birlikte yeni bir migration sınıfı oluşturduk. Veritabanı şemasını oluşturacağız.
  • 33.
    Application Example Migrasyon sınıfıbağlı fonksiyonlarıyla birlikte oluşturuldu. Şimdi tek yapmamız gereken istediğimiz alanları eklemek! Öncelikle döküman üzerinden veritiplerini inceleyelim. Tüm liste için tıklayın; https://laravel.com/docs/5.3/migrations
  • 34.
    Application Example Alanlarımızı belirlediğimizive döküman üzerinden veri tiplerine göre şemaya eklediğimizi varsayıyorum. Çıktı aşağıdaki gibi olacaktır; Eklediğimiz alanlar; title, description, content, active
  • 35.
    Application Example Alanları eklediktensonra tekrar terminal’e gelip aşağıdaki komutu çalıştırıyoruz. php artisan migrate İşlem bu kadar basit artık veritabanımızda belirlediğimiz alanlar ve veri tipleriyle birlikte blogs tablomuz oluşturuldu.
  • 36.
    Application Example Blog içintablomuzu migrate ettik. Şimdi modelimizi oluşturacağız. Terminal üzerinden aşağıdaki komutu yazalım. php artisan make:model Blog Laravel’de genellikle model isimleri tekil, tablo isimleri ise çoğuldur. Örneğin; Tablo adı “articles”, model adı Article şeklinde. Şimdi /app dizinimizin altına bakalım ve model sınıfımızın oluşup / oluşmadığını kontrol edelim.
  • 37.
    Application Example Eğer belirttiğimizgibi model adı tekil, tablo adı çoğul değil ise sınıf içerisinde tablo adını belirtmek zorundayız. Varsayılan olarak Laravel model adına s takısı ekleyip veritabanı içerisinde o tabloyu arar ve modele eşler. Dikkat ettiyseniz model sınıfı Eloquent ORM ‘den extend ediliyor. Peki nedir bu Eloquent ORM ? Laravel ile birlikte gelen Eloquent ORM, veritabanınızla çalışmak için güzel, basit bir ActiveRecord uygulaması sağlar. Her bir veritabanı tablosu, bu tabloyla etkileşimde bulunmak için kullanılan bir "Model" e sahiptir. Modeller tablolardaki verileri sorgulamanın yanı sıra tabloda yeni kayıtlar eklemenize izin verir.
  • 38.
    Application Example Eloquent ORM’dedilediğiniz veritabanını, sorgularınızı hiç değiştirmeden kullanabilirsiniz. Varsayılan veritabanını ve bilgileri yapılandırmak için /config/database.php dosyasını inceleyebilirsiniz.
  • 39.
    Application Example • Şimdiörnek uygulamıza geri dönelim ve BlogController’ı oluşturalım. php artisan make:controller BlogController --resource
  • 40.
    Application Example • Rotalarımızıoluşturalım. (routes/web.php) Eğer dikkat ettiyseniz Route::get, Route::post şeklinde bir kullanım yerine Route::resource şeklinde kullandık. Şimdi terminal’e gelelim ve aşağıdaki komutu yazalım. php artisan route:list Gördüğünüz gibi resource kullandığımız için yönlendirici yöntemlerini uygulama rotalara dahil etti. BlogController oluştururken de –resource ekini kullanmıştık ve bu metotların tümü sınıfımıza eklenmişti.
  • 41.
    Application Example • Şimdiisterseniz Browser’ı açıp URI’leri test edelim. http://localhost:8000/blog URI’sinin Action’ı; AppHttpControllersBlogController@index Fonksiyon boş olduğu için beyaz bir sayfa ile karşılaştık.
  • 42.
    Application Example • Şimdihemen resources/views dizini altına blade dosyalarımızı oluşturalım. Master Page Layout’u oluşturalım. (resources/views/layouts/master.blade.php)
  • 43.
    Application Example • Createview’i (Yeni Blog Ekleme Sayfası) oluşturalım. (resources/views/blog/create.blade.php)
  • 44.
    Application Example • Rotayı,view’e bağlayalım. ( BlogController’da create fonksiyonu çalıştığında blog/create.blade.php’yi return eder. )
  • 45.
    Application Example • Rotayı,view’e bağlayalım. ( BlogController’da create fonksiyonu çalıştığında blog/create.blade.php’yi return eder. ) Form submit edildiğinde store fonksiyonu çalışacak. Bu fonksiyonun içerisine de gelen request’i return ediyoruz.
  • 46.
    Application Example • Form’dengelen request’i JSON formatında return ettik. Peki formdan gelen request’i veritabanına nasıl kaydedeceğiz ? Oldukça kolay!
  • 47.
    Application Example • Formutekrar submit ediyoruz. Formumuz blogs tablosuna kaydedildi. Sizce de oldukça kolay olmadı mı ? 
  • 48.
    Application Example • Şimdibloglarımızı listeleyelim. Hemen ilgili alanları düzenliyoruz. BlogController@index fonksiyonu içerisinde; resources/views/blog/index.php içerisinde;
  • 49.
    Application Example • Hemenbrowser’a tekrar gelip http://localhost:8000/blog yazalım ve kontrol edelim. Şimdi bu listeye bir de düzenle ikonu ekleyelim ve bu içerikleri nasıl düzenleyebiliyoruz görelim.... Font Awesome’u CDN’den çekelim.
  • 50.
    Application Example • Listeyeikonlarımızı da ekledik.
  • 51.
    Application Example • Rota’dabelirlediğimiz gibi düzenle ikonuna tıkladığımızda BlogController@edit fonksiyonu çağırılacaktır.
  • 52.
  • 53.
    Application Example • Formsubmit edildiğinde BlogController@update fonksiyonu çalışır. Burada da request’i alıp model’e kaydediyoruz.
  • 54.
    Application Example • Güncellemetamamlandığında listeye tekrar geri gönderiyoruz. Şimdi bir de liste üzerinde başlığa tıklayarak blog detay sayfasını hazırlayalım. Bunun için BlogController@show methodunu kullanacağınız. İlk önce listedeki başlıkları linklendirelim.
  • 55.
    Application Example • blog/index.blade.phpiçerisinde başlıklarımıza detay sayfası için linkler verildi. HTML link çıktısı şu şekilde olacak;
  • 56.
    Application Example • BlogController@showfonksiyonunu düzenliyoruz; • Birde resources/blog içerisinde show.blade.php dosyasını oluşturup düzenliyoruz. Bunu daha önce oluşturmamıştık.
  • 57.
    Application Example • Sonucugörelim; http://localhost:8000/blog/3
  • 58.
    Application Example • Silmeiçin de BlogController@destroy fonksiyonunu kullanacağız. Onu da aşağıdaki şekilde düzenliyoruz. • Destroy form üzerinden submit edilmelidir. Çünkü GET ile request kabul etmez. <form action="{{ route('blog.destroy', ['id' => $blog->id]) }}”> <input name="_method" type="hidden" value=”DELETE"> </form> Link olarak göndermek istiyorsanız GET ile yeni bir rota ve fonksiyon oluşturmalısınız. Route Route::get('blog/delete/{id}', ['as' => 'blog.delete’, 'uses' => 'BlogController@delete']); BlogController Public function delete($id) {}...
  • 59.
    Teşekkürler Daha detaylı bilgiiçin Laravel Dökümantasyonunu inceleyebilirsiniz. Cüneyd Tural cuneydtural.com turalcuneyd@gmail.com https://twitter.com/cuneydtural