ServBay'de Slim Projesi Oluşturma ve Çalıştırma
Bu doküman, güçlü yerel Web geliştirme ortamı ServBay üzerinde PHP tabanlı bir Slim Framework projesini nasıl hızlıca oluşturup yapılandıracağınızı ve çalıştıracağınızı adım adım anlatır. ServBay; entegre PHP, web sunucuları (Caddy/Nginx/Apache) ve çeşitli veritabanı paketleriyle Slim geliştirmek için mükemmel bir platform sunar.
Slim Nedir?
Slim, hızlı geliştirmeyi ve basit ama işlevsel web uygulamaları ile API'ler oluşturmayı hedefleyen hafif bir PHP mikro-framework'tür. Temel yönlendirme (routing), istek ve yanıt işleme gibi temel fonksiyonlarıyla, hızla hayata geçirilmesi gereken projeler için idealdir veya daha karmaşık uygulamalar için temel olarak kullanılabilir.
Slim'in Temel Özellikleri ve Avantajları
- Hafif: Slim Framework'ün çekirdek kod tabanı oldukça küçüktür, az kaynak tüketir ve hızlı başlar. Küçük-orta ölçekli uygulamalar veya mikroservisler için idealdir.
- Esnek: Slim, modüler yapısıyla farklı üçüncü parti bileşen veya kütüphanelerle (şablon motorları, ORM, kimlik doğrulama paketleri vb.) kolayca entegre edilebilir. Böylece proje gereksinimlerinize en uygun araçları seçme özgürlüğü sunar.
- Kullanım Kolaylığı: Basit API'si ve açık dokümantasyonu sayesinde geliştiriciler temel kavramları hızla öğrenip projesine başlayabilir.
- Güçlü Routing: Birden fazla HTTP metodunu (GET, POST, PUT, DELETE gibi) ve kapsamlı routing seçeneklerini (gruplama, middleware, parametre yakalama) destekler.
- Middleware Desteği: Slim’in middleware katmanı, uygulama mantığına ulaşmadan önce veya yanıt kullanıcıya gönderilmeden önce görevler (kimlik doğrulama, loglama, CORS işlemleri gibi) gerçekleştirmenizi sağlar.
Slim; RESTful API'ler, hızlı prototipleme ve bağımsız, belirli işlevlerin yönetildiği uygulamalar için idealdir.
ServBay ile Slim Projesi Oluşturma ve Çalıştırma
Bu rehber, ServBay'nin önceden yapılandırılmış PHP ortamı ve Websitesi özelliğiyle bir web sunucusunu nasıl kuracağınızı ve Slim projesini kolayca nasıl erişilebilir hale getireceğinizi gösterir.
Gereksinimler
Başlamadan önce aşağıdakileri tamamlamış olmalısınız:
- ServBay'in Kurulumu ve Çalıştırılması: ServBay'ın macOS sisteminize başarıyla kurulduğundan ve uygulamanın çalıştığından emin olun.
- ServBay Composer ile birlikte gelir: Composer önceden entegre olarak gelir, ayrıca kurulum gerekmez.
Slim Projesi Oluşturma
ServBay, site projelerinin tamamının /Applications/ServBay/www
dizininde tutulmasını önerir. Bu, projelerin yönetimini ve yapılandırılmasını kolaylaştırır.
- ServBay web kök dizinine gidin:bash
cd /Applications/ServBay/www
1 - Proje klasörü oluşturun: Slim projeniz için bir klasör yaratın.bash
mkdir servbay-slim-app
1 - Proje klasörüne geçin:bash
cd servbay-slim-app
1 - Composer ile Slim kurulumu: Composer kullanarak Slim Framework ve PSR-7 paketini yükleyin.bashBu komut, Slim Framework ve
composer require slim/slim "^4.0" slim/psr7 -W
1slim/psr7
kütüphanesini projeninvendor
dizinine indirir vecomposer.json
ilecomposer.lock
dosyalarını oluşturur.
Slim Uygulamasını Başlatma
- Giriş dosyası oluşturun: Slim projeleri genellikle isteklerin işlendiği tek bir giriş dosyasıyla çalışır (ör.
public/index.php
). Proje kök dizinindepublic
klasörü ve içindeindex.php
dosyası oluşturun.bashmkdir public touch public/index.php
1
2 - Giriş dosyasını düzenleyin:
public/index.php
dosyasını açıp temel Slim kodunu ekleyin:phpBu kod, kök URL’ye (<?php // Composer autoload dosyasını dahil et require __DIR__ . '/../vendor/autoload.php'; // Gerekli PSR-7 arayüzleri ve Slim fabrika sınıfını dahil et use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use Slim\Factory\AppFactory; // Slim uygulama örneği oluştur $app = AppFactory::create(); // Kök dizine ('/') gelen GET isteğini işleyen temel bir rota ekle $app->get('/', function (Request $request, Response $response, $args) { // Yanıt gövdesine içerik yazılır $response->getBody()->write("Hello ServBay!"); // Yanıt nesnesi döndürülür return $response; }); // Slim uygulamasını çalıştır $app->run();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22/
) gelen GET isteğini yakalayan ve "Hello ServBay!" mesajını döndüren en basit Slim uygulamasını kurar.
ServBay Websitesi Yapılandırma
Slim projenize tarayıcıdan erişmek için, ServBay üzerinde yeni bir Websitesi (eski sürümlerde "host") tanımlamanız gerekir.
- ServBay uygulamasını açın.
- Websitesi (Websites) modülüne gidin.
- Yeni bir websitesi ekleyin.
- Proje bilgilerine göre aşağıdaki alanları doldurun:
- Ad (Name):
My First Slim Dev Site
(veya tercih ettiğiniz başka bir ad) - Alan Adı (Domain):
servbay-slim-test.local
(Yerel geliştirme için.local
veya.test
uzantısı önerilir) - Website Türü (Website Type):
PHP
- PHP Sürümü (PHP Version): Kullanmak istediğiniz PHP sürümünü seçin (ör.
8.3
) - Web kök dizini (Document Root): Gözat butonunu tıklayın ve projenizdeki
public
klasörünü (/Applications/ServBay/www/servbay-slim-app/public
) seçin. Çünkü Slim'in giriş dosyasıindex.php
burada yer alır ve web sunucusu bu dizine yönlendirilmelidir.
- Ad (Name):
- Yapılandırmayı kaydedin. ServBay, web sunucusu yapılandırmasını otomatik olarak günceller ve uygulamaya alır.
Ayrıntılı adımlar için bkz: İlk Websitesini Ekleme.
Slim Sitenize Erişim
Kurulum tamamlandıktan sonra tarayıcınızda https://servbay-slim-test.local
adresine gidin.
Her şey doğru ise, tarayıcıda Hello ServBay!
metni görünecektir. Bu, Slim projenizin ServBay web sunucusu ile doğru şekilde çalıştığını onaylar.
Veritabanı Entegrasyonu Örneği
Slim Framework doğrudan bir veritabanı soyutlama katmanı sunmaz fakat farklı PHP veritabanı paketleriyle kolayca çalışır. Burada Laravel’in Eloquent ORM'ı (illuminate/database
bileşeni) ile MySQL ve PostgreSQL bağlantısı, ayrıca Memcached ve Redis entegrasyonu örneklenmektedir.
Gereksinimler: Veritabanı Oluşturma ve Migration Çalıştırma
Veritabanı entegrasyonundan önce, ServBay üzerinde ilgili veritabanını oluşturmalı ve uygulamanız için gerekli tabloları hazırlamalısınız.
- Veritabanı oluşturun:
- ServBay arayüzünde kullanmak istediğiniz veritabanı paketine (ör. MySQL veya PostgreSQL) gidin.
- ServBay’in sunduğu phpMyAdmin (MySQL/MariaDB için), pgAdmin (PostgreSQL) veya komut satırını kullanarak örneğin
servbay_slim_app
adında yeni bir veritabanı oluşturun. - ServBay’in varsayılan root (ana) kullanıcı şifresi genellikle
password
olur. Bu bilgiyi ServBay ekranında görebilir veya değiştirebilirsiniz.
- Phinx’i yükleyin ve yapılandırın (veritabanı migration aracı): Phinx, veritabanı şema değişikliklerini yönetmeye yardımcı popüler bir PHP migration aracıdır.
- Slim proje kökünüzde
/Applications/ServBay/www/servbay-slim-app
Composer ile Phinx kurulumunu yapın:bashcomposer require robmorgan/phinx
1 - Phinx yapılandırmasını başlatın:bashBu, proje klasörüne bir
vendor/bin/phinx init
1phinx.yml
dosyası oluşturur. Bu dosyayı düzenleyip, veritabanı bağlantı bilgilerinizi örnekte olduğu gibi yazın:yamlpaths: migrations: '%%PHINX_CONFIG_DIR%%/db/migrations' seeds: '%%PHINX_CONFIG_DIR%%/db/seeds' environments: default_migration_table: phinxlog default_environment: development # veya kendi ortam adınız development: # Veritabanı tipine göre düzenleyin adapter: mysql # veya pgsql host: 127.0.0.1 name: servbay_slim_app # Oluşturduğunuz veritabanı adı user: root pass: password # Veritabanı şifresi port: 3306 # MySQL için, PostgreSQL için 5432 charset: utf8mb4 # MySQL için önerilir collation: utf8mb4_unicode_ci # MySQL için önerilir version_order: creation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- Slim proje kökünüzde
- Migration dosyası oluşturun: Phinx komutuyla yeni bir migration oluşturun.bash
vendor/bin/phinx create CreateUsersTable
1db/migrations
klasöründe yeni bir PHP dosyası oluşacaktır. Dosyadausers
tablosunu tanımlamak içinchange()
metodunu aşağıdaki gibi düzenleyin:php<?php declare(strict_types=1); use Phinx\Migration\AbstractMigration; final class CreateUsersTable extends AbstractMigration { /** * Change Method. * * Write your reversible migrations using this method. * * More information on writing migrations is available here: * https://book.cakephp.org/phinx/0/en/migrations.html#the-change-method * * Remember to call "create()" or "update()" and NOT "save()" when working * with the Table class. */ public function change(): void { $table = $this->table('users'); $table->addColumn('name', 'string') ->addColumn('email', 'string', ['unique' => true]) ->addTimestamps() // created_at ve updated_at alanları eklenir ->create(); } }
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 - Migration’ı çalıştırın: Proje kökünde aşağıdaki komut ile migration’ı çalıştırıp
users
tablosunu veritabanında oluşturun.bashÖnemli: Aşağıdaki veritabanı örnek kodlarını çalıştırmadan önce burada anlatılan veritabanı ve migration işlemlerinin tamamlandığından emin olun.vendor/bin/phinx migrate
1
illuminate/database Bileşeni Kullanımı
Laravel’in veritabanı bileşeni (illuminate/database
) ORM/sorgu oluşturucu olarak kullanılacaktır.
illuminate/database kurulumu: Proje kökünde paketi yükleyin.
bashcomposer require illuminate/database
1public/index.php
'da veritabanı bağlantısının başlatılması:require __DIR__ . '/../vendor/autoload.php';
satırından hemen sonra,$app = AppFactory::create();
satırından önce şu kodu ekleyin:php// ... diğer require ve use satırları ... use Illuminate\Database\Capsule\Manager as Capsule; // Capsule yöneticisini dahil et // Eloquent ORM'i başlat $capsule = new Capsule; // Veritabanı bağlantı ayarlarını ekle (kendi veritabanınıza göre driver ve diğer ayarları düzenleyin) $capsule->addConnection([ 'driver' => 'mysql', // veya 'pgsql' 'host' => '127.0.0.1', 'database' => 'servbay_slim_app', // Veritabanı adı 'username' => 'root', // Veritabanı kullanıcı adı 'password' => 'password', // Şifre 'charset' => 'utf8mb4', // MySQL için önerilir 'collation' => 'utf8mb4_unicode_ci', // MySQL için önerilir 'prefix' => '', // PostgreSQL için schema da eklenebilir: // 'schema' => 'public', ]); // Global erişimi ayarla $capsule->setAsGlobal(); // Eloquent'i başlat $capsule->bootEloquent(); // ... Slim uygulama örneği oluşturma ($app = AppFactory::create();) ...
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
MySQL Örneği
Varsayalım ki, ServBay üzerinde MySQL paketini başlattınız, servbay_slim_app
adında bir veritabanı oluşturdunuz ve Phinx ile users
tablosunu eklediniz.
public/index.php
dosyanıza, $app->run();
öncesinde aşağıdaki rotaları ekleyin:
// ... Başlangıç kodları ve '/' rotası ...
use Illuminate\Database\Capsule\Manager as Capsule; // Eklediğinizden emin olun
// Kullanıcı ekleme rotası
$app->get('/mysql-add-user', function (Request $request, Response $response, $args) {
try {
Capsule::table('users')->insert([
'name' => 'ServBay Demo User',
'email' => 'servbay-demo-' . time() . '@servbay.test', // Eşsiz eposta için time()
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]);
$response->getBody()->write('User added to MySQL');
} catch (\Exception $e) {
$response->getBody()->write('Error adding user: ' . $e->getMessage());
$response = $response->withStatus(500); // Hata kodu gönder
}
return $response;
});
// Kullanıcıları getiren rota
$app->get('/mysql-get-users', function (Request $request, Response $response, $args) {
try {
$users = Capsule::table('users')->get();
$response->getBody()->write($users->toJson()); // Sonucu JSON olarak döndür
$response = $response->withHeader('Content-Type', 'application/json'); // Content-Type ayarla
} catch (\Exception $e) {
$response->getBody()->write('Error fetching users: ' . $e->getMessage());
$response = $response->withStatus(500);
}
return $response;
});
// ... $app->run();
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
35
Erişim:
https://servbay-slim-test.local/mysql-add-user
— Yeni bir kullanıcı ekler.https://servbay-slim-test.local/mysql-get-users
— Tüm kullanıcıları JSON olarak gösterir.
PostgreSQL Örneği
ServBay’de PostgreSQL paketini başlattığınızı, servbay_slim_app
veritabanını oluşturduğunuzu ve Phinx migrasyonunu uyguladığınızı varsayalım (adapter
ve port
ayarlarının pgsql
ve 5432
olduğuna dikkat edin).
public/index.php
dosyanızdaki veritabanı bağlantısını aşağıdaki gibi uyarlayın:
$capsule->addConnection([
'driver' => 'pgsql', // PostgreSQL için
'host' => '127.0.0.1',
'database' => 'servbay_slim_app',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8', // PostgreSQL için genelde utf8
'prefix' => '',
'schema' => 'public', // PostgreSQL'de şema belirtin
]);
// ... Diğer Eloquent ayarları aynı kalır ...
2
3
4
5
6
7
8
9
10
11
$app->run();
öncesinde aşağıdaki rotaları ekleyin:
// ... Başlangıç kodları ve '/' rotası ...
// ... MySQL rotaları (istenirse) ...
use Illuminate\Database\Capsule\Manager as Capsule; // Eklediğinizden emin olun
// Kullanıcı ekleme rotası
$app->get('/pgsql-add-user', function (Request $request, Response $response, $args) {
try {
Capsule::table('users')->insert([
'name' => 'ServBay PG Demo User',
'email' => 'servbay-pg-demo-' . time() . '@servbay.test', // Eşsiz eposta için time()
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]);
$response->getBody()->write('User added to PostgreSQL');
} catch (\Exception $e) {
$response->getBody()->write('Error adding user: ' . $e->getMessage());
$response = $response->withStatus(500);
}
return $response;
});
// Kullanıcıları getiren rota
$app->get('/pgsql-get-users', function (Request $request, Response $response, $args) {
try {
$users = Capsule::table('users')->get();
$response->getBody()->write($users->toJson());
$response = $response->withHeader('Content-Type', 'application/json');
} catch (\Exception $e) {
$response->getBody()->write('Error fetching users: ' . $e->getMessage());
$response = $response->withStatus(500);
}
return $response;
});
// ... $app->run();
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
35
36
Erişim:
https://servbay-slim-test.local/pgsql-add-user
— PostgreSQL'e yeni kullanıcı ekler.https://servbay-slim-test.local/pgsql-get-users
— Kullanıcı listesini JSON olarak sunar.
Memcached Örneği
ServBay, Memcached paketi ve PHP'nin ext-memcached
eklentisiyle birlikte gelir. Etkileşim için sadece bir PHP istemci kütüphanesi kurmanız gerekir. Burada memcached/memcached
kullanacağız.
Memcached istemci kütüphanesini yükleyin:
bashcomposer require memcached/memcached
1public/index.php
'da Memcached rotası ekleyin:$app->run();
öncesinde aşağıdaki rotayı ekleyin:php// ... Başlangıç kodları ve veritabanı rotaları ... // Memcached kullanımı için rota $app->get('/memcached-example', function (Request $request, Response $response, $args) { // Memcached istemcisi oluştur $memcached = new Memcached(); // Memcached sunucusu ekle (ServBay varsayılan: 127.0.0.1:11211) $memcached->addServer('127.0.0.1', 11211); $cacheKey = 'my_servbay_cache_key'; // Önbellekten veri çek $cachedData = $memcached->get($cacheKey); if ($cachedData === false) { // Önbellekte yoksa veri oluştur ve önbelleğe kaydet $cachedData = 'Hello Memcached from ServBay! This was not cached.'; // 60 saniyelik ttl ile kaydet $memcached->set($cacheKey, $cachedData, 60); $response->getBody()->write($cachedData); } else { // Önbellekte varsa doğrudan gönder $response->getBody()->write('Hello Memcached from ServBay! This was served from cache.'); } return $response; }); // ... $app->run();
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
Erişim:https://servbay-slim-test.local/memcached-example
adresine ilk gittiğinizde "This was not cached." göreceksiniz. Sonraki (cache süresi boyunca) ziyaretlerde "This was served from cache." mesajı görünür.
Redis Örneği
ServBay, Redis paketi ve PHP'nin ext-redis
eklentisi ile entegre gelir. Sadece bir PHP istemci kütüphanesi eklemeniz yeterli. predis/predis
paketini kullanacağız.
Redis istemci kütüphanesini yükleyin:
bashcomposer require predis/predis
1public/index.php
'da Redis rotası ekleyin:$app->run();
öncesinde aşağıdaki rotayı ekleyin:php// ... Başlangıç kodları ve veritabanı rotaları ... // ... Memcached rotası (varsa) ... use Predis\Client as RedisClient; // Predis istemcisi sınıfını dahil et // Redis kullanımı için rota $app->get('/redis-example', function (Request $request, Response $response, $args) { try { // Redis istemci örneği oluştur (ServBay varsayılan: 127.0.0.1:6379) $redis = new RedisClient([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379, ]); $cacheKey = 'my_servbay_redis_cache_key'; // Önbellekten veri çek $cachedData = $redis->get($cacheKey); if ($cachedData === null) { // Önbellekte yoksa veri oluştur ve kaydet $cachedData = 'Hello Redis from ServBay! This was not cached.'; // 60 saniyelik ömürle kaydet $redis->setex($cacheKey, 60, $cachedData); // SETEX key seconds value $response->getBody()->write($cachedData); } else { // Önbellekte varsa doğrudan gönder $response->getBody()->write('Hello Redis from ServBay! This was served from cache.'); } } catch (\Exception $e) { // Bağlantı veya işlem istisnası yakala $response->getBody()->write('Error connecting to Redis or performing operation: ' . $e->getMessage()); $response = $response->withStatus(500); } return $response; }); // ... $app->run();
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
35
36
37
38
39
Erişim:https://servbay-slim-test.local/redis-example
adresine ilk gidişte "This was not cached." mesajı görünür. Cache süresi dolana kadar sonraki ziyaretlerde "This was served from cache." uyarısı çıkar.
Sonuç
Bu adımlarla birlikte, ServBay yerel geliştirme ortamında bir Slim Framework projesi oluşturup, ServBay’in Websitesi özelliği ile bu projeyi barındırıp erişilebilir kıldınız. Ayrıca ServBay’in sunduğu çeşitli paketleri (MySQL, PostgreSQL, Memcached, Redis) ve uygun PHP eklentilerini kullanarak Slim uygulamanıza veritabanı ve önbellek entegre etmeyi öğrendiniz. ServBay, yerel geliştirme ortamı kurulumunu ve yönetimini büyük ölçüde kolaylaştırarak, Slim uygulamanızın geliştirilmesine tam odaklanmanıza imkân tanır.