Skip to content

Laravel Framework Nedir Ve Özellikleri Nelerdir?

Laravel Nedir ?

Laravel ihtiyaç duyulan, gelişmiş bir çok özellik ve yapıyı üzerinde barındıran, PHP ve OOP tüm nimetlerinden yararlanan, web uygulamaları geliştirmeyi sağlayan açık kaynak PHP framework’ tür.

“WEB SANATÇILARININ PHP FRAMEWORK’Ü” sloganıyla kendisini özetler ve hakkını verir.

Laravel Özellikleri

Yapısı gereği gerçekten çok sade ve temiz kod yazarak istediğiniz uygulamaları geliştirme imkanı verir.

Söz dizimi çok basit ve anlamlıdır. Alışmak için zorlanmazsınız, çabuk öğrenilebilir.

Bir kaç işlem barındıran küçük uygulamalardan, büyük kurumsal projelere kadar her türlü web uygulamasını tasarlama esnekliğine sahiptir.

OOP ve PHP nin tüm nimetlerinden yararlanır böylece güncel php özelliklerinde oop uygun şekilde çalışırız.

Diğer Laravel’i laravel yapan özellikler:

ORM

ORM Nedir önce onu açıklarsak; (Object Relational Mapping) Database ile uygulamamızda (Object-Oritented) nesnelerimiz sayesinde bağlantı kurup yönetmemizi sağlayan bir yapıdır. Klasik SQL cümleleri yazmadan nesnelerimiz üzerinden veri tabanına erişim sağlayıp kontrol edebiliyor sorgular çalıştırabiliyoruz. ORM database den bağımsız çalışır. Yani Mysql, SQLite, postgresql, MSSql, Oracle gibi bir çok database için aynı kodları kullanırsınız. Bir çok avantajı var ama burada değinmeyeceğiz.

Laravel Eloquent ORM kullanır. En gelişmiş Active Record uygulamasıdır.

class Message extends Eloquent {}
$message = Message::find(1);

Gördüğünüz gibi çok basit kullanılabilir bir yapısı vardır. Sizi bir çok tanımlama yapmak uzun cümleler yapılar kurmaktan kurtarır.

Messages (“s” Siz table belirtmez iseniz çoğul hali olan “s” takısını ekleyerek database de tablo seçer) tablosundan id = 1 olan mesajı getirir.

Blade Template

Blade adı verilen template engine sahiptir. Uygulamanıza yine çok kolay ve sade şekilde arayüzle bütünleştirebiliriz. Öğrenilmesi yine kolaydır,temiz ve dinamik arayüzler hazırlayabilirsiniz html ve php kodları içinde savaş vermezsiniz.

Route

Müthiş bir route (yönlendirme) mekanizması vardır. Yorulmadan temiz URL elde eder api ler için uygun erişim yönlendirmeleri yapabilirsiniz. Php yapısında yabancı olmadığınız şekilde.

Route::get('users', function()
{
   return 'Users!';
});

Burada ister yönlendirmelerinizi yapabilir ister filtrelerden kontrollerden geçirebilir ister Controller class larınıza yönlendirebilirsiniz. Hatta burada bu fonksiyonda uygulamanızın gerçekleştireceği işlemleri dahil controller class lara gerek kalmadan gerçekleştirebilirsiniz. (Önerilmez)

Migrations (Sürüm Kontrolü, Göçler)

Veri tabanı sürüm kontrol sistemidir. Artisan Komut Satırı ile uygulamanızın veritabanına şemalar ekleyebilir düzenleyebilirsiniz. Veri tabanı yönetim sistemine gitmeden sisteminizdeki veritabanınızı oluşturmaya yada güncellemeye yarayan yapı. Örneğin uygulamanızı başka bir ortama taşıdınız, veri tabanını oluşturmaya çalışmaktansa uygulamanızda ki hali hazırdaki yapıyı çalıştırarak sistemi hazır hale getirmiş oluyoruz.

Unit Test (Birim Test)

Uygulamanızı test etmek için birim testler oluşturup çalıştırmamızı sağlar. Artisan komut satırıyla hazırladığımız testleri çalıştırabiliriz.

