ServBayでZend Framework(Laminas)プロジェクトの作成と実行
概要
Zend Framework(現在はLaminas Projectの一部)は、モダンなWebアプリケーションやサービス開発のために設計された、強力なオープンソースPHPフレームワークです。高品質なオブジェクト指向コンポーネントを多数提供しており、柔軟性・モジュール設計・高パフォーマンスが特長です。シンプルなWebサイトから企業向け大規模システムまで幅広く利用できます。
ServBayは、macOSおよびWindows向けに設計されたローカルWeb開発環境で、PHPや複数のWebサーバー(Caddy、Nginx)、各種データベース(MySQL、PostgreSQL、MongoDB)、キャッシュサービス(Redis、Memcached)、その他開発ツールが統合されています。ServBayでは、これらのソフトウェアパッケージを簡単に設定・管理でき、さまざまなPHPフレームワークプロジェクトをローカルで迅速に構築・実行できます。
本ドキュメントでは、ServBay環境でZend Framework(Laminas)プロジェクトを新規作成・実行する手順と、ServBay搭載のデータベース・キャッシュサービスの統合方法を解説します。
事前準備
作業開始前に、以下を確認してください。
- ServBayのインストール: macOSまたはWindowsにServBayをインストールし、正常に起動していること。未導入の場合は ServBay公式サイト よりダウンロード・インストールガイドをご参照ください。
- 必須パッケージ: ServBay内で必要なソフトウェアパッケージ(下記)がインストール済み・稼働していること:
- PHPバージョン(推奨: PHP 8.x以上。Laminasの最新バージョンでは高バージョンが必須となる場合が多いです)
- Webサーバー(Caddy または Nginx)
- Composer(ServBayに標準搭載)
- 利用予定のデータベース(例: MySQL、PostgreSQL)やキャッシュサービス(例: Memcached、Redis)。これらはServBayコントロールパネルから簡単に起動できます。
Zend Frameworkプロジェクト作成
ServBayでは、Webサイトプロジェクトを以下のディレクトリへ統一保存することを推奨しています。これによりServBayの自動管理・設定が容易になります。
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
サイトのルートディレクトリに移動
ターミナル・コマンドプロンプトを開き、ServBay推奨のWebサイトルートディレクトリへ移動します。
macOS:
bashcd /Applications/ServBay/www
1Windows:
cmdcd C:\ServBay\www
1Composerでプロジェクト作成
ServBayにはComposerがあらかじめ搭載されていますので、追加インストール不要です。下記コマンドでZend Framework(Laminasスケルトンアプリケーション)を「servbay-zend-app」ディレクトリに作成します。
bashcomposer create-project laminas/laminas-skeleton-application servbay-zend-app
1これで必要な依存も含め、Zend Framework(Laminas)のベースアプリケーションが「servbay-zend-app」フォルダに展開されます。
プロジェクトディレクトリへ移動
作成したプロジェクトフォルダに移動します。
bashcd servbay-zend-app
1
Webサーバー設定
ブラウザアクセス可能な状態にするには、ServBayでWebサイトを新規設定します。
- ServBayコントロールパネルを開く: ServBayアプリを起動します。
- Webサイト設定へ進む: コントロールパネル内で「Webサイト(Websites)」タブを選択。
- 新規Webサイト追加: 左下の
+
ボタンをクリックし、Webサイト設定画面を開きます。 - サイト情報入力:
- 名前(Name): 「My Zend Dev Site」など識別しやすいサイト名を設定。
- ドメイン(Domain): ブラウザでアクセスする際のドメインを指定。推奨:末尾に
.local
または.test
を付ける(例:servbay-zend-test.local
)。ServBayが自動でローカルDNSを設定します。 - サイト種別(Website Type):
PHP
を選択。 - PHPバージョン(PHP Version): 利用したいPHPバージョン(例:
8.3
)を選択。ServBayで該当バージョンがインストール済み・稼働していることを確認。 - ドキュメントルート(Document Root): Webサーバーの公開ディレクトリ。Zend Frameworkの入口ファイルはプロジェクト直下の
public
フォルダにあるため、ルートは/Applications/ServBay/www/servbay-zend-app/public
等を指定します。
- 保存&再起動: 「保存(Save)」ボタンで設定を確定。変更適用時、Webサーバーが自動で再起動し新しいサイト設定が反映されます。
詳細手順はServBayドキュメント内の 初めてのWebサイト追加 セクションもご参照ください。
「Hello ServBay!」の基本例
プロジェクトコードを編集し、ルートURL(/
)アクセス時に「Hello ServBay!」を表示させてみましょう。
ルーティング&コントローラ設定(module.config.php)
プロジェクトの
module/Application/config/module.config.php
を編集し、以下の基本ルート・コントローラ設定を含めます。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', ], ], ], // ... 他のルーティング設定 ], ], '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', ], ], // ... その他設定 ];
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注意: 上記は
module.config.php
の一部です。既存設定配列とマージしてください。特に'home'
ルートとController\IndexController::class
のファクトリ定義を含めること。コントローラ作成・編集(IndexController.php)
module/Application/src/Controller/IndexController.php
を作成または編集し、indexAction
メソッドでメッセージをViewModelに渡します。php<?php declare(strict_types=1); namespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; class IndexController extends AbstractActionController { /** * ウェルカムページ用のデフォルトアクション */ public function indexAction() { // ViewModelを返し、'message'変数をビューへ渡す return new ViewModel([ 'message' => 'Hello ServBay!', ]); } // ... その他のアクション }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24ビュー作成・編集(index.phtml)
module/Application/view/application/index/index.phtml
を作成または編集し、コントローラから渡されたmessage
変数を表示します。php<h1><?php echo $this->message; ?></h1>
1Zend Framework(Laminas)のビュー助手
$this->message
を使い、コントローラ側から渡されたデータへアクセスしています。
サイトアクセス
Webブラウザで、ServBayに登録したドメイン(例:https://servbay-zend-test.local
)を開いてください。
正しく設定されていれば、「Hello ServBay!」というページが表示されます。これでZend FrameworkプロジェクトがServBay内で正常に稼働していることを確認できます。
データベース・キャッシュ統合例
ServBayには多種多様なデータベース・キャッシュサービスが搭載されています。ここでは、Zend FrameworkプロジェクトからMemcached・Redis・MySQL・PostgreSQLを利用する方法を順に紹介します。
重要: これらのデモコードは独立したサンプルです。実際のプロジェクトでは、用途に応じてデータベースやキャッシュサービスを選択し、依存性注入などで接続管理を制御します。サンプルを実行する前に、ServBay内で各サービス(MySQL、PostgreSQL、Memcached、Redis)が起動されていることをご確認ください。
データベース操作サンプル - テーブル作成例
まず、Laminas DBコンポーネントを使ったデータベース操作(例:テーブル作成)を紹介します。ここではLaminas Migrationsツールではなく、簡単なスクリプトでテーブルを作成しています。
Laminas DBコンポーネントのインストール
プロジェクトルートで以下コマンドを実行し、Laminas DBを追加します。
bashcomposer require laminas/laminas-db
1データベース手動作成
サンプルを動かす前に、ServBay内で「servbay_zend_app」というデータベースを手動作成してください。ServBay付属の管理ツール(phpMyAdmin, pgAdmin, MongoDB Compassなど)を利用すると便利です。MySQL/MariaDBのデフォルトユーザーは
root
、パスワードはpassword
。PostgreSQLも同じ(ユーザー:root
、パスワード:password
)です。テーブル作成スクリプト定義・実行例
プロジェクト直下など適当な場所に
create_users_table.php
を作成し、以下のコードでusers
テーブルを作成します。php<?php // create_users_table.php use Laminas\Db\Adapter\Adapter; use Laminas\Db\Sql\Sql; // MySQLまたはMariaDB利用例 $adapter = new Adapter([ 'driver' => 'Pdo_Mysql', // または 'Pdo_Pgsql' 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', // ServBayデフォルト 'hostname' => '127.0.0.1', // 'port' => 3306, // MySQLポート // 'port' => 5432, // PostgreSQLポート ]); $sql = new Sql($adapter); // usersテーブル作成用SQL定義 $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実行 $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
38注意: 上記は手動実行用のサンプルです。実際の運用ではLaminas Migrationsツール等でスキーマ管理を行うのが一般的です。
ターミナル(プロジェクトルートまたは該当ディレクトリ)で以下コマンドで実行可能です。
bashphp create_users_table.php
1
MySQL統合サンプル
Zend FrameworkコントローラからMySQLデータベース接続・クエリ実行例です。
DB接続情報の設定
config/autoload/global.php
を編集し、MySQL接続パラメータを入力。既存db
設定があれば修正、なければ以下を追加してください。php<?php // config/autoload/global.php return [ 'db' => [ 'driver' => 'Pdo_Mysql', 'database' => 'servbay_zend_app', // 必ず作成済みであること 'username' => 'root', // ServBayデフォルト 'password' => 'password', // ServBayデフォルト 'hostname' => '127.0.0.1', 'port' => 3306, // MySQL標準ポート 'charset' => 'utf8mb4', ], // ... その他グローバル設定 ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14コントローラファクトリ設定(module.config.php)
コントローラに
Laminas\Db\Adapter\Adapter
を注入するには、IndexController
用のファクトリを定義します。module/Application/config/module.config.php
のcontrollers
セクションに下記ファクトリ定義を追加します(既存でInvokableFactory
を使っている場合は置き換え)。php<?php // module/Application/config/module.config.php namespace Application; use Laminas\ServiceManager\Factory\InvokableFactory; use Laminas\Db\Adapter\AdapterInterface; return [ // ... その他設定 'controllers' => [ 'factories' => [ Controller\IndexController::class => function($container) { // ServiceManagerからDBアダプタ取得 $adapter = $container->get(AdapterInterface::class); // IndexControllerにアダプタ注入 return new Controller\IndexController($adapter); }, // 他コントローラファクトリも必要に応じて ], ], 'service_manager' => [ 'aliases' => [ // AdapterInterfaceにエイリアス設定 AdapterInterface::class => 'Laminas\Db\Adapter\Adapter', ], 'factories' => [ // DBアダプタ用のファクトリ 'Laminas\Db\Adapter\Adapter' => \Laminas\Db\Adapter\AdapterServiceFactory::class, ], ], // ... その他設定 ];
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注意: 既存設定配列にマージしてください。特に
service_manager
部分はDBアダプタの生成とエイリアス定義が必要です。ルート追加(module.config.php)
MySQL操作用のルートを追加します。
php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; return [ 'router' => [ 'routes' => [ // ... 既存(例:'home') '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', ], ], ], ], ], // ... その他設定 ];
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コントローラメソッド定義(IndexController.php)
module/Application/src/Controller/IndexController.php
にコンストラクタ&メソッドを追加します。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; } /** * ウェルカムページ表示 */ public function indexAction() { return new ViewModel([ 'message' => 'Hello ServBay!', ]); } /** * MySQLでusersテーブルへユーザー追加 */ public function mysqlAddAction() { $sql = new Sql($this->adapter); $insert = $sql->insert('users') ->values([ 'name' => 'ServBay Demo User', 'email' => 'demo-mysql@servbay.test', // サンプルメール ]); $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テーブル内容を一覧取得 */ 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; } 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
65
66
67
68
69
70
71
72
73
74
75上記(コンストラクタ含む)を
IndexController
へ追加してください。ビュー作成
module/Application/view/application/index/mysql-add.phtml
:php<h1><?php echo $this->message; ?></h1>
1module/Application/view/application/index/mysql.phtml
:php<h1>MySQL Users</h1> <pre><?php echo $this->users; ?></pre>
1
2MySQLサンプルへアクセス
ServBayでMySQLが起動していることを確認してください。 まず
https://servbay-zend-test.local/mysql-add
でユーザー追加("MySQL User added successfully."と表示)。 次にhttps://servbay-zend-test.local/mysql
で登録データをJSON形式で一覧表示できます。
PostgreSQL統合サンプル
Zend FrameworkコントローラからPostgreSQL接続・クエリ実行例です。
DB接続情報設定
config/autoload/global.php
にPostgreSQLの接続設定を記載します。MySQLと併用時は適切に設定切り替えが必要です。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, // PostgreSQL標準ポート ], // ... その他設定 ];
1
2
3
4
5
6
7
8
9
10
11
12
13コントローラファクトリ設定(module.config.php)
MySQL例と同様、コントローラ・サービスManager設定が済んでいれば追加不要です。
ルート追加(module.config.php)
PostgreSQL用のルーティングを追加します。
php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; return [ 'router' => [ 'routes' => [ // ... 既存ルート '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', ], ], ], ], ], // ... その他設定 ];
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コントローラメソッド定義(IndexController.php)
module/Application/src/Controller/IndexController.php
に次のメソッドを追加。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; } // ... 既存(indexAction, mysqlAddAction, mysqlAction 等) /** * PostgreSQLでusersテーブルへユーザー追加 */ public function pgsqlAddAction() { $sql = new Sql($this->adapter); $insert = $sql->insert('users') ->values([ 'name' => 'ServBay Demo User', 'email' => 'demo-pgsql@servbay.test', ]); $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でusersテーブル一覧取得 */ 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
65ビュー作成
module/Application/view/application/index/pgsql-add.phtml
:php<h1><?php echo $this->message; ?></h1>
1module/Application/view/application/index/pgsql.phtml
:php<h1>PostgreSQL Users</h1> <pre><?php echo $this->users; ?></pre>
1
2PostgreSQLサンプルへアクセス
ServBayでPostgreSQLが起動していることを確認してください。 まず
https://servbay-zend-test.local/pgsql-add
でユーザー追加("PostgreSQL User added successfully."表示)。 次にhttps://servbay-zend-test.local/pgsql
で登録データをJSON形式で一覧表示できます。
Memcached統合サンプル
Zend FrameworkコントローラでMemcachedキャッシュ利用例です。
Memcachedアダプタインストール
プロジェクトの
composer.json
に下記依存を追加し、composer update
でインストールしてください。json// composer.json { "require": { "laminas/laminas-skeleton-application": "^1.0", "laminas/laminas-cache-storage-adapter-memcached": "^2.0" // 追加 // ... その他依存 }, // ... その他設定 }
1
2
3
4
5
6
7
8
9すでにServBayにPHPのmemcached拡張がインストール済みです。
ルート追加(module.config.php)
Memcached用ルーティングを追加します。
php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; return [ 'router' => [ 'routes' => [ // ... 既存ルート 'memcached' => [ 'type' => Literal::class, 'options' => [ 'route' => '/memcached', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'memcached', ], ], ], ], ], // ... その他設定 ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24コントローラメソッド定義(IndexController.php)
下記の
memcachedAction
を追加します。php<?php declare(strict_types=1); namespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Cache\StorageFactory; use Laminas\Cache\Storage\StorageInterface; class IndexController extends AbstractActionController { // ... コンストラクタ&既存メソッド /** * Memcached使用デモ */ public function memcachedAction() { // Memcachedキャッシュストレージ生成 // ServBayでMemcachedは127.0.0.1:11211で稼働 $cache = StorageFactory::factory([ 'adapter' => [ 'name' => 'memcached', 'options' => [ 'servers' => [ ['127.0.0.1', 11211], ], 'ttl' => 300, ], ], 'plugins' => [ 'serializer', 'exception_handler' => ['throw_exceptions' => false], ], ]); $cacheKey = 'my_memcached_data'; $cachedData = $cache->getItem($cacheKey, $success); if (!$success) { // キャッシュミス時 $cachedData = 'Hello Memcached! (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ビュー作成
module/Application/view/application/index/memcached.phtml
:php<h1>Memcached Example</h1> <p><?php echo $this->message; ?></p>
1
2Memcachedサンプルへアクセス
ServBayでMemcached起動済みを確認し、
https://servbay-zend-test.local/memcached
へアクセスしてください。初回は「CACHE MISS」、以降は「CACHE HIT」と表示され、時間は変化しません。キャッシュ有効期限(例:300秒)内は同一データが取得されます。
Redis統合サンプル
Zend FrameworkコントローラでRedisキャッシュまたはデータストア利用例です。
Redisアダプタインストール
composer.json
に以下依存を追加し、composer update
を実行してください。json// composer.json { "require": { "laminas/laminas-skeleton-application": "^1.0", "laminas/laminas-cache-storage-adapter-redis": "^2.0", // 追加 "ext-redis": "*" // PHP redis拡張必須 // ... その他依存 }, // ... その他設定 }
1
2
3
4
5
6
7
8
9
10ServBayにはPHPのredis拡張が標準搭載です。
ルート追加(module.config.php)
Redis用ルーティングを追加します。
php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; return [ 'router' => [ 'routes' => [ // ... 既存ルート 'redis' => [ 'type' => Literal::class, 'options' => [ 'route' => '/redis', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'redis', ], ], ], ], ], // ... その他設定 ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24コントローラメソッド定義(IndexController.php)
下記の
redisAction
を追加します。php<?php declare(strict_types=1); namespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Cache\StorageFactory; use Laminas\Cache\Storage\StorageInterface; class IndexController extends AbstractActionController { // ... コンストラクタ&既存メソッド /** * Redis使用デモ */ public function redisAction() { // Redisキャッシュストレージ生成 // ServBayでRedisは127.0.0.1:6379で稼働 $cache = StorageFactory::factory([ 'adapter' => [ 'name' => 'redis', 'options' => [ 'server' => [ 'host' => '127.0.0.1', 'port' => 6379, ], 'ttl' => 300, ], ], 'plugins' => [ '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ビュー作成
module/Application/view/application/index/redis.phtml
:php<h1>Redis Example</h1> <p><?php echo $this->message; ?></p>
1
2Redisサンプルへアクセス
ServBayでRedisが起動していることを確認し、
https://servbay-zend-test.local/redis
にアクセスしてください。初回は「CACHE MISS」、以降は「CACHE HIT」が表示され、時間は更新されません(キャッシュ利用)。
まとめ
以上で、ServBayローカル開発環境でZend Framework(Laminas)プロジェクトを新規作成・構成・実行し、Webサーバーをプロジェクト公開ディレクトリへ設定、さらにMySQL・PostgreSQL・Memcached・Redisキャッシュサービスを統合する方法までマスターしました。
ServBayを使えば、ローカル開発環境の構築や管理が簡単になり、コーディングや開発自体に集中できます。豊富なパッケージ・柔軟な設定を活用し、実運用に近い環境を手元で再現できるため、効率的なWeb開発が可能です。