Slim Framework ve RedBeanPHP’yi Anlamak

Daha önceleri birkaç forum sitesinde Slim Framework’ü anlamak için sorulara rast gelmiştim. Bundan mütevellit Slim ve RedBeanPHP’yi anlamak için basit bir blog betiği yazdım. Slim Framework için rota işlemleri, RedBeanPHP içinse CRUD işlemlerini anlamak için kod satırlarında gerekli açıklamaları yaptım. Blog betiğinin özellikleri;

  • Gönderi (Listele, ekle, düzenle, sil)
  • Kategori (Listele, ekle, düzenle, sil)
  • Ayar (Basit key/value)
  • Yönetici paneli giriş/çıkış

Hızlı Blog

Örnek kod satırları:

/**
 * Blog gönderi sayfası
 * Gönderiyi görüntüler
 * @param int $id
 */
$app->get("/gonderi/:id", function ($id) use ($app)
{
	// $id değişkeni nümerik değilse hata ver
	if (!is_numeric($id)) exit("Hata");

	// Gönderiyi $id'sine göre çekiyoruz
	$gonderi = R::load("gonderi", $id);

	// Gönderi sayfasını yorumluyoruz
	// $gonderi değişkenini tema dosyasına atıyoruz
	$app->render("gonderi.php", 
		["gonderi" => $gonderi,
		"baslik" => $gonderi["baslik"] ]);
});

Herhangi bir konuda sorularınızı bu sayfadan yorum yaparak veya e-posta ile iletişime geçerek iletebilirsiniz. Kolay gelsin.

Github bağlantısı
HizliBlog Dosyaları (zip)

MySQL’den Gelen Zamanı Dönüştürmek

MySQL’de ayarladığımız datetime/timestamp veri tipli alanlarından gelen tarih verisini ekrana dökmek istediğimizde 2014-11-19 17:16:25 gibi farklı bir tarih-zaman biçimiyle karşılaşıyoruz. Bunu düzgün bir hale getirmek için PHP’de strtotime() fonksiyonunu kullanabiliriz. Şöyle bir ek fonksiyon kullanırsak, işimizi daha rahat görmüş oluruz:

<?php
function mysqlTarihCevir ($tarihzaman, $duzen = null) {
    $tarihzaman = strtotime($tarihzaman);
    if ($duzen) {
        return date($duzen, $tarihzaman);
    } else {
        return date("d F Y l", $tarihzaman);
    }
}

Yukarıdaki fonksiyonda gelen tarihi otomatikmen d F Y l şeklinde biçimlendiriyoruz ve fonksiyonu mysqlTarihCevir("2014-11-19 17:16:25") olarak çalıştırdığımızda sonuç olarak “19 Kasım 2014 Çarşamba” çıktısını alıyoruz. Tarih biçimlendirme hakkında daha fazla bilgi almak için buradaki manuel sayfasına bakabilirsiniz. Farklı şekilde kullanmak içinse şöyle yapabiliriz: mysqlTarihCevir("2014-11-19 17:16:25", "d-m-Y") böylelikle çıktı “19-11-2014” olacaktır.

PHP ile Kısa If Else Kullanımı

En basitinden bir değişkenin, fonksiyonun vs. TRUE ya da FALSE döndürüp döndürmediğini öğrenmek için uzunca bir if, else ifadesi kullanmamıza gerek yok. Kullandığım bir iki yöntem şöyle:

<?php
$deger = 'Herhangi';
echo $deger == 'Herhangi' ? 'Değer doğru' : 'Doğru değil';

ya da

<?php
function dene($deger = null) {
    return is_null($deger) ? 'Değer gelmedi' : 'Değer geldi';
}

ya da

<?php
function dene($deger = null) {
    if ($deger === null) return true;
    return false;
}

gibi gibi.

RedBeanPHP ile Etiket Sistemi

RedBeanPHP ile herhangi bir tablo için etiket sistemi yapmak istersek, ORM’nin içinde gelen birkaç özellikle beraber yapabiliyoruz. Örneğin, bir blog için gönderi tablomuz olsun. Gönderi tablosunda her gönderi için birden fazla etiket tanımlamak isteyelim. Şöyle örnekleyeyim;

<?php
$post = R::load("post", 5); // 5 numaralı gönderiyi seçiyorum
R::tag($post, ["etiket 1", "etiket 2", "etiket 3"]); // Gönderiye etiketleri tanımlıyorum

Çok basit birkaç işlem göründüğü üzere. Peki bu kodlar ne yapıyor? Veritabanında tag ve post_tag olmak üzere iki tane tablo oluşturuyor. tag tablosuna id, title olmak üzere iki tane sütun, post_tag tablosuna ise id, post_id, tag_id olmak üzere üç tane sütun oluşturuyor ve post tablosu ile ilişkilendiriyor. Bu ilişkilendirmeye Many to Many İlişki Tipi yazısında bahsetmiştim.

Bir gönderiye ait etiketleri listelemek istersek, aşağıdaki kodları yazıyoruz;

<?php
$post = R::load("post", 5); // 5 ID'li gönderiyi seçelim
$etiketler = R::tags($post); // Etiket listesini değişkene atıyorum
foreach ($etiketler as $etiket) { // Ve listeliyorum
    echo $etiket . ",";
}

Daha detaylı kullanımına ve diğer özelliklere şuradaki sayfadan göz atabilirsiniz.