Automatic Pagination (Otomatik Sayfalandırma)

Laravel bizim yerimize sayfalama sistemini düşünmüş ve bizi zahmete sokmadan el atmış. Kolay şekilde kullanabilir istersek değiştirebiliriz.

Modüler paket yönetimi ve composer

Composer, uygulamanızın üçüncü parti paketlerini kontrol edip hızlı şekilde ekleyip yönetmeyi sağlar. Composer ile bağımlılıklarınızı paketlerinizi dert etmez tek tek uğraşmak yerine çok kolay bir şekilde dahil edebilirsiniz.

Performans

Cache mekanizmaları sunar. Redis ile bütünleşmiş bir yapısı var adeta evlat edinmişcesine sahip çıkar, bünyesine katmıştır. Projenize redis dahil etmek için ekstra uğraşmanıza gerek yoktur.Çok hızlı ve basit şekilde yapılandırabilirsiniz.

Dahili olarak auth, filter gibi bir çok yapıyı içinde barındırıyor. Bunu yine kendi yapısına uygun ve basit şekilde sunar. Hemen hemen her uygulamada auth mekanizması olur ve bunu yapmak için ekstra çabaya gireriz. İşte laravel bunu da pas geçmemiş çok güzel bunun gibi yapılarda sunmuş.

Bir çok Symfony bileşeni üzerine kurulmuştur.

Güvenli, hızlı, sitenizi ayağa kaldırmak çok kolaydır.

Tek komutla sitenizi aktif hale veya yapım aşamasına alma gibi seveceğiniz bir çok özelliği daha mevcuttur.

Topluluk

Bir yapıda en büyük özelliklerden birisi de bana göre topluluktur. Başınız sıkıştığında yardım alabileceğiniz, danışacağınız, müthiş örnekler ve çözümler bulabilmeniz gibi bir çok yardımı dokunur.

Çok hızlı büyüyen topluluğa sahiptir. Henüz genç bir freamwork sayılır. Bu sebeple örneğin bir codeigniter kadar topluluğa ve aşinalığa sahip değildir. Ancak çok hızlı büyümektedir. Popülerliği her geçen gün artmaktadır. Türkiye ‘ dede kabul görmüş hızla atan bir kitlesi var, ayrıca iş ilanlarında da laraveli görmek mümkün. Türkiye’ de Sinan Eldem’ in çok iyi çalışmaları var. Katkılarından dolayı kendi adıma da teşekkürü borç bilirim. çok iyi bir Türkçe döküman hazırlanmış. Ayrıca resmi sitesinde , yerli ve yabancı forumlarına yine ulaşabilirsiniz. Ulaşmakla yetinmeyip sizde katkıda bulunursanız çok daha başka güzel olur:)

Döküman sıkıntısı yaşamaz, çok kısa zamanda öğrenebilir yardımlar alabilirsiniz.

Laravel ile Yapılan Siteler

Laravel ile oluşturulmuş uygulamaların yer aldığı http://builtwithlaravel.com/ siteden gerçek çalışmalara göz atabilirsiniz.

Sunucu Gereksinimleri

  1. PHP >= 5.5.9
  2. OpenSSL PHP Extension
  3. PDO PHP Extension
  4. Mbstring PHP Extension
  5. Tokenizer PHP Extension
  6. MCrypt PHP Eklentisi

Laravel Kurulum

Composer ile kurulum

composer create-project laravel/laravel laravel-test-proje1 --prefer-dist

Bulunduğunuz dizinde “laravel-test-proje1″ klasöre laraveli indirip kuracaktır.

Github – Git ile Kurulum

Github adresi: https://github.com/laravel/laravel

Git clone: https://github.com/laravel/laravel.git

Kurulum yapmak istediğimiz dizine gelerek

git clone  https://github.com/laravel/laravel.git

ile git reposundan kendi localimize çekiyoruz. Sonra composer ile laravel in bağımlılıklarını yüklememizi sağlar.(Biliyoruz ki artık composer kullanıyoruz laravel bağımlılıklar, paketler için)

composer install

