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)

Slim Framework Rota İşlemleri

Uzun zamandır Slim Framework ile haşır neşirim. Birkaç bir şey yazmak gerekiyor hakkında. Route yani rotalama işlemlerinden bahsedeceğim.

Bazı HTTP istek metotları var, en çok kullandıklarımdan ikisinden bahsedeceğim.

GET Rotası

Aşağıdaki örnekte, normal bir internet sayfasına girişte çalışan metot çalıştırılıyor. Örneğin, kitapçı sitesine giren kullanıcı kitapci.com/kitap/5 adresine girdiğinde, 5 numaralı ID’yi elde etmiş oluyoruz ve sayfaya “5 numaralı kitap ile ilgili işlemler yapılacak” yazdırıyoruz.

<?php
$app = new \Slim\Slim();
$app->get("/kitap/:id", function ($id) use ($app) {
    echo "{$id} numaralı kitap ile ilgili işlemler yapılacak";
});

POST Rotası

Veritabanına yeni bir kitap eklemek istiyoruz ve bir form oluşturup /kitap_ekle sayfasına POST etmek yani göndermek istiyoruz. Bunun için POST rotasını aşağıdaki gibi ayarlıyor ve akabinde gelen değerleri ekrana print_r fonksiyonu yardımıyla yazdırıyoruz. Ayarladığımız bu sayfaya form dışında kitapci.com/kitap_ekle şeklinde girmek istedimizde 404 döndürecektir.

<?php
$app = new \Slim\Slim();
$app->post("/kitap_ekle", function () {
    echo "<pre>";
    print_r($_POST);
    echo "</pre>";
});

Birden fazla istek metodu tanımlama

Bir rotaya hem GET hem de POST istek metotları ile erişmek isteyebiliriz. Bunun için aşağıda göründüğü üzere Slim Framework’ün via() metodunu kullanıyoruz.

<?php
$app = new \Slim\Slim();
$app->map("/kitap", function() {
    echo "<p>Hem GET hem de POST istek metotları ile erişilebilen bir sayfa!";
})->via("GET", "POST");
$app->run();

Rota isimlendirme

İstersek rotaları isimlendirebiliyoruz. Rotaları isimlendirmemizdeki amaç, çatı içinde kullanabileceğimiz yönledirme işlemlerini kısaca halledebilmek. Daha sonrasında urlFor() metodu ile bağlantıyı oluşturuyoruz. Şöyle:

<?php
$app = new \Slim\Slim();

// İsimlendirilmiş rota oluşturalım
$app->get("/kitap/:adi", function ($adi) use ($app) {
echo "Kitap adı: {$adi}";
})->name("kitap");

// İsimlendirilmiş rota için bir URL oluşturalım
$url = $app->urlFor("kitap", array("adi" => "Gelecekteki İlkel"));

İyi çalışmalar.

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.