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/www
1Composer ile Proje Oluşturun
Composer, ServBay ile birlikte gelir, ekstra kurulum gerekmez. Composer’ın
create-project
komutu ile yeni bir Zend Framework (Laminas skeleton application) projesi başlatın. Proje,servbay-zend-app
adlı bir alt klasöre kurulacaktır:bashcomposer create-project laminas/laminas-skeleton-application servbay-zend-app
1Bu 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-app
1
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
.local
veya.test
uzantılı bir isim önerilir, örneğin:servbay-zend-test.local
. ServBay, yerel DNS yönlendirmesini otomatik yapar. - Site Tipi (Website Type):
PHP
olarak 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.php
projeninpublic
klasöründedir. Bu nedenle ana dizin olarak/Applications/ServBay/www/servbay-zend-app/public
yolunu 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.php
dosyası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::class
factory tanımının yer aldığına dikkat edin.Controller (IndexController.php) Oluşturma veya Düzenleme
module/Application/src/Controller/IndexController.php
dosyasını oluşturun veya düzenleyin.indexAction
metodunun, 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.phtml
dosyasını oluşturun/düzenleyin. Controller'dan aktarılanmessage
değişkenini ekrana bastıracaktır:php<h1><?php echo $this->message; ?></h1>
1Burada, Zend Framework (Laminas) view helper’ı
$this->message
ile 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-db
1Veritabanını Manuel Olarak Oluşturun
Database örneklerini test etmeden önce, ServBay’in ilgili veritabanı servisinde
servbay_zend_app
isminde 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.php
isminde 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.php
1
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.php
dosyası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\Adapter
nesnesinin controller’a enjekte edilebilmesi için IndexController’a özel bir fabrika tanımlamalısınız.module/Application/config/module.config.php
dosyasındakicontrollers
bölümünü aşağıdaki gibi güncelleyin (zatenInvokableFactory
ile 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_manager
kısmındaAdapterInterface
alias’ı veLaminas\Db\Adapter\Adapter
fabrikası 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 > routes
altına ekleyin.Controller Yöntemleri (IndexController.php)
module/Application/src/Controller/IndexController.php
dosyanı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' => '[email protected]', // Ö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.phtml
dosyası:php<h1><?php echo $this->message; ?></h1>
1module/Application/view/application/index/mysql.phtml
dosyası: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-add
adresini ziyaret edin ve kullanıcı ekleyin. Mesaj olarak "MySQL User added successfully." göreceksiniz. Ardındanhttps://servbay-zend-test.local/mysql
adresini 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.php
dosyasında aşağıdaki PostgreSQL ayarlarını girin (aynı anda MySQL ve PostgreSQL test etmek için daha gelişmiş konf. gerekir; buradadb
kı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ı)
controllers
veservice_manager
bölümlerinin,IndexController
iç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' => '[email protected]', // Ö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.phtml
dosyası:php<h1><?php echo $this->message; ?></h1>
1module/Application/view/application/index/pgsql.phtml
dosyası: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-add
ile kullanıcı ekleyin, başarılı mesajı görün. Sonrahttps://servbay-zend-test.local/pgsql
ile 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 update
1ServBay, PHP’nin
memcached
uzantı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)
memcachedAction
metodunu 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/memcached
adresini 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 update
1ServBay, 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)
redisAction
metodunu 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.phtml
dosyası: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/redis
adresini 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.