11 Aralık 2007 Salı

CakePHP (php) ve Eclipse

Eğer php ile eclipse kullanmak istiyorsanız, işiniz zor. Pdt tam bir kabus. İndirmeyi bile başaramadım.

Ama aşağıdaki plugin işinizi görebilir:

phpeclipse tiki-view_articles.php

veya buradan da alabilirsiniz :

http://sourceforge.net/project/showfiles.php?group_id=57621

29 Ekim 2007 Pazartesi

Fatal error: Class 'MyclassController' not found in cake_1.2\cake\dispatcher.php on line 188

Bu saçma sapan hatanın sebebi şu imiş :

< ?

yerine

< ? php

yazarsanız sorun düzelir.

Allah'ım bana sabır ver.

6 Ekim 2007 Cumartesi

Radio Buttons CakePHP 1.1 den 1.2'ye geçiş.

Aşağıdaki örneklerden faydalanabilirsiniz :

cake :
< ?php
echo $phpgaclForm->radio('fieldName', array('0' => 'Allow', '1' => 'Deny', '2' => 'Inherit'), null, array('class' => 'radio', 'value' => '3'));
? >

html:
Allow
Deny
Inherit


cake:
< ?php
echo $phpgaclForm->radio('fieldName', array('0' => 'Allow', '1' => 'Deny', '2' => 'Inherit'), null, array('class' => 'radio', 'value' => '0'));
? >

html:
Allow
Deny
Inherit

Özet olarak, seçili gelmesini istediğiniz bir seçenek var ise, value kısmına onun solundaki rakamı yazmanız gerekir, eğer hiç seçili olmasın istiyorsanız, value kısmına burada 0,1,ve 2 tanımlı olduğu için, bunlar dışında bir rakam yazmalısınız. Bu örnekte 3 yazılmıştır.

4 Ekim 2007 Perşembe

PhpGacl içinde kullanılan ADO DB ve utf-8 problemi

Uzun çabalardan ve debelenmelerden sonra nihayet phpgacl'yi kısmen CakePhp 1.2 içinde çalışabilir hale getirmeyi başardım. Ancak bu seferde karşıma utf-8 problemi çıktı. Daha CakePhp için uyguşadığım metodu burada nasıl uygularım diye düşündüm - ki blog'un ilk sayfalarında CakePhp için olan çözümü bulabilirsiniz - ve sonunda adodb-mysql.inc.php içinde bulunan _query metodunu;

function _query($sql, $inputarr) {
//global $ADODB_COUNTRECS;
//if($ADODB_COUNTRECS)
return mysql_query($sql, $this->_connectionID);
//else return @mysql_unbuffered_query($sql,$this->_connectionID); // requires PHP >= 4.0.6
}



aşağıdaki şekilde değiştirdim. Sorunumu şimdilik çözdü, eğer yeni bir şeyler çıokmaz ise :)

function _query($sql, $inputarr) {
//global $ADODB_COUNTRECS;
//if($ADODB_COUNTRECS)
mysql_query("SET NAMES 'UTF8'", $this->_connectionID);
return mysql_query($sql, $this->_connectionID);
//else return @mysql_unbuffered_query($sql,$this->_connectionID); // requires PHP >= 4.0.6
}

3 Ekim 2007 Çarşamba

formTag CakePHP 1.1 den 1.2'ye geçiş.

1.1 de html helper içindeki formTag kullanılıyorken, 1.2 de yerine form helper içinde bulunan create metodu kullanılıyor.

Örneğin;

$htmlOptions['url'] = 'action';
echo $phpgaclForm->create(null, $htmlOptions);


kullanımı sonucu aşağıdaki html'i elde ediyorsunuz :

<form method="post" action="/aaa/bbb/ccc/action">

Kaynak : https://trac.cakephp.org/changeset/4233/branches/1.2.x.x/cake/libs/view/helpers/ajax.php
Eğer formTag'ın birebir karşılığını arıyorsanız, şöyle bir çözüm işinizi görebilir;

< ? php $homeUrl = $this->params['url']['url']; ? >
< ? php $htmlOptions['url'] = '/' . $homeUrl; ? >
< ? php echo $phpgaclForm->create(null, $htmlOptions); ? >