Evet laravel freamwork edinmiş olduk artık. Sunucunuzdan laraveli indirdiğiniz dizine gelirseniz, public klasöründe laravel in çalıştığını görürüz. Bizi laravel logosunun karşlıladığı bir sayfa görüyorsak her şey yolundadır.

Benim örneğimden “http://localhost/testLaravel/” girdiğimde laravel dizinleri gösterilir.

Not: sunucunuzun “app/storage” dizinine yazma izni vermemiz gerekebilir.

Laravel nedir, özellikleri nedir, neden laravel, laravel nasıl kurulur gibi temel bilgileri edindik Sonraki yazılarda laraveli detaylı işleyip uygulamalar geliştireceğiz. Şahsen kendi projelerim ve profesyonel hayatta da etkin şekilde kullanacağım.

Tavsiyem

Hangi freamwork iyidir, hangi freamwork onu döver gibi konulara girmeden sadece laravel açısından kendi gözlem ve önerilerimi aktarayım. Ancak freamwork karşılaştırmaları avantaj, dezavantajları alternatifleri, kullanım alanları gibi bilgilerin olacağı başka bir yazıya yer verebiliriz.

Gerçekten öğrenilmesi kolay, söz dizimi, yapısı, basitliği kodlarla sanat yapar gibi çalışmanıza imkan vermesiyle kendisine bağlıyor mest ediyor. Çalışmaktan mutluluk duyuyorsunuz. Projenizde her şey düzenli, yerli yerinde oluyor. Yapının içinde boğulmuyorsunuz aradığınızı buluyorsunuz. Kodlar sizinle konuşur gibi olduğu için dilinden anlıyorsunuz:) Geri döndüğünüzde abi burada ne yapmıştım demiyorsunuz(tabi yinede geliştirmenize göre değişebilir) :) Dahili bir çok yapı bulundurmakla kalmıyor bunları karmaşadan ve hantallıktan uzak şekilde sunuyor. Auth, Redis bunlardan sadece bazıları. Projenizi çok kısa zamanda ayağa kaldırır vakit kaybetmezsiniz. Eski usul kod geliştirmeyi unutur modern kabul görmüş programcılığa adım atarsınız. ORM, OOP, Template Engine,Redis,Composer,Unit Test vb yapılara aşina olursunuz.Artılarını çok yakından hissedersiniz. Uygulamanızı kısa zamanda ayağa kaldırır, her uygulama geliştirmede alt yapılar oluşturmak zorunda kalmazsınız. Her şey çok basit çok yalındır. Düşündüğünüz bir çok şey etrafında toplanmıştır.

En azından denemenizde göz atmanızda fayda olacağını düşünüyorum. Bir başlarsanız daha tadından yenmeyeceğini fark eder tavsiyelerime katılırsınız.

Unity Gelişmiş Input Sistemi (Mobil Destekli)

Hepinize yeniden merhabalar,

Son zamanlarda Input.GetAxis kullanan kodların Android cihazlarda nasıl çalıştırılabileceği ile ilgili çeşitli sorular alıyordum. Ben de bu konuda basit bir çözüm üretmeye çalıştım ve ortaya SimpleInput adını verdiğim bir sistem çıktı.

SimpleInput sistemi ile UI butonlarına dokunarak, dokunmatik ekranda parmağınızı sürükleyerek, joystick kullanarak veya klavye tuşlarını kullanarak Input.GetAxis’i simüle edebiliyorsunuz. Dilerseniz de biraz kod yardımıyla kendi input yöntemlerinizi de sisteme tanıtabiliyorsunuz.

Unitypackage linki: https://www.dropbox.com/s/wopvkfsuenw8wus/SimpleInput.unitypackage?dl=0 (Alternatif link)

Detaylar için yazının devamını okuyabilirsiniz…

Sistemin işleyişi Input.GetAxis’e çok benziyor. Öyle ki çoğu zaman kodlarınızdaki Input.GetAxis’leri SimpleInput.GetAxis‘e ve Input.GetAxisRaw’ları da SimpleInput.GetAxisRaw‘a çevirmek yeterli olacaktır. Bunun dışında tek yapmanız gereken, bu fonksiyonlara parametre olarak girdiğiniz axis’lerin (“Horizontal”, “Vertical”, “Mouse X” vs.) değerlerini nasıl alacaklarını belirlemek olacak: ekrandaki butonlarla mı, joystick’le mi yoksa dokunmatik ekranla mı gibi…

