Laravel’e başlangıç

Laravel, bir PHP frameworkudur. Web sitesinde ( laravel.com ) THE PHP FRAMEWORK FOR WEB ARTISANS. mottosuyla tanıtılmakta. Bu aralar çok popüler olmasından dolayı merak edip araştırdım. Kendinden restfuldur kendileri.

İnternet üzerinde bir çok yerde ve yazılımla ilgili muhabbetlerin bir çoğunda son dönemin en iyi frameworklerinden biri olarak nitelendiriliyor. Örnek olarak şuraya göz atabilirsiniz : http://www.sitepoint.com/best-php-frameworks-2014/

Bende araştırırken karşıma çıkan faydalı ve güzel linkleri bir araya getirdim. Aşağıdan ulaşabilirsiniz;

Laravel Documentation http://laravel.com/docs/introduction [ olmazsa olmaz 🙂 ]

Laracast https://laracasts.com/series [ özellikle Laravel From Scratch kısmında, Laravel’in temel prensipleri güzel anlatılmış ]

Visualizing Laravel Relationships http://matthewhailwood.co.nz/visualizing-laravel-relationships/

Laravel Blog örneği https://github.com/ibrahimhizlioglu/laravel-blog-ornegi

Events & Queue örneği https://github.com/Ardakilic/laravel-4-workshop-sunum

Laravel Request Lifecycle http://laravel-recipes.com/recipes/52

Laravel Tricks http://www.laravel-tricks.com/

CMS https://github.com/sseffa/sfcms

Laravel E-Commerce https://medium.com/laravel-4/c5afca925f28 [ Laravel ile e-ticaret sistemi ]

 

 

Faydalı olan başka linkleri de iletirseniz yazıya ekleyebilirim 🙂

phpmyadmin session süresini arttırmak

Local ortamda çalışırken phpmyadmin’de sürekli timeout yiyerek tekrar giriş yapmak zorunda kalmak canımı sıktı. Bende bu süreyi nasıl uzatacağımı buldum.

Öncelikle phpmyadmin’in config.inc.php dosyasını bulunuz. (linux’ta /etc/phpmyadmin/ klasörünün altında olması gerekiyor.) Buraya $cfg[‘LoginCookieValidity’] parametresini ekleyeceğiz. Ben 1 yıl timeout süresi verdim şu şekilde;

$cfg[‘LoginCookieValidity’] = 31536000; /*365 * 24 * 60 * 60*/

NOT : BUNU SADECE LOCAL ORTAMDA ÇALIŞIRKEN UYGULAYINIZ!!!

PHP 5.5 yayinlandi – yeni ozellikler

20 haziran 2013 itibariyle php.net php 5.5‘in yayınlandığını duyurdu.