14 Eylül 2007 Cuma

Component.startup mı yoksa Controller.beforeFilter metodu 'mu önce çağrılıyor ?

Acı bir tecrübe ile öğrendim, ki controller.beforeFilter önce çağrılıyor :)

Örneğin aşağıdaki gibi bir component'iniz olsun :

class MyComponent extends Object {
function startup() {
pr('Hello I am component')
}
}

ve bu component'i kullanan bir controller :

class MyController eztends AppController {
var $components = "MyCompenent";

function beforeFilter() {
pr('Hello I am controller')
}
}

Eğer bir view'a yönlendirirseniz sonuç şöyle olacaktır :

Hello I'am controller
Hello 'am component

Önemli Hatırlatmalar

Cannot send session cache limiter ............


İle başlayan bir hata aldığınızda, hata olduğu söylenen dosyaya dikkatle bakın. Herhangi bir şekilde php açılışı "" sonrasında boşluk da dahil hiç bir şey olmamalı aksi taktirde bu saçma hatayı alıyorsunuz.

Bknz : http://cakebaker.42dh.com/2006/10/30/cannot-send-session-cache-limiter/

7 Eylül 2007 Cuma

8. İlk yardımcı (Helper) 'mı yazdım :)

İlk yardımcımı dün gece yazdım. Verilen bir karakter katarı içerisinden tr karakterlerden karşılığı olanların ingilizce karşılıkları ile değiştirip olmayanları ise '_' ile değiştirip size veriyor. Benim çok işime yaradı belki size de bir faydası olur. Dosyayı views/helper dizininde tutmanız gerekiyor.

class LinkToHtmlHelper extends Helper {

function getHtml($phrasetoHtml) {

$phrase = trim($phrasetoHtml);
$trchars = array(" ", "-", "ı", "İ", "ğ", "Ğ", "ş", "Ş", "ü", "Ü", "ö", "Ö", "ç", "Ç");
$engchars = array("_", "_", "i", "I", "g", "G", "s", "S", "u", "U", "o", "O", "c", "Ç");
$newphrase = str_replace($trchars, $engchars, $phrase) . '.html;';

return $this->output($newphrase);
}
}

Nasıl kullanacam derseniz, diğre helperlar gibi. Controller içinde tanımlayıp;

var $helpers = array ( 'LinkToHtml' );


View içinde ;

->getHtml(text); ?>

çağırabilirsiniz.

7. Tablosu olmayan mode nasıl yazılır ?

Eğer herhangi bir tablo ile ilişkisi olmayan bir model yazmak isterseniz, aşağıdaki örneğe benzer bir yol takip etmelisiniz.

class MyModel extends Model{
var $useTable = false;
}

Eğer “var $useTable = false;” yapmazsanız, “missing table” hatası alırsınız.

4 Eylül 2007 Salı

6. Model'i olmayan controller nasıl yazılır ?

Eğer herhangi bir model ile ilişkisi olmayan bir controller yazmak isterseniz, aşağıdaki örneğe benzer bir yol takip etmelisiniz.

// tested with CakePHP r1892
class MyController extends AppController
{
// var $uses = null; works too
var $uses = array();

function index(){
}
}

Eğer “var $uses = array();” yapmazsanız, “missing model” hatası alırsınız.

Detay için : Controller without a model

2 Eylül 2007 Pazar

5. Önemli uyarı, her şey düzgün görünüyor ama aşağıdaki mesaj da ne ?