Paketle birlikte 4 tane hazır input scripti gelmekte: SimpleInputButon, SimpleInputDokunmatikEkran, SimpleInputKlavye ve SimpleInputRealAxis.

SimpleInputButon

Herhangi bir UI elemanına verebilirsiniz. Butona basılı tutulduğu sürece, girilen Axis‘in değeri Deger olur. Örneğin Input.GetAxis(“Vertical”)’ı ekrandaki yukarı-aşağı butonlarıyla simüle etmek istiyorsanız önce Input.GetAxis(“Vertical”)’ı SimpleInput.GetAxis(“Vertical”)‘a çevirmeli, ardından yukarı yön butonuna SimpleInputButon component’i verip Axis’ini “Vertical” (tırnaksız), Deger’ini 1 yapmalı ve son olarak aşağı yön butonuna da SimpleInputButon component’i verip Axis’ini “Vertical“, Deger’ini -1 yapmalısınız.

SimpleInputDokunmatikEkran

Dokunmatik ekranda parmak sürükleyerek input almaya yarar. Örneğin “Mouse X” ve “Mouse Y” axis’lerini simüle etmek için idealdir. Bu durumda sahnenizdeki herhangi bir objeye SimpleInputDokunmatikEkran component’i verip “X Axis“ini “Mouse X” ve “Y Axis“ini de “Mouse Y” yapmanız yeterlidir. Eğer “Ui Yoksay” seçeneğini işaretlerseniz ekrana dokunan herhangi bir parmak input verebilirken işaretlemezseniz de o zaman sadece ekrandaki boş bir yere tıklayan (bir UI elemanının üzerine tıklamayan) parmaklar input verebilir.

SimpleInputKlavye

Klavye tuşları ile input alabilmeye yarar. Tus‘ta belirlenen klavye tuşuna basılı tutulduğu sürece Axis‘in değeri Deger olur.

SimpleInputRealAxis

Input.GetAxis ile kullandığınız axis’leri direkt SimpleInput’ta da kullanabilmenizi sağlar. Örneğin normalde klavyenin sol-sağ tuşları ve A-D tuşları Input.GetAxis(“Horizontal”)’a etki eder; eğer siz bu klavye input’una SimpleInput’tan da erişebilmek istiyorsanız bu component’in Axisler‘ine “Horizontal“ı (tırnaksız) ekleyebilirsiniz.

SimpleInputJoystick (Bonus)

Bu component yukarıda paylaştığım unitypackage ile otomatik olarak gelmiyor çünkü bu kodun compile olabilmesi için projede, daha önceki bir dersimde paylaştığım JoystickUI component’inin olması gerekiyor. Joystick’in Vector2 türündeki sonuc değişkeninin x ve y değerleri sırasıyla “X Axis” ve “Y Axis“e değer olarak gitmekte.

Bu script unitypackage ile gelmediği için, eğer kullanacaksanız projeye elle eklemeniz lazım:

using UnityEngine;
 
public class SimpleInputJoystick : MonoBehaviour
{
    public JoystickUI joystick;
 
    [SerializeField]
    private string xAxis = "Mouse X";
    [SerializeField]
    private string yAxis = "Mouse Y";
 
    private SimpleInputAxis xInput = null;
    private SimpleInputAxis yInput = null;
 
    void Awake()
    {
        if( xAxis != null && xAxis.Length > 0 )
            xInput = new SimpleInputAxis( xAxis );
 
        if( yAxis != null && yAxis.Length > 0 )
            yInput = new SimpleInputAxis( yAxis );
    }
 
    void OnEnable()
    {
        if( xInput != null )
            xInput.AxisEkle();
 
        if( yInput != null )
            yInput.AxisEkle();
    }
 
    void OnDisable()
    {
        if( xInput != null )
            xInput.AxisCikar();
 
        if( yInput != null )
            yInput.AxisCikar();
    }
 
