Bu sıralar »
By Timu EREN on Aug 8, 2008 in Symfony | 0 Comments
Orada olmayı çok istiyorum.
Recent ArticlesBy Timu EREN on Aug 3, 2008 in Genel, Php | 0 Comments
Yeni duyurulan 5.3 alpha 1 versionunu gerçekten ilginç özellikler barındırıyor, bunlardan en ilginç olanı ise, namespace, late static bindings ve lambda closures desteği,
namespace‘ler sayesinde artık aynı isimde sınıfların kullanılması problem olmaktan çıkacaki,, tıpkı python’da olduğu gibi.
lambda closures desteği sayesinde ise bloklar içerisinde fonksiyonlar tanımlanabilecek
ve late static bindings sayesinde extend edilen sınıf içerisinde hangi sınıf bizi extend etmiş bilebileceğiz artık.
İyi günlerde kullanalım.
By Timu EREN on Jun 30, 2008 in Php, Symfony | 0 Comments
Symfony 1.1 kararlı sürüm bu gün itibari ile duyuruldu,
yeni yapısı, sfForm sınıfı, routing sınıfı üzerinde cache desteği, yeni görev sistemi, ve yml parser’i ile göz dolduran yeni symfony 1.1 hepimize hayırlı uğurlu olsun.
(Yazar): Sevgili günlük..
(Günlük): Sevgili yazar..
(Yazar): Symfony 1.1 için açılış yapacam nerede lan bunun kırmızı kurdelesi?
(Günlük): Gözüne bağladılar abi…
By Timu EREN on Jun 29, 2008 in Php, Symfony, ip uçu | 0 Comments
sfForm symfony framework‘ü içerisinde geliştirilen ve yeni versiyonu ile gelecek olan yeni bir
form tasarım ve otomasyon aracıdır. Kolay kullanımı ve özelliştirilebilmesi yetenekleri ile göze çarpan bu
yeni aracı biraz daha yakından tanımak için bir çalışma içeriside çıkan notlarımı aşağıda bulabilirsiniz.
sfForm sınıfı ArrayAccess interface’ini impletemte eden bir sınıftır böylece sınıf
içerisindeki özelliklere tıpkı bir arrayin elemanlarına erişebilir gibi kullanabiliriz. Hazırladığımız formlar eğer veri tabanı ile direk iletişim kurmayacak ise sfForm sınıfından türetilmeli aksi halde bir abstract sınıf olan sfPropelForm sınıfından türetilmelidir.
sfform ile form oluşturmak için formumuza uygun bir sınıf ismi vererek sfForm sınıfından türetmeliyiz,
örnek:
1 2 3 4 | class projectNameRegister extends sfForm { } |
Form nesnemiz şu anda oldukça kullanışsız bir nesnedir, kullanışlı hale getirmek için sfForm sınıfını içerisinde çağırılan configure methodunu tanımlayıp içerisinde formumuza ait input elemanlarını yerleştirmemiz gerekiyor. Bunun için ise form input alanlarını taşıyan sfWidgetFormSchema nesnesinden faydalanıyoruz, bu nesnenin ilk parametresi bir array olup içerisindeki elamanlar birer sfWidgetFormInput nesnesi taşırlar.
1 2 3 4 5 6 7 8 9 10 11 12 13 | class projectNameRegister extends sfForm { public function configure() { $formWidgetSchema = new sfWidgetFormSchema( array( 'username' => new sfWidgetFormInput(); ) ); $this->setWidgetSchema($formWidgetSchema); } } |
sfWidgetFormInput nesnesi 2 adet array parametre almaktadır. ilk parametre input alanına ait seçenekler diğeri ise input etiketine eklemek istediğimiz öznitelikler,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class projectNameRegister extends sfForm { public function configure() { $formWidgetSchema = new sfWidgetFormSchema( array( 'username' => new sfWidgetFormInput(array(), array('id'=>'register_username')); ) ); $this->setWidgetSchema($formWidgetSchema); } } |
Artık formumuzu view katmanında kullanabiliriz,
tek yapmamız gereken action içerisinde formunuza ait yeni bir instance oluşturmak ve view katmanında bu instance’ı render etmesini sağlamak bunun için sfForm nesnesine ait __toString
methodundan yardım alabileceğimiz gibi dahada özelleştirmek için her form elemanına tek tek erişerek her elemanı form içerisinde istediğimiz yerde görüntüleyebiliriz.
action:
1 2 3 4 5 6 7 8 9 10 11 12 13 | public function executeRegister($request) { $registerForm = new projectNameRegister(); if($request->isMethod('post')) { $registerForm->bind(array( 'username' => $request->getParameter('username') )); } $this->registerForm = $registerForm; } |
view:
1 2 3 4 5 6 7 8 9 10 11 | <form action="<?php echo url_for('/register') ?>"> <?php echo $registerForm; ?> </form> yada <pre lang="php" line="1"> <form action="<?php echo url_for('/register') ?>"> <div class="field-container"><?php echo $registerForm['username']->render(); ?></div> </form> |
Formumuzun post edilmesi halinde ise formumuza ait input elemanlarının veri doğrulamasını yine form nesnemiz içerisinde gerçekleştiriyoruz. Bu işlemide tıpkı sfWidgetFormSchema nesnesi gibi bir başka nesneyi sfValidatorSchema nesnesini kullanarak gerçekleştiriyoruz.
sfValidatorSchema nesnesi bir array parametre almakta ve bu array’in elemanları formumuzun input alanlarına ait doğrulama nesnelerini taşımaktadır.
sfValidatorXXXXX nesneleri iki adet array parametre almaktadır, her validator sınıfının kendi parametreleri vardır, ancak her sınıf içerisinde required, trim ve empty_values isimli parametreler varsayılan olarak gelmektedir, ayrıca hata mesajları için
invalid ve required isimli iki hata mesajı öntanımlıdır. ilk parametre doğrulama işlemlerinin neler olduğunu tanımlarken ikinci parametre ise her doğrulama işleminin başarısızlık durumunda kullanıcıya verilecek bilgi mesajlarını içermektedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | class projectNameRegister extends sfForm { public function configure() { $formWidgetSchema = new sfWidgetFormSchema( array( 'username' => new sfWidgetFormInput(array(), array('id'=>'register_username')); ) ); $validationSchema = new sfValidatorSchema(array( 'username' => new sfValidatorString(array( // parametre // değeri 'min_lenght' => 3 ), array( // parametre doğrulaması başarısız ise kullanıcıya verilecek mesaj 'min_lenght' => 'your username too short, min 3 char' )) )); $this->setWidgetSchema($formWidgetSchema); $this->setValidatorSchema($validationSchema); } } |
Artık doğrulama niteliğini kullanmak için action içerisinde bir iki ufak değişiklik yapmamız gerekmektedir.
action:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public function executeRegister($request) { $registerForm = new projectNameRegister(); if($request->isMethod('post')) { $registerForm->bind(array( 'username' => $request->getParameter('username') )); if($registerForm->isValid()) { // form verileri doğru ise yapılacak işlemler. // eğer formumuz bir sfPropelForm nesnesi ise ->save() methodunu kullanarak // yeni veya güncellenmiş verileri database üzerinde saklayabiliriz. } } $this->registerForm = $registerForm; } |
Eğer formumuzu özelleştirmek istersen bunun iki adet farklı yolu bulunmaktadır,
birincisi yeni bir form formatter nesnesi hazırlama, diğeri ise form nesnesi içerisindeki elemanlara erişerek html içerisine gömmek, ilk yol daha kolay gibi dursada şu an için bazı kısıtlayıcı durumu bulunmakdatır, bunların en önemlisi form alanlarındaki doğrulama hatası durumunda doğrulama hatasını taşıyan html etiketine form-error-username gibi bir id verilemiyor oluşudur. buna rağmen bu durum sizi rahatsız etmeyebilir, o halde yeni bir formatter sınıf hazırlamak oldukça kolaydır. sfForm sınıfına ait iki adet formatter sınıf mevcuttur birincisi formlarımızı table olarak görüntülerken diğeri liste elemanları olarak görüntülemektedir ve varsayılan formatter aracı table’dır. yeni bir form formatter sınıfı hazırladıktan sonra tek yapmamız gereken formumuz içerisinde bu formatter sınıfını kullanmak istediğimizi belirtmektir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | class projectNameRegister extends sfForm { public function configure() { $formWidgetSchema = new sfWidgetFormSchema( array( 'username' => new sfWidgetFormInput(array(), array('id'=>'register_username')); ) ); $validationSchema = new sfValidatorSchema(array( 'username' => new sfValidatorString(array( // parametre // değeri 'min_lenght' => 3 ), array( // parametre doğrulaması başarısız ise kullanıcıya verilecek mesaj 'min_lenght' => 'your username too short, min 3 char' )) )); $this->setWidgetSchema($formWidgetSchema); $this->setValidatorSchema($validationSchema); // hey yeni bir formatter hazırladık bunu kullan ay sfForm aracı. $this->getWidgetSchema()->setFormFormatterName('Register'); } } |
Form formatter sınıfı mutlak olarak sfWidgetFormSchemaFormatter abstract sınıfından extend etmelidir. yeni hazırlanan formatter sınıfı içerisinde sfWidgetFormSchemaFormatter da bulunan öz nitelikleri değiştirmemiz yeterlidir.
1 2 3 4 5 6 7 8 | class sfWidgetFormSchemaFormatterRegister extends sfWidgetFormSchemaFormatter { $rowFormat = "<div class='form-field-container'>\n %label%\n %field%\n %help%\n %error%\n %hidden_fields%</div>\n", $errorRowFormat = "<div class='form-error'>\n%errors%</div>\n", $helpFormat = "<span class='form-help'>%help%</span>", $decodatorFormat = ''; } |
sfForm label metinlerini form input alanlarını taşıyan array içerisindeki eleman isimlerinden alır, ancak kimi durumda bunu değiştirmemiz gerekir bunun için yapılacak en kısa ve kolay yok form nesnemiz içerisinde
widgetSchema nesnesine ait setLabels methodunu kullanmak olacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | class projectNameRegister extends sfForm { public function configure() { $formWidgetSchema = new sfWidgetFormSchema( array( 'username' => new sfWidgetFormInput(array(), array('id'=>'register_username')); ) ); $validationSchema = new sfValidatorSchema(array( 'username' => new sfValidatorString(array( // parametre // değeri 'min_lenght' => 3 ), array( // parametre doğrulaması başarısız ise kullanıcıya verilecek mesaj 'min_lenght' => 'your username too short, min 3 char' )) )); // username alanına ait label text değerini değiştir. $formWidgetSchema->setLabels(array( 'username' => 'Choose your username' )); $this->setWidgetSchema($formWidgetSchema); $this->setValidatorSchema($validationSchema); // hey yeni bir formatter hazırladık bunu kullan ay sfForm aracı. $this->getWidgetSchema()->setFormFormatterName('Register'); } } |
sfForm aracına ait edindiğim bilgileri en kısa zamanda tekrar burada bulabilirsiniz.
By Timu EREN on Jun 5, 2008 in Symfony | 0 Comments
Akşamın ilerleyen saatleri ve bir yabancının camdan içeriği seyretmesi, eğer evinizde oturuyorsanız pek hoş karşılanmayacak bir durum olabilir ancak ya değilseniz? Kapıdan içeri davet edilen meraklı gözlere sahip, orta boylu, tonton yüzlü birinin ilk sözleri, “hi, do you sepak english? spanish?” ilerleyen zamanlarda öğreniyoruz ki kendisi bir gemici ve gemisi tuzlaya yanaşmış bir kaç hafta daha buralarda imiş, 15 yaşında okuldan ayrılıp, dolaşmaya başlamış ve otuzlu yaşlarına yaklaşırken üniversiye gidip arkeoloji okumuş, 3 sene meksikada arkeoloji alanında çalıştıktan sonra, gemici olarak çalışmaya başlamış, şimdi yılın 8/9 ayı gemide çalışarak, diğer zamanını ise aylak aylak gezerek, müzik yaparak geçiriyor. Çok iyi blues çalması ise sanırım kendi kültürünün parçası olmasından, istediği şey ise dünyayı gezip farklı müzikleri keşfetmek ve bunları kendi müziği ile birleştirmek. Akşamın ilerleyen saatleri chicago blues ve bendir eşliğinde eğlenceli ve zevkli bir müzik deneyimi, ülkesindeki müzik ile ilgili problemler, barlar ve müzisyenler. Filmlerde her hayalin gerçekleştiği bir amerika yerine, oranın aslında buradan çok farklı olmadığının tasdiklenmesi. Mustafanın türk motifleri ile klasik gitarda yaptığı tınılar, (sirto, longa, sabah makamı, vs.) Sevdiğimiz kişilerin, (Asiaminor - Kamil erdem, Haramiler’in tanıtımı ve reklamı
) ve karşılıklı albüm değiş tokuş ile birlikte stüdyoda “takılma” sözünün verilmesi ile sonlanan gece. gece saat ‘de yatağa uzanma ve sabahın kör saatinde uyanma, bu deneyim tüm bunlara değer, işte bu benim eğlencem.
By Timu EREN on Jun 2, 2008 in Symfony | 0 Comments
Yahoo!’nun yakın zamanda kimi uygulamarını symfony ile yeniden yazdığını symfony ile ilgilenen herkez duymuştur sanırım, yahoo! şimdide geliştirme sırasında kendi içerisinde geliştirdiği bazı pluginleri symfony kullanıcılarına açtı, ysfR3Plugin ve ysfDimensionsPlugin yakın zamanda symfony’nin yahoo! gibi diğer şirketler tarafından desteklendiğinin görürsek şaşırmayacağım.
plugin’lerden bahsetmek gerekirse ysfDimensionsPlugin uygulamanızın çeşitli kullanıcı/çevresel değişkenlerinden etkilenerek şekillenebilmesi, örneğin pek çok firma logo’larının altına hizmet verdiği kullanıcının ülkesi için bir metin ekliyor (Google türkiye gibi) veya kullanıcın dil seçimine göre uygulamanın template’inin değiştirilmesi gibi işlemler için kullanılan bir plugin.
ysfR3Plugin ise yine yahoo! tarafından geliştirilen ve http://developer.yahoo.com/r3/ adresinden detaylı bilgi alabileceğiniz gibi bir yerelleştirme ve çeviri api’si olan r3′ü kullanarak uygulamanızın yerelleştirme ve çeviri işlerini yürüten bir eklenti.
By Timu EREN on Apr 22, 2008 in Bu ne?, Genel | 0 Comments
Flash ile HTTPS protokolü üzerinden veri alışverişi yapmak ie6 ile saçınızı başınızı yoldurabilir, çileden çıkartabilir, bünyede stress ve sıkıntı yaratabilir, sivilce yapabilir. Bütün bunları yaşamamak ve saçlarınızın azalmamasını istiyorsanız sunucu tarafında XML verisi için pragma: cache HTTP header’ını eklemeniz yeterli, aksi halde çok sevgili gül dikeni IE6 gelen xml veriyi flash player’a iletmiyor ve dolayısı ile yazdığınız flash çalışmıyor.
ayrıntılı bilgi burada
By Timu EREN on Apr 11, 2008 in Genel, kişisel | 1 Comment
Bir zamanlar YouTube kapıtılırdı alıştık, bu gün groups.google.com kapatılıyor, bunada alışırız, yarın images.google.com kapanır, onada alışırız, bir başka gün google.com kapanır. Bir gün bilgisayarımızıda kapatırlar yazı yazıyoruz diye, bir başka gün beyinlerimizi kapatırlar düşünüyoruz diye ve şimdi bizler ağızlarımızı kapatıyoruz, parmaklarımızı çekiyoruz klavyeden, acaba alışkanlıktan mı?
By Timu EREN on Mar 19, 2008 in Bu ne?, Genel, Php, ip uçu | 0 Comments
Eğer bir gün komut satırından çalışacak bir PHP script yazmak zorunda kalır ve HEDE_HODO methodu/fonksiyonu yoktur diye bir hata alırsanız yerel değişkenlerini kontrol etmenizi tavsiye ediyorum aksi halde $mg->get_list() olarak kullanabildiğiniz bir methodu $mg->GET_LIST(); biçiminde kullanamayabilirsiniz, çözüm yine aynı ecport LC_ALL=”C” && php -f /sizin/php/dosyanız.php
İyi bir gün geçirmeniz dileği ile…
By Timu EREN on Feb 14, 2008 in Bu ne?, Genel | 0 Comments
Peki Site aramayı izlemeyin sizde o vakit..
