ServBay'de Slim Projesi Oluşturma ve Çalıştırma
Bu makale, güçlü yerel web geliştirme ortamı ServBay üzerinde Slim Framework tabanlı bir PHP projesini hızlıca oluşturma, yapılandırma ve çalıştırma adımlarında size rehberlik eder. ServBay; entegre PHP, Caddy/Nginx/Apache web sunucuları ve çeşitli veritabanı paketleriyle Slim geliştirme için ideal bir platform sunar.
Slim Nedir?
Slim, sade ama güçlü web uygulamaları ve API'ler geliştirmek için tasarlanmış hafif bir PHP mikro çerçevesidir. Esas route (yönlendirme), istek ve yanıt işleme işlevlerini sunar. Prototip geliştirme, hızlı devreye alma ve temel üzerine daha karmaşık uygulamalar inşa etmek için idealdir.
Slim'in Öne Çıkan Özellikleri ve Avantajları
- Hafif: Slim'in çekirdek kodu küçük ve düşük kaynak kullanımı gerektirir. Hızlı başlar, küçük ve orta ölçekli uygulamalar ile mikro servis mimarileri için idealdir.
- Esnek: Slim, tüm üçüncü parti kütüphane/komponentlerle (örn. şablon motorları, ORM'ler, kimlik doğrulama kütüphaneleri) kolayca entegre edilebilir. Proje gereksinimlerinize en uygun araçları seçme özgürlüğü sağlar.
- Kullanım Kolaylığı: Sade API'si ve açıklayıcı belgeleri sayesinde geliştiriciler temel kavramlara hızla hakim olabilir.
- Güçlü Routing (Yönlendirme) İşlevi: GET, POST, PUT, DELETE gibi HTTP metodları ve gelişmiş routing özellikleri (gruplandırma, ara katmanlar, parametre yakalama) desteklenir.
- Middleware (Ara Katman) Desteği: Kimlik doğrulama, loglama, CORS işleme gibi görevler, istek uygulama mantığına ulaşmadan veya yanıt kullanıcıya döndürülmeden önce ara katmanlarda işlenebilir.
Slim, RESTful API geliştirme, hızlı prototip üretimi ve belirli fonksiyonları bağımsız şekilde ele almak için idealdir.
ServBay ile Slim Projesi Oluşturma ve Çalıştırma
Bu rehberde, ServBay'in hazır PHP ortamını ve Web Sitesi özelliğini kullanarak Slim projesinin web sunucusunu kuracak ve erişim için gerekli ayarları yapacağız.
Önkoşullar
Başlamadan önce aşağıdaki adımları yerine getirdiğinizden emin olun:
- ServBay'i Kurun ve Çalıştırın: ServBay'in macOS veya Windows sisteminizde başarıyla kurulduğundan ve çalışır durumda olduğundan emin olun.
- ServBay Composer ile Gelir: ServBay varsayılan olarak Composer'ı içerir, ayrıca kurmanıza gerek yoktur.
Slim Projesi Oluşturma
ServBay, tüm web sitesi projelerinizi aşağıdaki dizinde tutmanızı önerir; bu sayede yönetim ve yapılandırma kolaylaşır:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
ServBay Web Sitesi Ana Dizininize Girin:
macOS:
bashcd /Applications/ServBay/www
1Windows:
cmdcd C:\ServBay\www
1Proje Dizini Oluşturun: Slim projeniz için yeni bir klasör oluşturun.
bashmkdir servbay-slim-app
1Proje Dizininize Girin:
bashcd servbay-slim-app
1Composer ile Slim'i Yükleyin: Klasörde Composer komutuyla Slim Framework ve PSR-7 paketini kurun.
bashcomposer require slim/slim "^4.0" slim/psr7 -W
1Bu komut, Slim Framework ve
slim/psr7
kütüphanelerinivendor
klasörüne indirir,composer.json
vecomposer.lock
dosyalarını oluşturur.
Slim Uygulamasını Başlatma
- Giriş Dosyası Oluşturun: Slim genellikle tüm istekleri tek bir giriş dosyasında (
public/index.php
) karşılar. Proje ana dizinindepublic
klasörünü oluşturupindex.php
dosyasını ekleyin.bashmkdir public touch public/index.php
1
2 - Giriş Dosyasını Düzenleyin:
public/index.php
dosyasını açın, aşağıdaki temel Slim uygulama kodunu ekleyin:phpBu kod, kök dizini (<?php // Composer'ın otomatik yükleme dosyasını dahil et require __DIR__ . '/../vendor/autoload.php'; // Gerekli PSR-7 arayüzlerini ve Slim Factory class'ı dahil et use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use Slim\Factory\AppFactory; // Slim uygulama örneğini oluştur $app = AppFactory::create(); // Temel bir route ekle: Köke (/) GET isteği için $app->get('/', function (Request $request, Response $response, $args) { // Yanıt gövdesine içerik yaz $response->getBody()->write("Hello ServBay!"); // Yanıt nesnesini döndür return $response; }); // Slim uygulamayı ç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/
) GET isteğini ele alan ve "Hello ServBay!" yazan en temel Slim uygulamasını başlatır.
ServBay Web Sitesi Yapılandırması
Slim projenize tarayıcıdan erişmek için ServBay'de bir Web Sitesi yapılandırmalısınız (eski sürümlerde "Host" olarak geçer).
- ServBay uygulama arayüzünü açın.
- Web Sitesi (Websites) modülüne gidin.
- Yeni bir web sitesi ekleyin.
- Proje bilgilerinize göre alanları doldurun:
Ad (Name):
My First Slim Dev Site
(veya istediğiniz bir isim)Alan Adı (Domain):
servbay-slim-test.local
(yerel geliştirme için.local
veya.test
kullanımı önerilir)Web Sitesi Tipi (Website Type):
PHP
PHP Versiyonu: Örneğin
8.3
seçin.Web Sitesi Ana Dizini: Gözat butonuyla projenizdeki
public
klasörünü seçin:- macOS:
/Applications/ServBay/www/servbay-slim-app/public
- Windows:
C:\ServBay\www\servbay-slim-app\public
Çünkü Slim'in giriş dosyası
public
klasöründedir, web sunucusu istekleri bu klasöre yönlendirmelidir.- macOS:
- Web sitesi ayarını kaydedin. ServBay web sunucu ayarlarını otomatik olarak günceller ve devreye alır.
Detaylı adımlar için İlk web sitesi ekleme sayfasına bakabilirsiniz.
Slim Web Sitenize Erişim
Kurulum tamamlandığında, tarayıcınızda ayarladığınız alan adını (https://servbay-slim-test.local
) açın.
Her şey yolunda ise, tarayıcıda Hello ServBay!
mesajını görmelisiniz. Bu, Slim projenizin ServBay web sunucusunda başarıyla çalıştığını gösterir.
Veritabanı Entegrasyonu Örnekleri
Slim Framework doğrudan veritabanı soyutlaması sunmaz; ancak çeşitli PHP veritabanı kütüphaneleriyle kolayca entegre olabilir. Laravel'in Eloquent ORM'ini (illuminate/database
) örnek alarak MySQL ve PostgreSQL bağlantısı, ayrıca Memcached ve Redis entegrasyonu aşağıda anlatılmıştır.
Önkoşul: Veritabanı Oluşturma ve Migration (Geçiş) Çalıştırma
Öncelikle ServBay üzerinde gerekli veritabanını oluşturun ve uygulamanız için tablo yapısını belirleyin.
- Veritabanı Oluşturun:
- ServBay arayüzünde ilgili veritabanı paketine (MySQL veya PostgreSQL) gidin.
- ServBay'in sağladığı yönetim aracıyla (phpMyAdmin, pgAdmin veya komut satırı) örneğin
servbay_slim_app
isminde yeni bir veritabanı oluşturun. - ServBay varsayılan root kullanıcı şifresi genellikle
password
'dür, arayüzden kontrol edebilir veya değiştirebilirsiniz.
- Phinx Kurulumu ve Yapılandırması: Phinx, veritabanı yapınızı sürümlemek için popüler bir PHP migration aracıdır.
- Slim proje dizininizde Composer ile Phinx'i kurun:
- macOS:
/Applications/ServBay/www/servbay-slim-app
- Windows:
C:\ServBay\www\servbay-slim-app
bashcomposer require robmorgan/phinx
1 - macOS:
- Phinx yapılandırmasını başlatın:bashProje ana dizininde
vendor/bin/phinx init
1phinx.yml
dosyası oluşur. Bu dosyada veritabanı bağlantısına uygun şekilde yapılandırın:yamlpaths: migrations: '%%PHINX_CONFIG_DIR%%/db/migrations' seeds: '%%PHINX_CONFIG_DIR%%/db/seeds' environments: default_migration_table: phinxlog default_environment: development # Yapınıza uygun çevre adı development: # Veritabanı türüne göre yapılandırın adapter: mysql # veya pgsql host: 127.0.0.1 name: servbay_slim_app # Oluşturduğunuz veritabanı adı user: root pass: password # Veritabanı şifreniz port: 3306 # MySQL, PostgreSQL için genellikle 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 dizininizde Composer ile Phinx'i kurun:
- Migration Dosyası Oluşturun: Phinx ile yeni bir migration dosyası ekleyin.bash
vendor/bin/phinx create CreateUsersTable
1db/migrations
dizininde bir PHP dosyası oluşur. İçinde,users
tablosunun şemasını tanımlayın: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() // Otomatik created_at ve updated_at alanları ekler ->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 ana dizininde aşağıdaki komut ile migration işlemini yürütün,
users
tablosu veritabanında oluşacaktır.bashÖnemli: Sonraki veritabanı örnekleri öncesinde veritabanı oluşturma ve migration işlemini bitirin.vendor/bin/phinx migrate
1
illuminate/database ile ORM Kullanımı
Laravel'in veritabanı komponenti olan illuminate/database
ile ORM ve sorgu işlemleri yapacağız.
illuminate/database Kütüphanesini Kurun: Proje ana dizininde Composer ile yükleyin:
- macOS:
/Applications/ServBay/www/servbay-slim-app
- Windows:
C:\ServBay\www\servbay-slim-app
bashcomposer require illuminate/database
1- macOS:
public/index.php
Dosyasında Veritabanı Bağlantısı Yapılandırın:require __DIR__ . '/../vendor/autoload.php';
kodundan hemen sonra,$app = AppFactory::create();
öncesinde aşağıdaki satırları ekleyin.php// ... Diğer require ve use komutları ... use Illuminate\Database\Capsule\Manager as Capsule; // Capsule yöneticisini ekle // Eloquent ORM'i başlat $capsule = new Capsule; // Veritabanı bağlantı yapılandırması (kullandığınız veritabanına göre driver ve parametreleri güncelleyin) $capsule->addConnection([ 'driver' => 'mysql', // veya 'pgsql' 'host' => '127.0.0.1', 'database' => 'servbay_slim_app', // Veritabanı adı 'username' => 'root', // 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 parametresi gerekir // 'schema' => 'public', ]); // Küresel erişim için ayarla $capsule->setAsGlobal(); // Eloquent'i başlat $capsule->bootEloquent(); // ... Slim uygulama örneğini oluştur ($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
ServBay'de MySQL paketi çalışıyor, servbay_slim_app
veritabanı ve users
tablosu migration ile oluşturuldu varsayımıyla.
public/index.php
dosyasında $app->run();
'dan önce aşağıdaki route'ları ekleyin:
php
// ... Önceki başlatma kodu ve '/' route'u ...
use Illuminate\Database\Capsule\Manager as Capsule; // Doğru şekilde dahil edin
// Kullanıcı ekleme route'u
$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', // Aynı e-posta olmaması 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 döndür
}
return $response;
});
// Kullanıcıları alma route'u
$app->get('/mysql-get-users', function (Request $request, Response $response, $args) {
try {
$users = Capsule::table('users')->get();
$response->getBody()->write($users->toJson()); // JSON ile dönüş
$response = $response->withHeader('Content-Type', 'application/json'); // Content-Type ayarı
} catch (\Exception $e) {
$response->getBody()->write('Error fetching users: ' . $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
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
adresine gidersenizusers
tablosuna yeni bir kullanıcı eklenir.https://servbay-slim-test.local/mysql-get-users
adresinde tüm kullanıcılar JSON formatında listelenir.
PostgreSQL Örneği
ServBay'de PostgreSQL paketi çalışıyor, servbay_slim_app
veritabanı ve users
tablosu migration ile oluşturulduysa (Phinx yapılandırmasında adapter
ve port
pgsql
ve 5432
olmalı).
public/index.php
'de veritabanı bağlantısının driver
ını pgsql
olarak değiştirip, schema
ekleyin:
php
$capsule->addConnection([
'driver' => 'pgsql', // Artık pgsql
'host' => '127.0.0.1',
'database' => 'servbay_slim_app',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8', // PostgreSQL için genellikle utf8
'prefix' => '',
'schema' => 'public', // PostgreSQL'de schema gerekiyor
]);
// ... Diğer Eloquent başlatma kodları aynı ...
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Yine $app->run();
'dan önce aşağıdaki route'ları ekleyin:
php
// ... Önceki başlatma kodları ve '/' route'u ...
// ... MySQL route'ları (gerekirse) ...
use Illuminate\Database\Capsule\Manager as Capsule; // Doğru şekilde dahil edin
// Kullanıcı ekleme route'u
$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', // Aynı e-posta olmaması 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ı alma route'u
$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();
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
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
adresine gittiğinizde PostgreSQLusers
tablosuna yeni bir kullanıcı eklenir.https://servbay-slim-test.local/pgsql-get-users
adresinde tüm veritabanı kullanıcıları JSON formatında listelenir.
Memcached Örneği
ServBay'de Memcached paketi ve PHP'nin ext-memcached
eklentisi önceden bulunur. Sadece bir PHP istemci kütüphanesi kurmak gerekir. Örnek olarak memcached/memcached
kullanacağız.
Memcached İstemcisini Yükleyin: Proje ana dizininde aşağıdaki komutu çalıştırın:
- macOS:
/Applications/ServBay/www/servbay-slim-app
- Windows:
C:\ServBay\www\servbay-slim-app
bashcomposer require memcached/memcached
1- macOS:
Memcached route'u ekleyin:
$app->run();
'dan önce aşağıdaki kodu ekleyin:php// ... Önceki başlatma kodları ve veritabanı route'ları ... // Memcached kullanımı için route $app->get('/memcached-example', function (Request $request, Response $response, $args) { // Memcached istemcisi oluştur $memcached = new Memcached(); // ServBay varsayılanı: 127.0.0.1:11211 $memcached->addServer('127.0.0.1', 11211); $cacheKey = 'my_servbay_cache_key'; // Önbellekten veri almaya çalış $cachedData = $memcached->get($cacheKey); if ($cachedData === false) { // Önbellekte veri yoksa, içerik oluştur ve önbelleğe al $cachedData = 'Hello Memcached from ServBay! This was not cached.'; // Veri 60 saniye süreyle önbelleğe atılır $memcached->set($cacheKey, $cachedData, 60); $response->getBody()->write($cachedData); } else { // Önbellekte veri varsa, doğrudan göster $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
adresinde ilk açılışta "This was not cached." mesajı, sonra (önbellek zamanı bitene kadar) "This was served from cache." görürsünüz.
Redis Örneği
ServBay'de Redis paketi ve PHP'nin ext-redis
eklentisi vardır. Tek ihtiyacınız olan bir PHP istemci kütüphanesi. Burada predis/predis
kullanacağız.
Redis İstemcisini Yükleyin: Proje ana dizininde aşağıdaki komutu çalıştırın:
- macOS:
/Applications/ServBay/www/servbay-slim-app
- Windows:
C:\ServBay\www\servbay-slim-app
bashcomposer require predis/predis
1- macOS:
Redis route'u ekleyin:
$app->run();
'dan önce aşağıdaki kodu ekleyin:php// ... Önceki başlatma kodları ve veritabanı/önbellek route'ları ... use Predis\Client as RedisClient; // Predis istemci class'ını ekle // Redis ile örnek route $app->get('/redis-example', function (Request $request, Response $response, $args) { try { // Redis istemcisi oluştur (ServBay genellikle 127.0.0.1:6379'dur) $redis = new RedisClient([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379, ]); $cacheKey = 'my_servbay_redis_cache_key'; // Önbellekten veri almaya çalış $cachedData = $redis->get($cacheKey); if ($cachedData === null) { // Önbellekte veri yoksa, içerik oluştur ve Redis'e yaz $cachedData = 'Hello Redis from ServBay! This was not cached.'; // 60 saniye süreyle kaydet $redis->setex($cacheKey, 60, $cachedData); // SETEX anahtar, süre, değer $response->getBody()->write($cachedData); } else { // Önbellekte veri varsa, doğrudan göster $response->getBody()->write('Hello Redis from ServBay! This was served from cache.'); } } catch (\Exception $e) { // Bağlantı veya işlem hatalarını 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
Erişim: https://servbay-slim-test.local/redis-example
adresinde ilk açılışta "This was not cached." mesajı, sonra (önbellek zamanı bitene kadar) "This was served from cache." görürsünüz.
Sonuç
Yukarıdaki adımlar ile ServBay yerel geliştirme ortamında Slim Framework projesi oluşturup ServBay'in Web Sitesi özelliğiyle yayınlamayı başardınız. ServBay'in sunduğu paketlerle (MySQL, PostgreSQL, Memcached, Redis) ve ilgili PHP uzantılarıyla Slim uygulamanıza veritabanı ve önbellek entegrasyonunu kolayca yaptınız. ServBay, yerel uygulama geliştirme ve yönetimi süreçlerinizi basitleştirir; siz sadece Slim uygulamanıza odaklanabilirsiniz.