ServBay'de Zend Framework (Laminas) Projesi Oluşturma ve Çalıştırma
Genel Bakış
Zend Framework (günümüzde Laminas Project’in bir parçası) güçlü bir açık kaynak PHP çatısıdır; modern web uygulamaları ve servisleri oluşturmak için yüksek kaliteli, nesne yönelimli bileşenler sunar. Esnekliği, modüler yapısı ve yüksek performans özellikleri ile tanınır ve hem basit sitelerden, hem de karmaşık kurumsal uygulamalara kadar her seviyedeki proje için ideal bir seçenektir.
ServBay, macOS için özel olarak tasarlanmış, PHP, farklı web sunucuları (Caddy, Nginx gibi), veritabanları (MySQL, PostgreSQL, MongoDB) ve önbellek servisleri (Redis, Memcached) ile diğer geliştirme araçlarını bir araya getiren, yerel bir web geliştirme ortamıdır. ServBay, bu yazılım paketlerinin kolayca yapılandırılması ve yönetilmesi için kullanıcı dostu bir arayüz sunar; böylece çeşitli PHP çatı projelerini yerelde başlatmak çok daha pratik hale gelir.
Bu doküman, ServBay ortamında bir Zend Framework (Laminas) projesi oluşturmayı ve çalıştırmayı; ayrıca ServBay’in sağladığı veritabanı ve önbellek servislerinin projeye nasıl entegre edileceğini adım adım gösterecektir.
Ön Koşullar
Başlamadan önce lütfen aşağıdaki hazırlıkları tamamlayın:
- ServBay’i Kurun: macOS üzerinde ServBay kurulumunu başarıyla tamamladınız ve ServBay çalışıyor olmalı. Eğer kurulum yapmadıysanız, ServBay Resmi Web Sitesi üzerinden indirme ve kurulum talimatlarına ulaşabilirsiniz.
- ServBay Paketleri: Gerekli yazılım paketlerinin ServBay'de kurulu ve çalışır olduğundan emin olun:
- En az bir PHP sürümü (Zend Framework / Laminas’ın güncel sürümleri için PHP 8.x veya üzeri önerilir).
- Web sunucusu (Caddy ya da Nginx).
- Composer (ServBay genellikle önceden yüklüdür).
- Kullanmayı planladığınız veritabanı servisleri (MySQL, PostgreSQL gibi) ve önbellek servisleri (Memcached, Redis gibi). Bu servisleri ServBay kontrol panelinden kolayca başlatabilirsiniz.
Zend Framework Projesi Oluşturma
ServBay, tüm site projelerinizin /Applications/ServBay/www dizininde tutulmasını önerir. Bu sayede site yönetimi ve yapılandırması ServBay tarafından otomatik olarak kolayca yapılır.
Site Ana Dizini’ne Girin
Terminal uygulamasını açın ve ServBay’in site ana dizinine geçiş yapın:
bashcd /Applications/ServBay/www1Composer ile Proje Oluşturun
Composer, ServBay ile birlikte gelir, ekstra kurulum gerekmez. Composer’ın
create-projectkomutu ile yeni bir Zend Framework (Laminas skeleton application) projesi başlatın. Proje,servbay-zend-appadlı bir alt klasöre kurulacaktır:bashcomposer create-project laminas/laminas-skeleton-application servbay-zend-app1Bu komut, Zend Framework (Laminas) iskelet uygulamasını indirdiği gibi gerekli tüm bağımlılıkları da yükler.
Proje Dizini’ne Girin
Yeni oluşturulan proje dizinine geçin:
bashcd servbay-zend-app1
Web Sunucuyu Ayarlama
Zend Framework projenize tarayıcıdan erişmek için ServBay’de bir site yapılandırmalısınız.
- ServBay Kontrol Panelini Açın: ServBay uygulamasını başlatın.
- Site Ayarlarına Girin: ServBay kontrol panelinde Siteler (Websites) sekmesini bulun ve tıklayın.
- Yeni Site Ekleyin: Sol alttaki
+düğmesine tıklayarak yeni bir site ekleyin. - Site Bilgilerini Girin:
- İsim (Name): Sitenize kolay tanınabilir bir isim verin (ör.
My Zend Dev Site). - Alan Adı (Domain): Projenize tarayıcıdan erişmek istediğiniz alan adını girin. Gerçek alan adlarıyla çakışmaması için
.localveya.testuzantılı bir isim önerilir, örneğin:servbay-zend-test.local. ServBay, yerel DNS yönlendirmesini otomatik yapar. - Site Tipi (Website Type):
PHPolarak seçin. - PHP Sürümü (PHP Version): Sitenin kullanacağı PHP sürümünü seçin (ör.
8.3). Bu sürümün ServBay’de kurulu ve çalışır olması gerekir. - Site Ana Dizini (Document Root): Web sunucusunun dışarıya servis vereceği klasördür. Zend Framework’ün giriş dosyası
index.phpprojeninpublicklasöründedir. Bu nedenle ana dizin olarak/Applications/ServBay/www/servbay-zend-app/publicyolunu seçin.
- İsim (Name): Sitenize kolay tanınabilir bir isim verin (ör.
- Kaydet ve Yeniden Başlat: Kaydet (Save) butonuna tıklayın. ServBay sizden yapılan değişikliklerin uygulanmasını isteyecek. Onayladığınızda web sunucu yapılandırmayı tekrar yükler ve yeni siteniz aktif olur.
Ayrıntılı adımlar için ServBay dökümantasyonundaki İlk Sitenizi Ekleme başlığını inceleyebilirsiniz.
Temel "Hello ServBay!" Örneği
Şimdi proje kodunu düzenleyerek, uygulamanın kök URL’si (/) ziyaret edildiğinde ekrana “Hello ServBay!” yazdırmasını sağlayacağız.
Rota ve Kontrolcü Ayarı (module.config.php)
Proje dizininizdeki
module/Application/config/module.config.phpdosyasını düzenleyin ve aşağıdaki temel rota ve kontrolcü ayarlarının olduğuna emin olun:php<?php declare(strict_types=1); namespace Application; use Laminas\Router\Http\Literal; use Laminas\Router\Http\Segment; use Laminas\ServiceManager\Factory\InvokableFactory; return [ 'router' => [ 'routes' => [ 'home' => [ 'type' => Literal::class, 'options' => [ 'route' => '/', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'index', ], ], ], // ... diğer rota ayarları ], ], 'controllers' => [ 'factories' => [ Controller\IndexController::class => InvokableFactory::class, ], ], 'view_manager' => [ 'display_not_found_reason' => true, 'display_exceptions' => true, 'doctype' => 'HTML5', 'not_found_template' => 'error/404', 'exception_template' => 'error/index', 'template_map' => [ 'layout/layout' => __DIR__ . '/../view/layout/layout.phtml', 'application/index/index' => __DIR__ . '/../view/application/index/index.phtml', 'error/404' => __DIR__ . '/../view/error/404.phtml', 'error/index' => __DIR__ . '/../view/error/index.phtml', ], 'template_path_stack' => [ __DIR__ . '/../view', ], ], // ... diğer ayarlar ];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
40
41
42
43
44
45
46
47
48
49Not: Yukarıdaki kod bloğu
module.config.php’nin bir bölümüdür. Kendi dosyanızda mevcut ayar dizisiyle birleştirdiğinizden emin olun. Özellikle'home'rotası veController\IndexController::classfactory tanımının yer aldığına dikkat edin.Controller (IndexController.php) Oluşturma veya Düzenleme
module/Application/src/Controller/IndexController.phpdosyasını oluşturun veya düzenleyin.indexActionmetodunun, mesaj içeren bir ViewModel döndürdüğünden emin olun:php<?php declare(strict_types=1); namespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; class IndexController extends AbstractActionController { /** * Karşılama sayfasını gösteren varsayılan eylem. */ public function indexAction() { // Bir ViewModel döndürülür ve 'message' değişkeni şablona aktarılır return new ViewModel([ 'message' => 'Hello ServBay!', ]); } // ... diğer action metodları }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24View Dosyasını Oluşturma veya Düzenleme (index.phtml)
module/Application/view/application/index/index.phtmldosyasını oluşturun/düzenleyin. Controller'dan aktarılanmessagedeğişkenini ekrana bastıracaktır:php<h1><?php echo $this->message; ?></h1>1Burada, Zend Framework (Laminas) view helper’ı
$this->messageile controller’dan gelen veri şablonda kullanılır.
Siteyi Ziyaret Edin
Web tarayıcınızda, ServBay üzerinde tanımladığınız alan adıyla örneğin https://servbay-zend-test.local adresini ziyaret edin.
Tüm yapılandırmalar doğruysa, ekranda Hello ServBay! mesajını göreceksiniz. Bu, Zend Framework projenizin ServBay’de başarıyla çalıştığı anlamına gelir.
Veritabanı ve Önbellek Entegrasyonu Örnekleri
ServBay, birçok veritabanı ve önbellek servisini entegre olarak sunar. Aşağıdaki örnekler Zend Framework projesinde Memcached, Redis, MySQL ve PostgreSQL bağlantı ve kullanımını gösterir.
Önemli Not: Aşağıdaki veritabanı ve önbellek örnekleri birbirinden bağımsızdır. Gerçek projelerde genellikle ihtiyaçlarınıza göre bir veritabanı ve bir/birden fazla önbellek servis hizmeti seçer ve bağlantı yönetimini bağımlılık enjeksiyonu gibi yöntemlerle yaparsınız. Bu örneklerin çalışması için ServBay’de ilgili servislerin (MySQL, PostgreSQL, Memcached, Redis) başlatılmış olması gerekir.
Veritabanıyla Etkileşim Örneği – Tablo Oluşturma
Önce, Laminas DB bileşeni aracılığıyla bir veritabanında tablo oluşturmayı göstereceğiz. Buradaki kod örneği, tablo oluşturma işlemini manuel olarak yapar.
Laminas DB Bileşenini Kurun
Proje ana dizininde, Laminas DB bileşenini Composer ile kurun:
bashcomposer require laminas/laminas-db1Veritabanını Manuel Olarak Oluşturun
Database örneklerini test etmeden önce, ServBay’in ilgili veritabanı servisinde
servbay_zend_appisminde bir veritabanı oluşturmalısınız. Bunun için ServBay panelinden phpMyAdmin, pgAdmin, MongoDB Compass gibi veritabanı yönetim araçlarını kullanabilirsiniz. MySQL/MariaDB için varsayılan kullanıcı adıroot, parolapassword’dür. PostgreSQL’de de kullanıcı adıroot, parolapassword’dür.Tablo Oluşturma Scripti Tanımlama ve Çalıştırma (Örnek)
Proje ana dizininizde (ya da geçici bir yerde)
create_users_table.phpisminde bir PHP dosyası oluşturun ve aşağıdaki kod içinde tablo yaratılmasını sağlayın:php<?php // create_users_table.php use Laminas\Db\Adapter\Adapter; use Laminas\Db\Sql\Sql; // Örnek: MySQL veya MariaDB kullanılıyor $adapter = new Adapter([ 'driver' => 'Pdo_Mysql', // veya 'Pdo_Pgsql' 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', // ServBay varsayılan parolası 'hostname' => '127.0.0.1', // 'port' => 3306, // MySQL // 'port' => 5432, // PostgreSQL ]); $sql = new Sql($adapter); // users tablosu oluşturmak için SQL tanımı $create = $sql->createTable('users') ->addColumn(new \Laminas\Db\Sql\Ddl\Column\Integer('id', false, null, ['AUTO_INCREMENT' => true])) ->addColumn(new \Laminas\Db\Sql\Ddl\Column\Varchar('name', 255)) ->addColumn(new \Laminas\Db\Sql\Ddl\Column\Varchar('email', 255, ['UNIQUE' => true])) ->addConstraint(new \Laminas\Db\Sql\Ddl\Constraint\PrimaryKey('id')); echo "Executing SQL:\n"; echo $sql->buildSqlString($create, $adapter->getPlatform()) . "\n"; try { // SQL'i çalıştır $adapter->query( $sql->buildSqlString($create, $adapter->getPlatform()), Adapter::QUERY_MODE_EXECUTE ); echo "Table 'users' created successfully.\n"; } catch (\Exception $e) { echo "Error creating table: " . $e->getMessage() . "\n"; }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
38Not: Bu script yalnızca manuel yürütme için örnektir. Gerçek projelerinizde Laminas Migrations gibi araçlarla veritabanı şema yönetimi yapmanız önerilir.
Scripti, PHP CLI ile terminalde çalıştırarak tabloyu oluşturabilirsiniz:
bashphp create_users_table.php1
MySQL Entegrasyon Örneği
Zend Framework projelerinde controller içinde MySQL veritabanı bağlantısı kurup sorgu çekme örneği.
Veritabanı Bağlantısını Yapılandırma
config/autoload/global.phpdosyasında aşağıdaki gibi MySQL bağlantı bilgilerini ekleyin/varsa güncelleyin:php<?php // config/autoload/global.php return [ 'db' => [ 'driver' => 'Pdo_Mysql', 'database' => 'servbay_zend_app', // Önceden oluşturulmuş olmalı 'username' => 'root', // Varsayılan kullanıcı 'password' => 'password', // Varsayılan parola 'hostname' => '127.0.0.1', 'port' => 3306, // MySQL varsayılan port 'charset' => 'utf8mb4', ], // ... diğer genel ayarlar ];1
2
3
4
5
6
7
8
9
10
11
12
13
14Controller Fabrika Ayarı (module.config.php)
Laminas\Db\Adapter\Adapternesnesinin controller’a enjekte edilebilmesi için IndexController’a özel bir fabrika tanımlamalısınız.module/Application/config/module.config.phpdosyasındakicontrollersbölümünü aşağıdaki gibi güncelleyin (zatenInvokableFactoryile tanımlıysa bunu değiştirin):php<?php // module/Application/config/module.config.php namespace Application; use Laminas\ServiceManager\Factory\InvokableFactory; // Başka yerlerde de gerekiyorsa bırakın use Laminas\Db\Adapter\AdapterInterface; // Ekleyin return [ // ... diğer ayarlar 'controllers' => [ 'factories' => [ Controller\IndexController::class => function($container) { // Service Manager’dan Adapter alınır $adapter = $container->get(AdapterInterface::class); // Adapter enjekte edilerek IndexController oluşturulur return new Controller\IndexController($adapter); }, // Gerekirse diğer controller’lar için fabrika ekleyin ], ], 'service_manager' => [ 'aliases' => [ // Laminas\Db\Adapter\AdapterInterface için alias AdapterInterface::class => 'Laminas\Db\Adapter\Adapter', ], 'factories' => [ // Laminas\Db\Adapter\Adapter için fabrika tanımı 'Laminas\Db\Adapter\Adapter' => \Laminas\Db\Adapter\AdapterServiceFactory::class, ], ], // ... diğer ayarlar ];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
32Not: Yukarıdaki kod, dosyanızın yalnızca bir bölümüne ait. Var olan ayarlarınıza entegre edin.
service_managerkısmındaAdapterInterfacealias’ı veLaminas\Db\Adapter\Adapterfabrikası yapılandırılmış olmalı.Rota Tanımı (module.config.php)
MySQL örneği için rota ayarlayın:
php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; // ... diğer use ifadeleri return [ 'router' => [ 'routes' => [ // ... mevcut rotalar 'mysql-add' => [ 'type' => Literal::class, 'options' => [ 'route' => '/mysql-add', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'mysqlAdd', ], ], ], 'mysql' => [ 'type' => Literal::class, 'options' => [ 'route' => '/mysql', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'mysql', ], ], ], ], ], // ... diğer ayarlar ];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
35Yukarıdaki rotaları
router > routesaltına ekleyin.Controller Yöntemleri (IndexController.php)
module/Application/src/Controller/IndexController.phpdosyanıza yapıcıyı (__construct) ve iki yeni metodu ekleyin:php<?php declare(strict_types=1); namespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Db\Adapter\AdapterInterface; // Ekleyin use Laminas\Db\Sql\Sql; // Ekleyin class IndexController extends AbstractActionController { private $adapter; // Adapter için özel değişken // AdapterInterface dependency enjeksiyonu public function __construct(AdapterInterface $adapter) { $this->adapter = $adapter; } /** * Karşılama sayfası */ public function indexAction() { return new ViewModel([ 'message' => 'Hello ServBay!', ]); } /** * MySQL users tablosuna kullanıcı ekleme */ public function mysqlAddAction() { $sql = new Sql($this->adapter); $insert = $sql->insert('users') ->values([ 'name' => 'ServBay Demo User', 'email' => 'demo-mysql@servbay.test', // Örnek e-posta ]); $statement = $sql->prepareStatementForSqlObject($insert); $result = $statement->execute(); $message = $result->getAffectedRows() > 0 ? 'MySQL User added successfully.' : 'Failed to add MySQL user.'; return new ViewModel([ 'message' => $message, ]); } /** * MySQL users tablosundan kullanıcı listeleme */ public function mysqlAction() { $sql = new Sql($this->adapter); $select = $sql->select('users'); $statement = $sql->prepareStatementForSqlObject($select); $result = $statement->execute(); $users = []; foreach ($result as $row) { $users[] = $row; } // Sonucu JSON olarak view’a aktar return new ViewModel([ 'users' => json_encode($users, JSON_PRETTY_PRINT), ]); } // ... diğer action metodları }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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77View Dosyaları Oluşturma
module/Application/view/application/index/mysql-add.phtmldosyası:php<h1><?php echo $this->message; ?></h1>1module/Application/view/application/index/mysql.phtmldosyası:php<h1>MySQL Users</h1> <pre><?php echo $this->users; ?></pre>1
2MySQL Örneğini Test Etme
ServBay’de MySQL servisi çalışıyorken önce
https://servbay-zend-test.local/mysql-addadresini ziyaret edin ve kullanıcı ekleyin. Mesaj olarak "MySQL User added successfully." göreceksiniz. Ardındanhttps://servbay-zend-test.local/mysqladresini açın ve tablo içeriği JSON olarak gösterilmeli.
PostgreSQL Entegrasyon Örneği
Zend Framework projesinde PostgreSQL kullanımı – controller’da bağlantı ve sorgulama.
Veritabanı Bağlantısını Yapılandırma
config/autoload/global.phpdosyasında aşağıdaki PostgreSQL ayarlarını girin (aynı anda MySQL ve PostgreSQL test etmek için daha gelişmiş konf. gerekir; buradadbkısmını PostgreSQL’e taşıyoruz):php<?php // config/autoload/global.php return [ 'db' => [ 'driver' => 'Pdo_Pgsql', 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', 'hostname' => '127.0.0.1', 'port' => 5432, ], // ... diğer ayarlar ];1
2
3
4
5
6
7
8
9
10
11
12
13Controller Fabrika Ayarı (module.config.php)
(MySQL örneğindekiyle aynı)
controllersveservice_managerbölümlerinin,IndexControlleriçin dependency injection desteklediğinden emin olun.Rota Tanımı (module.config.php)
PostgreSQL örneği için iki rota ekleyin:
php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; // ... diğer use ifadeleri return [ 'router' => [ 'routes' => [ // ... mevcut rotalar 'pgsql-add' => [ 'type' => Literal::class, 'options' => [ 'route' => '/pgsql-add', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'pgsqlAdd', ], ], ], 'pgsql' => [ 'type' => Literal::class, 'options' => [ 'route' => '/pgsql', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'pgsql', ], ], ], ], ], // ... diğer ayarlar ];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
35Controller Yöntemleri (IndexController.php)
IndexController’a iki yeni metot ekleyin:php<?php declare(strict_types=1); namespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Db\Adapter\AdapterInterface; use Laminas\Db\Sql\Sql; class IndexController extends AbstractActionController { private $adapter; public function __construct(AdapterInterface $adapter) { $this->adapter = $adapter; } // ... klasik action metodlarınız /** * PostgreSQL üzerinden users tablosuna kullanıcı ekleme */ public function pgsqlAddAction() { $sql = new Sql($this->adapter); $insert = $sql->insert('users') ->values([ 'name' => 'ServBay Demo User', 'email' => 'demo-pgsql@servbay.test', // Örnek e-posta ]); $statement = $sql->prepareStatementForSqlObject($insert); $result = $statement->execute(); $message = $result->getAffectedRows() > 0 ? 'PostgreSQL User added successfully.' : 'Failed to add PostgreSQL user.'; return new ViewModel([ 'message' => $message, ]); } /** * PostgreSQL üzerinden users tablosundan veri okuma */ public function pgsqlAction() { $sql = new Sql($this->adapter); $select = $sql->select('users'); $statement = $sql->prepareStatementForSqlObject($select); $result = $statement->execute(); $users = []; foreach ($result as $row) { $users[] = $row; } return new ViewModel([ 'users' => json_encode($users, JSON_PRETTY_PRINT), ]); } }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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65View Dosyaları Oluşturma
module/Application/view/application/index/pgsql-add.phtmldosyası:php<h1><?php echo $this->message; ?></h1>1module/Application/view/application/index/pgsql.phtmldosyası:php<h1>PostgreSQL Users</h1> <pre><?php echo $this->users; ?></pre>1
2PostgreSQL Örneğini Test Etme
ServBay’de PostgreSQL servisi çalışıyor olmalı. Önce
https://servbay-zend-test.local/pgsql-addile kullanıcı ekleyin, başarılı mesajı görün. Sonrahttps://servbay-zend-test.local/pgsqlile eklenen kullanıcıları JSON olarak görüntüleyin.
Memcached Entegrasyon Örneği
Zend Framework projesinde Memcached ile veri önbellekleme örneği.
Memcached Adaptörünü Yükleyin
Composer ile Laminas Cache’in Memcached adaptörünü kurun:
json// composer.json { "require": { "laminas/laminas-skeleton-application": "^1.0", "laminas/laminas-cache-storage-adapter-memcached": "^2.0" // Ekleyin // ... diğer bağımlılıklar }, // ... diğer ayarlar }1
2
3
4
5
6
7
8
9Ardından:
bashcomposer update1ServBay, PHP’nin
memcacheduzantısını zaten içerir, ekstra kurulum gerekmez.Rota Tanımı (module.config.php)
Memcached örneği için yeni bir rota ekleyin:
php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; // ... diğer use ifadeleri return [ 'router' => [ 'routes' => [ // ... mevcut rotalar 'memcached' => [ 'type' => Literal::class, 'options' => [ 'route' => '/memcached', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'memcached', ], ], ], ], ], // ... diğer ayarlar ];1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25Controller Yöntemi (IndexController.php)
memcachedActionmetodunu ekleyin:php<?php declare(strict_types=1); namespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; // ... diğer use ifadeleri use Laminas\Cache\StorageFactory; // Ekleyin use Laminas\Cache\Storage\StorageInterface; // Ekleyin class IndexController extends AbstractActionController { // ... yapıcı ve mevcut action metodlar /** * Memcached kullanım örneği */ public function memcachedAction() { // Memcached bağlantısı (ServBay’de varsayılan 127.0.0.1:11211) $cache = StorageFactory::factory([ 'adapter' => [ 'name' => 'memcached', 'options' => [ 'servers' => [ ['127.0.0.1', 11211], ], 'ttl' => 300, // 300 sn önbellek ömrü ], ], 'plugins' => [ // Sık kullanılan önbellek pluginleri 'serializer', 'exception_handler' => ['throw_exceptions' => false], ], ]); $cacheKey = 'my_memcached_data'; $cachedData = $cache->getItem($cacheKey, $success); if (!$success) { // Önbellekten veri bulunamadıysa $cachedData = 'Hello Memcached! (Data from source, cached at ' . date('Y-m-d H:i:s') . ')'; $cache->setItem($cacheKey, $cachedData); $cachedData .= ' - CACHE MISS'; } else { // Önbellekten veri çekildiyse $cachedData .= ' - CACHE HIT'; } return new ViewModel([ 'message' => $cachedData, ]); } }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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57View Dosyası Oluşturma
module/Application/view/application/index/memcached.phtml:php<h1>Memcached Example</h1> <p><?php echo $this->message; ?></p>1
2Memcached Örneğini Test Etme
ServBay’de Memcached servisi açıkken
https://servbay-zend-test.local/memcachedadresini ziyaret edin. İlk ziyaretinizde mesajda "CACHE MISS" görünecek, sonraki ziyaretlerde ise "CACHE HIT" mesajı ve önbelleğe alınan zaman gözükecek, bu da verinin önbellekten alındığını gösterir.
Redis Entegrasyon Örneği
Zend Framework projesinde Redis ile veri önbellekleme veya saklama örneği.
Redis Adaptörünü Kurun
Composer ile Redis adaptörünü kurun:
json// composer.json { "require": { "laminas/laminas-skeleton-application": "^1.0", "laminas/laminas-cache-storage-adapter-redis": "^2.0", // Ekleyin "ext-redis": "*" // PHP'nin redis uzantısı varsayılan kurulu // ... diğer bağımlılıklar }, // ... diğer ayarlar }1
2
3
4
5
6
7
8
9
10Ardından:
bashcomposer update1ServBay, PHP redis uzantısı ile önceden gelir.
Rota Tanımı (module.config.php)
Redis örneği için yeni rota ekleyin:
php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; // ... diğer use ifadeleri return [ 'router' => [ 'routes' => [ // ... mevcut rotalar 'redis' => [ 'type' => Literal::class, 'options' => [ 'route' => '/redis', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'redis', ], ], ], ], ], // ... diğer ayarlar ];1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25Controller Yöntemi (IndexController.php)
redisActionmetodunu ekleyin:php<?php declare(strict_types=1); namespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; // ... diğer use ifadeleri use Laminas\Cache\StorageFactory; // Eğer eklenmediyse ekleyin use Laminas\Cache\Storage\StorageInterface; // Ekleyin class IndexController extends AbstractActionController { // ... yapıcı ve diğer action metodları /** * Redis kullanım örneği */ public function redisAction() { // Redis bağlantısı (ServBay default: 127.0.0.1:6379) $cache = StorageFactory::factory([ 'adapter' => [ 'name' => 'redis', 'options' => [ 'server' => [ 'host' => '127.0.0.1', 'port' => 6379, // 'database' => 0, // 'password' => null, ], 'ttl' => 300, // 300 sn önbellek ömrü ], 'plugins' => [ // Sık kullanılan pluginler 'serializer', 'exception_handler' => ['throw_exceptions' => false], ], ], ]); $cacheKey = 'my_redis_data'; $cachedData = $cache->getItem($cacheKey, $success); if (!$success) { $cachedData = 'Hello Redis! (Data from source, cached at ' . date('Y-m-d H:i:s') . ')'; $cache->setItem($cacheKey, $cachedData); $cachedData .= ' - CACHE MISS'; } else { $cachedData .= ' - CACHE HIT'; } return new ViewModel([ 'message' => $cachedData, ]); } }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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58View Dosyası Oluşturma
module/Application/view/application/index/redis.phtmldosyası:php<h1>Redis Example</h1> <p><?php echo $this->message; ?></p>1
2Redis Örneğini Test Etme
ServBay’de Redis servisi açıkken
https://servbay-zend-test.local/redisadresini ziyaret edin. İlk ziyaretinizde "CACHE MISS", sonraki ziyarette ise "CACHE HIT" mesajını göreceksiniz; veri değişmediği sürece (ya da ttl dolana kadar) aynı önbellek sonucu getirilir.
Sonuç
Buradaki adımlar aracılığıyla ServBay yerel geliştirme ortamında bir Zend Framework (Laminas) projesini başarıyla oluşturup, yapılandırıp çalıştırdınız. Ayrıca ServBay üzerinden MySQL ve PostgreSQL veritabanı ile Memcached ve Redis önbellek servislerini projelerinize nasıl dahil edeceğinizi öğrendiniz.
ServBay, yerelde modern üretim ortamını kolayca simüle etmenize ve yönetmenize olanak verir; böylece kodlamaya ve proje geliştirmeye daha fazla odaklanabilirsiniz. ServBay’in zengin yazılım paketleri ve esnek ayarları sayesinde geliştirme verimliliğinizi artırırken, gerçekçi deneyimlerle projenizi güvenle test edebilirsiniz.