    void Update()
    {
        Vector2 joystickSonuc = joystick.sonuc;
 
        xInput.deger = joystickSonuc.x;
        yInput.deger = joystickSonuc.y;
    }
}

Bu kod vasıtasıyla aslında nasıl kendi input metotlarınızı sisteme tanıtabileceğinizi de görmüş oluyorsunuz. Yapmanız gerekenler kabaca şöyle:

  • SimpleInputAxis türünde bir değişken oluşturmak
  • Awake fonksiyonunda bu değişkeni new SimpleInputAxis(“axis ismi”); şeklinde initialize etmek
  • OnEnable fonksiyonunda değişkenin AxisEkle fonksiyonunu çağırmak
  • OnDisable fonksiyonunda değişkenin AxisCikar fonksiyonunu çağırmak
  • Gerektiği zaman (Update fonksiyonunda veya uygun gördüğünüz başka bir yerde) değişkenin deger‘ini güncellemek

Örneğin SimpleInputJoystick scripti, “Mouse X” axis’ine joystick.sonuc.x‘i ve “Mouse Y” axis’ine de joystick.sonuc.y‘yi değer olarak atmakta.

Umarım faydalı olur. Çok sıkıntı yaşarsanız belki çok basit bir örnek proje de paylaşabilirim. Daha sonra görüşmek dileğiyle!

Laravel için Örnek GitLab CI Dosyası

Uzun süre GitLab’deki projelerimde unit testleri otomatik çalıştırmayı beceremedim. GitLab’de bununla ilgili bir örnek bulamadım. Çeşitli forumlarda örnek konfigürasyonlar paylaşılmış ama google’da ilk sırada çıkan konfigürasyonda testin tamamlanması 10 dakikayı buluyordu.

En sonunda daha derli toplu güzel bir repo buldum.

Laravel’e özel bir docker image kullanıyor ve bende testin tamamlanması 2 dakika filan sürüyor.

GitLab ve Laravel için CI(Pipeline) konfigürasyonu arayanlara sevgilerimle. Umarım yardımcı olur.

Benim konfigürasyonum:

before_script:
  - mv /root/composer.phar .
  - php -v
  - git --version
  - ls -lah
  - php composer.phar self-update
  - php composer.phar install --no-interaction --prefer-dist --optimize-autoloader
  - cp .env.gitlab .env
  - php artisan key:generate
  - php artisan config:cache
  - php artisan migrate --force
  - php artisan db:seed

variables:
  MYSQL_DATABASE: laravel
  MYSQL_ROOT_PASSWORD: secret

phpunit:php-laravel-env:mysql5.7:
  image: woohuiren/php-laravel-env:latest
  services:
    - mysql:5.7
  script:
    - php vendor/bin/phpunit --coverage-text --colors=never
Wordpress

WordPress Javascript Dosyalarını Footer’a Taşıma

WordPress alt yapılı bir siteniz varsa geliştirirken takıldığınız noktalardan birisinin de <head> etiketleri arasında yer alan javascript dosyalarının otomatik olarak footer’a taşınmamasıdır. Malesef bunu elinizle yapmanız gerekiyor.

Bu noktada devreye WordPress tarafından geliştirilmiş ve çok güzel şekilde çalışan bir fonksiyon giriyor. wp_enqueue_scripts() fonksiyonu içerisine girdiğiniz dosyaları otomatik olarak footer’a taşıma işlemini yapıyor. Ben bunu kendi kullandığım yöntem ile anlatacağım. Öncelikle bir fonksiyon oluşturarak içerisine bazı veriler girmem gerekiyor. Bu veriler ilk olarak daha önceden tanımlı bir dosya için geçerliyse onu iptal etmek ve yeniden footer’da gösterilmek üzere tanıtmak oluyor. Functions.php dosyamızı açarak aşağıdaki gibi kodlarımızı giriyoruz.

