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)

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.

RedBeanPHP CRUD (Ekleme, Okuma, Güncelleme, Silme) İşlemleri

Slim Framework ve Veritabanı İşlemleri yazısında RedBeanPHP’den bahsetmiştik. Bu sefer CRUD işlemleri nasıl bir basitlikle yapılıyor, ondan bahsedeceğim.

Evvela veritabanı bağlantısını yapıyoruz:

require "rb.php";
R::setup('mysql:host=localhost;dbname=veritabaniadi', 'kullaniciadi','sifre');

Veri Ekleme (Create)

Kitaplar hakkında bir tablomuzun olduğunu varsayıyorum:

$kitap = R::dispense("kitap"); // Tabloyu 'kitap' olarak seçtik
$kitap->baslik = "Gelecekteki İlkel"; // Sütun adını belirleyip değer atadık
$kitap->yazar = "John Zerzan";
$kitap->fiyat = 25.00;

$id = R::store($kitap); // Store ile ekleyip last_insert_id'sini alıyoruz

Veri Okuma (Read)

$kitap = R::load("kitap", 5); // ID'si 5 olan kitabı seçtik
echo $kitap->baslik; // Kitaba ait başlığı yazdırdık.

Veri Güncelleme (Update)

$kitap = R::load("kitap", 5); // ID'si 5 olan kitabı seçtik
$kitap->baslik = "Yeni kitap başlığı"; // Yeni değerler atıyoruz
$kitap->yazar = "Yeni kitap yazarı"; 
$kitap->fiyat = 20.00;
R::store($kitap); // Değerleri veritabanına yazıyoruz

Veri Silme (Delete)

$kitap = R::load("kitap", 5);
R::trash($kitap); // ID'si 5 olan kitabı siliyoruz

Olan biten bu şekilde. Açıklamaları satırlarda yaptım, yapmasam bile anlaşılabilir zaten. Az kod yazarak çok işlem yapılabiliyor. Görüşmek üzere.

Slim Framework ve Veritabanı İşlemleri

Bilenler bilir, Slim Framework adlı bir PHP mikro framework (çatı) var. Slim’i detaylandırmadan veritabanı işlemlerini nasıl gerçekleştirdiğimden bahsedeceğim.

Veritabanı işlemlerini yapmak için RedBeanPHP adlı bir ORM (İlişkisel Nesne Eşleştiricisi diye türkçeleştirilebilir) kullanıyorum. İndirmek için composer vb. bir araç kullanmayacağım. Slim’i indirip, aynı klasörün içerisine RedBeanPHP dosyasını atacağım. Hepsini yaptığımızı varsayarak basit bir giriş yapıyorum:

<?php
require "Slim/Slim.php";
require "Slim/rb.php"; // RedBeanPHP dosyasını dahil ediyorum

\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();
$app->get("/listele", function () use ($app) { // "listele" rotasını belirliyorum
    $gonderiler = R::findAll("gonderilertablosu"); // Bütün gönderileri findAll ile çekiyorum
    foreach ($gonderiler as $gonderi) { // Sonra listeliyorum
        echo "<h1>{$gonderi->baslik}</h1>";
    }
});
$app->run();

Her şey oldukça basit göründüğü üzere. Daha fazla veritabanı işlemi için RedBeanPHP sitesine bakabilirsiniz.