3 Şubat 2014

Laravel Blade Template #1

Blade Laravel'in tema motorudur. Ne işe yarar diyecek olursanız bizim View katmanında işlerimizi kolaylaştırır, daha okunabilir kod yazmamızı sağlar.PHP bilmeyen birisi bile Blade Syntax'ını biraz inceleyerek Laravel'e tasarımlar entegre edebilir.

Ayrıca şunuda söylemem gerekiyor Laravel sizi Blade'i kullanmaya zorlamıyor yani siz saf PHP yide kullanabilirsiniz View kısmında ama gerçekten çok iyi özellikleri var ben kullanmanızı kesinlikle öneriyorum.

Bizim View dosyalarımız app/views klasöründe yer alır siz tasarım dosyanızı buraya oluşturursunuz oluşturuyorken Blade'i kullanmak istiyorsanız dosyaadi.blade.php şeklinde kaydetmelisiniz oraya Blade yazmazsanız direk dosyaadi.php şeklinde kayıt ederseniz Blade'i kullanamazsınız.

Deneme amaçlı app/views/anasayfa.blade.php dosyası oluşturalım daha sonra bu View'i çağırmak içinse app/routes.php'ye şu kodları ekleyelim(routes.php'nizde kurulumdan gelen kodlar vardır onları silin öncelikle)


Route::get('/', function(){
 return View::make('anasayfa');
});

Bu kod ne yapıyor bakacak olursak;
Öncelikle sitemize herhangi bir paremetre olmadan direk index sayfasına girdiğini yakalıyoruz ve geriye bir View döndürüyoruz View'imizde gördüğünüz gibi sadece anasayfa yazdık .blade .php gibi şeyler yazmadık buna dikkat etmelisiniz Laravel otamatik olarak buluyor dosyayı uzantısını yazmanıza gerek yok direk dosya adını yazın. Örneğin dosyanız bir klasör içinde olsaydıda klasör.dosyaadi şeklinde yazmamız gerekicekti yani klasörler için / yerine . kullanıyoruz örnek vermek gerekirse dosyanızın yolu şöyleyse; app/views/yazilar/index.blade.php şu şekilde çağırırdık;


Route::get('/yazilar', function(){
 return View::make('yazilar.index');
});

Evet çağırma işlemini yaptıktan sonra şimdide Blade'in Syntax'ına bakalım.

İlk olarak her programlama dilinde ilk uygulamamız olan Merhaba Dünya yazdırma işlemini yapalım;


{{ 'Merhaba Dünya' }} 

Evet gördüğünüz gibi echo işlemini 2 adet süslü parantez açıp kapatarak yapıyoruz ben orda string yazdırdım değişken fonksiyon da yazdırabilirdik örneğin;


{{ $degisken }} 


{{ time() }} 

şeklindede kullanabiliriz yani {{ time() }} yazdığımızda Blade onu <?php echo time(); ?> olarak çeviriyor.

Tabi sadece echo işlemi yapmıyor ileride daha detaylı görücez örnek bir Form kodu;


{{ Form::open() }}
  
 {{ Form::label('sifre', 'Şifre') }}
 {{ Form::password('sifre') }}
  
{{ Form::close() }}

Blade'in aynı zamanda şöyle bir kısakod'uda var;
Örneğin siz bir değişken'de isim tutuyorsunuz ve istiyorsunuzki isim tanımlaydıysa onu yazsın yoksada varsayılan bir değer yazsın;


{{ $isim or 'Burak' }}

Bu şekilde Blade kontrol eder $isim diye bir değişken varsa onu yazar yoksa Burak yazar.

Blade normalde 2 adet süslü parantezle kullanıyor ama aynı zamanda stringlerden escape yapmak için 3 adet süslü parantezle kullanabiliyoruz örneğin;


{{{ '<script>alert("js çalıştı");</script>' }}}

şeklinde HTML taglarından kaçınabiliriz böyle kullanınca kod çalışmaz. 3 süslü parantez kullanınca Laravel ekrana yazdırmadan önce değeri şu şekilde filtreler;


htmlentities($value, ENT_QUOTES, 'UTF-8', false);

Kontrol Yapıları


İlk olarak if yapısına bir bakalım


@if ($kontrol)
      Kontrol değişkeni true değeri döndürüyor.
@elseif ($kontrol == null)
      Kontrol değişkeni null değeri döndürüyor.
@else
      Kontrol değişkeni false değeri döndürüyor.
@endif

Laravel'in if kontrolünün içeriğini false mi diye kontrol etmemizi sağlayan bir komutuda var ayrıca;


@unless ($degisken)
   Değişken değeri false değeri döndürüyor.
 @endunless

yani bu şu kodla aynı işi yapıyor;


@if (!$degisken)
   Değişken değeri false değeri döndürüyor.
 @endif

Döngüler


{{-- Blade Açıklama Satırı --}}
@for ($i = 1; $i < 100; $i++)
  Döngünün {{ $i }}. dönüşü
@endfor

@foreach ($yazilar as $yazi)
 {{ $yazi }}
@endforeach

@while (true)
 Kısır döngü
@endwhile

Evet arkadaşlar Blade Template'in ilk kısımı burda bitiyor 2. kısımda yield, section, extends gibi komutları incelicez.

15 Ekim 2013

Laravel'de Environment(Çalışma Ortamı)

Merhaba arkadaşlar bugün sizlerle Laravel'de Environment'e göre farklı ayarlar tanımlamayı göreceğiz.

Bu ne işimize yarıyacak derseniz; Uygulamanızı localhostta geliştirirseniz sonra sunucunuzda yayınlarsınız ama localhostta kullandığınız ayarlar ile sunucunuzda kullandığınız ayarlar genelde farklı olur. Örneğin localhostta çalışıyorken mysql kullanıcı adınız ve şifreniz "root" dur genelde ama sunucuda farklıdır.Siz sürekli olarak localde geliştirmeye devam edip sunucuya yüklediğinizde uygulamayı sürekli olarak bu ayarları değiştirmek zorunda kalırsın işte tamda bu iş için kullanacağız bunu.

ilk olarak bootstrap/start.php 'yi açalım orda 29. satırdan itibaren şu kodları görücez;


$env = $app->detectEnvironment(array(

 'local' => array('your-machine-name'),

));

bunu şöyle değiştirelim


$env = $app->detectEnvironment(array(

 'gelistirme' => array('localhost'),

));

böyle olunca localhostta çalışırken Environment'ımız gelistirme olucak ben burda Türkçe olsun diye gelistirme yaptım genelde development olarak kullanılır size kalmış istediğiniz gibi kullanabilirsiniz.

Şimdi böyle yapınca ne değişti ona bakalım;

app/config/ klasörünü açarsak orda ayar dosyalarımızı görürüz örnek olarak database.php üzerinden gidelim burda veritabanı ayarlarımız barınıyor.

Şimdi biz böyle environment'ini değiştirince Laravel ilk olarak bu ayarlara şöyle bakıyor

app/config/gelistirme/database.php eğer bu dosya yoksa app/config/database.php 'yı kullanıyor.
Yani biz config içindeki istediğimiz tüm dosyaları gelistirme klasörüne taşayıp değiştirebiliriz bu ayarları sadece localhosttayken kullanıcak. Şimdi örnek olarak localhostta ayrı sunucumuzda ayrı mysql kullanıcı adı ve şifre kullanarak bir örnekle bitirelim.


app/config/gelistirme/ içinde database.php oluşturalım ve içine;

<?php
return array(

 'connections' => array(

  'mysql' => array(
   'driver'    => 'mysql',
   'host'      => 'localhost',
   'database'  => 'localdb',
   'username'  => 'root',
   'password'  => 'root',
   'charset'   => 'utf8',
   'collation' => 'utf8_unicode_ci',
   'prefix'    => '',
  )
 )

);
?>

Böyle ayarlayınca localhostta bu ayarları kullanacak sunucumuzda app/config/database.php yi kullanacak.

30 Haziran 2013

Laravel Routing

Merhaba arkadaşlar bugün sizlerle ilk dersimizde basitçe giriş yaptığımız Routing'e bugün biraz daha detaylı şekilde bakacağız.

Route ile url parametreleri yakalayıp ona göre işlem yapabiliyoruz.

Basit olarak Route ile 3 şekilde veri alabiliyoruz bunlar

  • Get (Hiçbirşey yapılmadan normal olarak girildiğinde)
  • Post (Başka bir sayfadan post methodu ile girildiğinde)
  • Any (İster post ister get ile girildiğinde)
bu 3 method ile yakalıyoruz url parametreleri.
Birer örnek yapalım

Route::get('giris',function(){
 // burda giriş formu gösterilir
});

Route::post('giris',function(){
 // burda kullanıcı formu doldurup submit ettiğinde giriş işlemleri yapılır
});

Route::any('giris',function(){
 // burası her 2 olayıda yakalar
});
evet bu şekilde bir giriş işlemi için Route oluşturabiliriz tabi any'i kullanmamıza gerek yok.
Şimdi Route'umuza gelen parametreleri alalım.

Route'da Parametreler

Evet şimdide Route ile gelen parametreyi yakalayıp ona göre işlem yapmayı görücez.
Mesala bir haber scripti yazıyoruz haber okuma sayfası yapıcaz bunun için haber/haber_id şeklinde bir url belirttik yönlendirme yaptık şimdi bunu işleyelim.
Route::get('haber/{id}',function($id){
 return $id.' numaralı haber gösteriliyor';
});
şimdi tarayıcımızdan test için laravel/haber/1 yazalım ve sonuç'a bakalım.













evet gördüğünüz gibi routemız çalıştı.
Ben burda {id} şeklinde aldım parametreyi ama böyle bir zorunluluk yok oraya istediğimi yazabilirdim aynı şekilde fonksiyondada function($id) şeklinde id değişkenine atadım bununda urldeki parametreyle aynı olmasına gerek yok tamamen farklı değerler girebilirsiniz ben daha sonra bakınca kafam karışmasın diye böyle kullanıyorum.
Bu şekilde Route yapıyorken fonksiyonumuza default bir parametre değeri atayabiliriz yani kullanıcı id girmezse hata vermemesi için örneği default olarak 1 olsun diyebiliriz onuda şu şekilde yapıyoruz;

Route::get('haber/{id?}',function($id=1){
 return $id.' numaralı haber gösteriliyor';
});
böyle yapınca laravel/haber/ dersekte bize doğal olarak 1 numaralı haber gösteriliyor diyecek.
Şimdi güzelce çalışıyor fakat biz id ye göre veritabanında işlem yapıcaz ileride ama urlmizde sayı değil yazı girsekte çalışıyor













şimdi bunu nasıl çözeceğimize bakalım.

Route'u Regex(Regular Expression) ile filtreleme

Laravel bize Route ile gelen değeri Regex ile işleme imkanı sunuyor şimdi Regex ile gelen parametrenin sadece sayıdan oluşup oluşmadığını kontrol edelim.

Route::get('haber/{id?}',function($id=1){
 return $id.' numaralı haber gösteriliyor';
})->where('id','[0-9]+');

bu şekilde sadece sayıdan oluşan parametrelerin gelmesini sağladık burda dikkat etmeniz gereken birşey var {id} ile aldığımız parametre adı where deki ile aynı olmalıdır yani ;















resimdeki seçili 2 alan aynı olmalıdır..

Bu şekilde sadece sayıları aldık peki sadece yazıları(string)'i nasıl alıcaz;

->where('name', '[A-Za-z]+');

bu şekildede sadece yazıları alıyoruz eğer hem yazı hemde sayı olsun istersek

->where('name', '[A-z0-9]+');

şeklinde kullanabiliriz.
Sayılar için bir alternatif kullanım daha vereyim

->where('name', '\d+');

bu şekildede sadece sayı kabul eder.

Route Özel Filtreler

Az önce Regex ile filtreleme yaptık şimdi özel fonksiyonlarla nasıl yapıcaz bunları görelim.

routes.php ile aynı dizinde filters.php de var onu açıp bakarsanız önceden tanımlanmış auth,auth.basic,guest,csrf filtrelerini görürsünüz.Şimdi nasıl kullanacağımıza bakalım;

Route::get('haber/{id?}',array('before' => 'guest',function($id=1){
 return $id.' numaralı haber gösteriliyor';
}))->where('id','[0-9]+');

Gördüğünüz gibi burda guest filterini kullandık ve before olarak kullandık yani fonksiyomuz çalışmadan önce o filteri uygulasın dedik.Bu şekilde yaptığımız zaman sadece giriş yapmamış kullanıcılar görecek haberimizi.
Buda before yerine after de kullanabiliriz yani önce belirttiğimiz fonksiyon işlemleri çalışır en son filterimiz çalışır.Şimdi kendimiz bir filter oluşturup bunu kullanalım.Ben bu filteri routes.php de oluşturcam siz isterseniz filters.php de oluşturabilirsiniz öyle olunca karışıklık olmaz böylece.

Route::filter('test',function(){
 echo 'test filteri çalıştı';
});

Evet gördüğünüz gibi test adında bir filter oluşturduk şimdi bunu çağıralım routumuzda

Route::get('haber/{id?}',array('before' => 'test|guest',function($id=1){
 return $id.' numaralı haber gösteriliyor';
}))->where('id','[0-9]+');

gördüğünüz gibi birden fazla filter kullanmak istersek | ile ayırıyoruz.
Şimdi test etmek için tarayıcımızdan laravel/haber/1 adresine gidip görelim.












gördüğünüz gibi filterimiz çalıştı.
Ayrıca when komutu ile daha pratik bir kullanımıda var şöyle ;

Route::when('profilim','auth');

böylece profilim sayfasına giriş yapmadan girerse otamatik olarak auth filteri engelleyip login kısmına yönlendirir.
Aynı zamanda when ile bir url kökünüde kontrol edebiliriz örneğin;
Admin kısmınız var şu şekilde bölümler oluşturdunuz:
admin/uyeler
admin/haberler
admin/ayarlar
gibi siz bu şekilde tüm admin bölümlerine filter koyabilirsiniz
Route::when('admin/*','admin_kontrol');

Filterlerı aynı zamanda class tanımlayıpda kullanabiliriz mesala üstte admin_kontrol diye bi filter ismi oluşturduk onu bu şekildede tanımlayabiliriz;

class TestFilter{
    public function filter(){
        echo 'filter çalıştı';
    }
}

Route::filter('admin_kontrol', 'TestFilter');

gördüğünüz gibi class tanımlayarakta kullanabiliyoruz filterleri.
Son olarak Route'da grup olayına bakalım.

Route Grupları

Bu kısımda belirli Route olaylarını bir grup içine alıp hepsine birden aynı işlemi uygulayabiliyorsunuz.Yani demin gördüğümüz when komutuna bir alternatif.


Route::group(array('before' => 'admin_kontrol'), function()
{
    Route::get('admin/uyeler', function()
    {
        // admin değilse gelemicek
    });

    Route::get('admin/haberler', function()
    {
        // admin değilse gelemicek
    });
});

bunuda bu şekilde kullanabilirsiniz.
Routes için şimdilik bu kadarını bilmemiz bize yeter bir sonraki makalede görüşmek üzere.

29 Haziran 2013

Laravel'e giriş

Merhaba arkadaşlar bugün sizlerle Laravel'e basit bir giriş yapıcaz.
İlk olarak ;

Laravel Nedir?

Laravel bir PHP Framework'dür. Son zamanlarda oldukça yaygınlaştı ve hızla büyümeye devam ediyor yaklaşık 2-3 hafta önce 4'üncü sürümü çıktı.Daha fazla bilgi isterseniz kendi sitesini ziyaret edebilirsiniz.

Kısaca ne olduğunu öğrendikten sonra şimdi Laravel'imizi nasıl kuracağız onu öğrenelim.

Laravel Kurulumu

Öncelikle Laravel'i sitemizin sol menüsündeki linkten veya burdan indirin. Daha sonra çalıştığınız sanal server'a kurun ben xampp kullanıyorum Laravel klasörüne çıkarttım dosyalarımı.











Evet bu şekilde klasörlerimiz hazır.
Peki bittimi kurulum?
Malesef bitmedi :( Evet bu işlemi yaptıktan sonra bu adresden Composer edinelim.
Windows'da kuruyorken bizden php.exe yi belirtmemizi isticek bu önemli doğru belirtmeliyiz çalışması için kurulum bitince doğru kurdukmu diye test etmek için cmd yi açıp composer yazıyoruz ve sonra karşımıza bunlar gelirse kurulum doğru demektir.























Evet bu aşamayıda geçtikten sonra geliyoruz son adıma;

Şimdi cmd ile Laravel'in kurulu olduğu klasöre gidiyoruz ve composer install diyoruz.
Daha sonra indirmeye başlıcak bu işlem internet hızınıza göre 1-2 dakika sürebilir.























evet kurulum işlemi burda bitti eğer her işlemi hatasız gerçekleştirdiyseniz tarayıcımızdan laravel'i kurduğumuz klasör/public yazıp gidince böyle bir sayfayla karşılaştıysanız kurulum tamamdır.
Şimdi doğal olarak public klasörüne takıldınız şimdi bunu silelim.
Public klasörüne girip tüm dosyaları bir üst klasöre yani laravel'in ana klasörüne taşıyın taşıdıktan sonra index.php yi açıyoruz ve
require __DIR__.'/../bootstrap/autoload.php';
$app = require_once __DIR__.'/../bootstrap/start.php'; 

burdan ../ ları siliyoruz daha sonra bu şekilde olucak

require __DIR__.'/bootstrap/autoload.php';
$app = require_once __DIR__.'/bootstrap/start.php';
böyle kayıt ediyoruz ve kurulum işlemi tamamen bitti artık kod yazma kısmına geçelim.

Laravel'de Routes olayları

Şimdi nedir bu Route;
Route ile kullanıcının girdiği url yi yakalıyoruz yani

Route::get('/', function(){});
bu  şekilde kullanıcı index'de iken neler yapacağımızı söylüyoruz laravel'e şimdi açalım app klasörü altındaki routes.php yi orda böyle bir örnek var

Route::get('/', function(){
     return View::make('hello');
});
 Yani kullanıcı anasayfadaysa yani index'de ise hiç parametre girmedi ise geriye hello view'ini döndürüyor.

Hemen daha iyi anlamak için bir örnek yapalım

Route::get('hakkimizda',function(){  
     return 'Hakkımızda sayfası';
});
yazınca laravel/hakkimizda sayfasına gidince  Hakkımızda sayfası yazdığını görebilirsiniz.

Evet Laravel'e basitce giriş yaptık bir sonraki makalemizde daha detaylı olarak incelicez..