Eğer her şey normal görünüyor, ama aşağıdaki mesajdan bir türlü kurtulamıyorsanız, ilk olarak veritabanı sunucusunu açıp açmadığınızı kontrol etmenizi öneririm. DEBUG sevyesi 0 ise, detaylı ve gerçek sorunu öğrenmeniz mümkün değil, sürekli aşağıdaki hatayı alırsınız, ve benim gibi saçlarınızı yolabilirsiniz :(

Not found


The requested address was not found on this server.

31 Ağustos 2007 Cuma

4. ACL - Access Control List Nam-ı diğer, Erişim Düzenleme Listesi

ACL, ACO, ARO .....

Ne demek ?

ACL: Access Control Listes - Erişim Düzen Listesi
ACO: Access Control Object - Erişim Düzen Nesnesi - Sistem içinde erişilmek istenen nesneler.
ARO: Access Request Object - Erişim İstek Nesnesi - Sistem içinde bulunan kaynakalare erişmek isteyen nesneler.

Kısa bir tarif yapmak gerekirse :

"ACL is used to decide when an ARO can have access to an ACO."

aynen çeviriyorum :

"ACL, ARO'ların hangi şartlarda, hangi ACO'lara erişebileceğine karar vemeke amacı ile kullanılır."

Bundan sonra daha detaylı incelemeğe çalışacağım.

22 Ağustos 2007 Çarşamba

3. Türkçe karakter/harf problemini nasıl çözerim ? (22.08.2007)

CakePhp ve mysql kurduktan sonraki ilk büyük problemim utf-8 kullanarak türkçe karakter/harf görüntülemesini yapmak istediğimde yaşadım. Kendi laptopumda MyPhpAdmin'de düzgün görünen utf-8 verileri CakePhp ekranlarında düzgün görünmüyordu. Yaptığım araştırma sonucunda, aşağıdaki bağlantıda bu sorun için genel çözüm sunabilen iki farklı yönteme rastladım:

http://groups.google.com/group/cake-php/browse_thread/thread/902d931ff87eb8ac/c4ca2c14891df179

Birinci yöntem :
cake/libs/model/dbo/dbo_mysql.php içinde içinde değişiklik yapmak.

İkinci yöntem :
app_model.php içinde değişiklik yapma.

Ben ikinci yöntemi izledim ve gayet hoş oldu, tavsiye ederim :)

Şöyle ki, AppModel sınıfına aşağıdaki metodu ekledim.

class AppModel extends Model{
function __construct() {
$this->execute("SET NAMES 'UTF8'");
parent::__construct();
}

2. CakePhp ilk yüklendiğinde ana sayfa yönlendirmesi (22.08.2007)

CakePhp ilk çalıştığında standart bir ekran gelir. Eğer başka bir yere yönlenmesini istiyorsanız yapmanız gereken çok basit bir iş :

/app/config/routes.php dosyası içinde aşağıdaki satır yer almaktadır.

$Route->connect ('/', array('controller'=>'pages', 'action'=>'display', 'home'));

Bu satır / url sini Cake ana sayfasına yönlendirir. Bu satırı değiştirerek sizin controller'inize yönlendirebilirsiniz.

Detayını http://manual.cakephp.org/appendix/blog_tutorial dan öğrenebilirsiniz.

5 Ağustos 2007 Pazar

1. CakePhp maceram - Sayfa altındaki sql ler

Başlangıç tarihi : 22.07.2007

Bir o eksik kalmıştı, artık php işine de gireyim dediğimde aklıma ilk gelen, bu sefer farklı başlayıp bir framework (kolaylaştırıcı : bu tabir bana ait) seçmek ve ardından işe başlamak oldu. Bir kaç saatlik google gezintisi, sayfalarca döküman okuma seansı ve bir kaç yakın arkadaştan fikir alma operasyonları ardından listemi symfony ve cakephp kalana kadar kısalttım. Symfony ile yaptığım bir demo çalıştırma işlemi ve gelen telkinler sonucu CakePhp'yi denemeye karar verdim. Bundan sonra burada yaşadığım sorunlar ve çözümlerini takip edebilirsiniz.

Yapmak istediklerim ve yapamadıklarım ! Vay be :-)

Her şey harika gidiyor derken farkettim ki sayfanın en altında çalışan sql cümleleri ile ilgili debug bilgileri var. Nasıl kaldırılacağını kılavuzda bir yerlerde okumuştum ama maalesef, hatırlayamadım. Sağolsun IBM :-). Burada güzel şeyler bulabilirsiniz

http://www.scribd.com/doc/5547/CakePHP-tutorial-no-5-from-IBM

Kısacası core.php içinde define('DEBUG', 0); şeklinde bir değişiklik yaparak sorundan kurtulabilirsiniz.