// Javascript'leri Footer'a taşıma Kodu
function footera_tasi() {
 
	// Tanımlı dosyaları tanımsız hale getiriyoruz.
	wp_deregister_script( 'jquery' );
	wp_deregister_script( 'jquery-migrate' );
 
	// Dosyaları kodlarımız arasında kaldırıyoruz.
	wp_dequeue_script( 'jquery' );
	wp_dequeue_script( 'jquery-migrate' );
 
	// Kendi dosyalarımızı tanımlıyoruz.
	wp_register_script( 'jquery', get_stylesheet_directory_uri() . '/js/jquery.js', '', '', true );
	wp_register_script( 'jquery-migrate', get_stylesheet_directory_uri() . '/js/jquery-migrate.js', '', '', true );
 
	// Dosyaları kodlarımız arasına ekliyoruz.
	wp_enqueue_script( 'jquery' );
	wp_enqueue_script( 'jquery-migrate' );
 
 
}
add_action('wp_enqueue_scripts', 'footera_tasi', PHP_INT_MAX);

Bu kodu kullanarak WordPress tarafından default olarak gelen ve eklentilerden kaynaklanan javascript dosyalarınızı footer’a taşıyabilirsiniz. Burda kullandığımız wp_register_script() fonksiyonu içerisine 5 parametre alır. Bunlar sırayla, ('dosya-ismi', 'dosya-yolu', 'dizisi – default olarak array() alır – ', 'versiyonu', 'footera taşınsın mı?') şeklinde olmalıdır. Biz kodumuzda dosya adı ve dosya yolunu girdikten sonra 3. ve 4. parametrelerimizi boş bırakarak default değerlerini almasını sağladık ama 5. parametremize true değerini vererek kodlarımızı footer’a gönderdik.

wp_register_script() fonksiyonunun Codex‘te yer alan sayfasına göz atarsanız WordPress’in içerisinde otomatik olarak tanımlı olan javascript dosyalarının isimlerini görebilirsiniz.

Bunun dışında bu kod nerede işimize yarar diye soracak olursanız, benim oldukça fazla kullandığım yapılar arasında yer alır. Bu kod sayesinde istediğimiz javascript kodunu istediğimiz sayfa veya yazıda aktif edebiliriz. Mesela ben eğer Jetpack eklentisini ve ya Contact Form eklentisini anasayfa içerisinde hiçbir yer kullanmıyor, sadece bir sayfada veya yazı içerisinde kullanıyorsam, bunların anasayfa için yüklenmesi benim sitemi yavaşlatacaktır ki bu hiç istemediğimiz bir durum. Bunun önüne geçmek için aşağıdaki gibi bir yapı kullanabiliriz.

// Javascript'leri Footer'a taşıma Kodu
function footera_tasi() {

	// Tanımlı dosyaları tanımsız hale getiriyoruz.
	wp_deregister_script( 'jquery' );

	// Dosyaları kodlarımız arasında kaldırıyoruz.
	wp_dequeue_script( 'jquery' );

	// Kendi dosyalarımızı tanımlıyoruz.
	wp_register_script( 'jquery', get_stylesheet_directory_uri() . '/js/jquery.js', '', '', true );

	// Sadece yazı içerisinde jquery dosyamızı kodlarımız arasına ekliyoruz.
	if(is_single()){
		wp_enqueue_script( 'jquery' );
	}
}
add_action('wp_enqueue_scripts', 'footera_tasi', PHP_INT_MAX);

WordPress Tarafından Eklenen Javascript’ler

Son olarak, sitemizde yer alan eklentiler veya WordPress tarafından otomatik olarak eklenen javascript dosyalarının neler olduğunu veya adını bilmiyorsanız görünmesini istediğiniz yere

<?php global $wp_scripts; var_dump($wp_scripts); ?>

yazarak sitenizde bulunan bütün javascript dosyalarını ayrıntılı olarak görebilirsiniz. Sizin kullandığınız dosyalar ise en alt taraflarda bulunan dosyalar olacaktır. Buradan dosyanıza tanımlı kısa isimi öğrenip onu önce o ismi kullanarak tanımsız hale getirip daha sonra istediğiniz şekilde aktif edebilirsiniz. Eklentilerden kaynak dosyaları tekrar aynı isimle aktif ederseniz eklenti ile ilgili problemlerin önüne geçmiş olursunuz.