Yeni özellikler neler?

  • Üreticiler (generators) ve eşyordamlar (coroutines) eklendi. (yield komutu eklendi). basitçe bir metodda array’e toplayıp array’i return ettiğiniz işi yapmaktadır. Dönen değerler foreach ile gezilerek işlem yapılabilir. bkz : http://tr1.php.net/manual/tr/language.generators.syntax.php
  • Exceptionlar için finally özelliği eklendi. Artık Try – catch te bir exception oluşması durumunda dahi son bir iş yapabileceğimiz bloğumuz olacak. Özellikle kod okunabilirliğini çok artırmasını tahmin ediyoruz.
  • md5, sha1 gibi eskimiş şifre üretme algoritmaları yerine password_hash fonksiyonu eklendi. bkz : http://tr1.php.net/manual/tr/function.password-hash.php
  • Array dereferencing (arrayde değişkene atama zorunluluğunun kalkması)
  • empty() fonksiyonu artık parametre olarak metod da alabilmeye başladı. !!!
  • foreach içinde list kullanabileceğiz. Mesela : foreach ($arr as list($var1, $var2)){…
  • SinifAdi::class yazarak sinifin tam yol adını alabilmemiz artık mümkün! get_class() benzeri bir işlev bu da. Ancak tam adını veriyor.
  • Resim işleme kütüphanesi olan GD ye eklemeler yapıldı.
  • Windows XP ve 2003 desteği kaldırıldı. bu demektir ki, php 5.5 windows xp’lerde ve 2003’lerde çalışmayacak!

Tüm değişiklikleri http://php.net/ChangeLog-5.php#5.5.0 linkinden okuyabilirsiniz.

PHP – Sayfanin iframe icerisinde acilmasini engellemek

Bazı durumlar olur ki, sitenizin, veya bir web sayfanızın iframe içinde açılmasını istemezsiniz. Bu durumda ne yapabiliriz diye bir bakındım ve güncel browser’ların kullandığı bir yöntem gördüm.

Örneğimiz şöyle olacak :

1 adet test.html sayfası,
1 adet test.php sayfası.

test.html içeriği

test.php in iframe <br />
<iframe src = 'test.php'>

test.php içeriği :

<?php
header("X-FRAME-OPTIONS: DENY");

echo "hello world";

?>

Görüldüğü gibi, php dosyamızda bir adet header gönderiyoruz, ve burada Frame seçeneklerini DENY yani engellemesini söylüyoruz.
Böyle olunca örneğin chrome ve mozilla’da iframe içinde “hello world” yazmıyor, çünkü request’i deny üstteki header’dan dolayı ediyor.
Chrome ek olarak konsol’a bir uyarı da basıyor.
Ekran görüntüsü de chrome için şu şekilde oluyor. php-deny-iframe

PHP – singleton pattern vs clone

Class Test{
       /**
	 * Örnek Değişken
	 */
	public $sampleVariable = NULL;

	/**
	 * Singelton bir yapı kullanılmaktadır
	 * @var Test
	 */
	private static $_instance;
       /**
	 * Singelton yapıyı desteklemek için private constructor yarattım içi boş.
	 */
	private function __construct(){

	}

	/**
	 * Singelton yapıyı destekleyen getInstance metodu
	 * @return Test
	 */
	public static function getInstance(){
		if (self::$_instance == null) {
			self::$_instance = new Test();
		}
		return self::$_instance;
	}
}

Yukarıdaki kod basitçe bir singleton mimariyi gösteriyor.

Burada ben

 $test = new Test()

yaratamıyorum. Çünkü constructor method’un erişilebilirliği “private” olarak belirlenmiş.
Yani ancak bu sınıfı

$test = Test::getInstance()

diyerek kullanabilirim.

Peki gelin görün ki, unuttuğumuz bir şey var.

Php’de “clone” diye bir obje kopyalama özelliği var. Nedir bu?

$a = new stdClass();
$k = $a;

dediğimizde, $a->var = 5 dediğimizde, $k da aynı şekilde değişiyor. yani bu ikisi aynı objeyi işaret ediyor.

Ancak

$a = new stdClass();
$k = clone $a;

Yazdığımızda ise, artık $k, $a nın en son halinden kopyalanıp yeni bir obje olarak oluşturuluyor.

Yani ben ilk örnekte,

$test = Test::getInstance();

yazdıktan sonra bir yerlerde
$anotherTest = clone $test;
dersem, artık yeni bir obje türetebilmiş oluyorum.

Buyrun deneyin :

$test = Test::getInstance();
$anotherTest = clone $test;

$test->sampleVariable = 5;
$anotherTest->sampleVariable = 10;

var_dump($test);
var_dump($anotherTest);

Birbirinin aynısı olmayan, aynı objenin farklı 2 instance’ını singleton mimaride de yapabilmiş oldum.

Sonuç : Demek ki, PHP de singleton mimarisi güvenilir değildir. Class’ın içerisine ancak private bir __clone metoru tanımlayınca güvenli oluyor. (@edit adil ilhan’ın yorumuna istinaden)
Yine de güzel bir design patterni olarak beğeniyorum. Ancak bilinçli kullanmanızı tavsiye ederim.