Создание и запуск проекта Zend Framework (Laminas) в ServBay
Обзор
Zend Framework (ныне часть Laminas Project) — это мощный open-source PHP-фреймворк, предоставляющий набор высококачественных объектно-ориентированных компонентов для создания современных веб-приложений и сервисов. Благодаря своей гибкости, модульному дизайну и высокой производительности, он превосходно подходит как для простых сайтов, так и для сложных корпоративных решений.
ServBay — это локальная среда веб-разработки, специально созданная для macOS. В её состав входят PHP, различные веб-серверы (например, Caddy и Nginx), базы данных (MySQL, PostgreSQL, MongoDB), сервисы кэширования (Redis, Memcached) и другие инструменты для разработчиков. ServBay предлагает удобный способ настройки и управления этими пакетами, чтобы запуск PHP-фреймворков локально было легко и быстро.
В этом документе вы найдете пошаговое руководство по созданию и запуску проекта Zend Framework (Laminas) в ServBay, а также пример интеграции предоставляемых ServBay баз данных и кэш-сервисов.
Необходимые условия
Перед началом выполнения шагов убедитесь, что вы:
- Установили ServBay: Программа уже установлена и работает на вашей системе macOS. Если вы ещё этого не сделали — скачайте и следуйте инструкции на официальном сайте ServBay.
- Установили необходимые пакеты ServBay: Убедитесь, что в ServBay активированы нужные пакеты, включая:
- Как минимум одну версию PHP (рекомендуется PHP 8.x и выше, так как современные версии Zend Framework / Laminas требуют новый PHP).
- Веб-сервер (Caddy или Nginx).
- Composer (обычно уже предустановлен в ServBay).
- Сервисы базы данных (например, MySQL, PostgreSQL) и кэширования (например, Memcached, Redis). Вы можете запускать их через панель управления ServBay.
Создание проекта Zend Framework
Рекомендуется размещать сайты в директории /Applications/ServBay/www
— так ServBay сможет легко обнаруживать и автоматически конфигурировать ваши проекты.
Переход в корневую директорию сайтов
Откройте терминал и перейдите в рекомендованную директорию:
bashcd /Applications/ServBay/www
1Создание проекта через Composer
Composer уже интегрирован в ServBay — отдельная установка не требуется. Создайте новый проект-скелет Zend Framework (Laminas skeleton application) командой:
bashcomposer create-project laminas/laminas-skeleton-application servbay-zend-app
1В результате будет создана папка
servbay-zend-app
с необходимой структурой и зависимостями.Переход в директорию проекта
Перейдите в созданный каталог проекта:
bashcd servbay-zend-app
1
Настройка веб-сервера
Чтобы ваш проект был доступен из браузера, необходимо настроить сайт в ServBay.
- Откройте панель управления ServBay: Запустите приложение ServBay.
- Перейдите в настройки сайтов: Найдите вкладку Сайты (Websites).
- Добавьте новый сайт: Нажмите на кнопку
+
в левом нижнем углу, чтобы создать новую конфигурацию. - Заполните сведения о сайте:
- Имя (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): Это директория, из которой сервер будет запускать ваш проект. Главный файл входа (index.php) в Zend Framework находится в папке
public
. Укажите путь наподобие:/Applications/ServBay/www/servbay-zend-app/public
.
- Имя (Name): Укажите понятное имя, например
- Сохраните и перезапустите: Нажмите Сохранить (Save) — после подтверждения изменений сервер будет перезагружен, и сайт станет доступен.
Более подробно с настройкой можно ознакомиться в разделе Добавление первого сайта документации ServBay.
Базовый пример "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!', ]); } // ... другие методы action }
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
. В нем отобразите переданное сообщение:php<h1><?php echo $this->message; ?></h1>
1Здесь используется view-helper
$this->message
для вывода данных из контроллера.
Доступ к сайту
Откройте браузер и перейдите по адресу, который вы указали в конфигурации, например: https://servbay-zend-test.local
.
Если все настроено правильно, вы увидите сообщение Hello ServBay!
. Это значит, что проект успешно запущен под управлением ServBay.
Примеры интеграции с базами данных и кэшем
ServBay поддерживает множество сервисов БД и кэшей. Далее — примеры подключения и работы с Memcached, Redis, MySQL и PostgreSQL в проекте Zend Framework.
Важно: Каждый пример ниже — отдельная демо-реализация. В рабочем проекте обычно интегрируют лишь нужный тип базы и/или кэша, используя DI и сервис-менеджер. Перед запуском убедитесь, что выбранные сервисы включены в ServBay (MySQL, PostgreSQL, Memcached, Redis и т.д. активны).
Пример работы с базой данных — создание таблицы
Сначала продемонстрируем, как программно создать таблицу в БД через компонент Laminas DB (для образовательных целей). Здесь показан прямой запуск SQL, а не полноценные миграции.
Установка компонента Laminas DB
В корне проекта выполните:
bashcomposer require laminas/laminas-db
1Ручное создание базы данных
Перед выполнением примеров создайте базу данных
servbay_zend_app
через встроенные инструменты (phpMyAdmin, pgAdmin и пр). В ServBay по умолчанию логин и пароль для MySQL/MariaDB —root
/password
, для PostgreSQL — такжеroot
/password
.Пример скрипта для создания таблицы
Создайте PHP-файл (например,
create_users_table.php
) с содержимым: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); // SQL для создания таблицы users $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
Демонстрация подключения к MySQL и выполнения запросов из контроллера Zend Framework.
Настройка подключения к БД
Откройте файл
config/autoload/global.php
и пропишите настройки для MySQL:php<?php // config/autoload/global.php return [ 'db' => [ 'driver' => 'Pdo_Mysql', 'database' => 'servbay_zend_app', // Имя вашей БД 'username' => 'root', // Логин по умолчанию 'password' => 'password', // Пароль по умолчанию 'hostname' => '127.0.0.1', 'port' => 3306, 'charset' => 'utf8mb4', ], // ... другие параметры ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14Фабрика контроллера (module.config.php)
Для DI адаптера в контроллер определяем фабрику в
module/Application/config/module.config.php
. Если используется 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) { // Получаем адаптер из сервис-менеджера $adapter = $container->get(AdapterInterface::class); return new Controller\IndexController($adapter); }, // Дополнительные фабрики при необходимости ], ], 'service_manager' => [ 'aliases' => [ AdapterInterface::class => 'Laminas\Db\Adapter\Adapter', ], 'factories' => [ '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Важно: Убедитесь, что эти изменения корректно интегрированы в текущий массив настроек.
Маршруты для примеров с MySQL (module.config.php)
В том же файле добавьте новые маршруты:
php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; // ... return [ 'router' => [ 'routes' => [ // ... существующие '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
35Методы контроллера (IndexController.php)
В
module/Application/src/Controller/IndexController.php
добавьте конструктор и методыmysqlAddAction
,mysqlAction
: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!', ]); } /** * Добавление пользователя в таблицу users (MySQL) */ public function mysqlAddAction() { $sql = new Sql($this->adapter); $insert = $sql->insert('users') ->values([ 'name' => 'ServBay Demo User', 'email' => '[email protected]', ]); $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, ]); } /** * Получение всех пользователей из таблицы users (MySQL) */ 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Файлы представлений
Создайте файл
module/Application/view/application/index/mysql-add.phtml
:php<h1><?php echo $this->message; ?></h1>
1И файл
module/Application/view/application/index/mysql.phtml
:php<h1>MySQL Users</h1> <pre><?php echo $this->users; ?></pre>
1
2Тестировка MySQL варианта
Убедитесь, что сервис MySQL ServBay запущен. Перейдите на
https://servbay-zend-test.local/mysql-add
для добавления пользователя, после чего наhttps://servbay-zend-test.local/mysql
— чтобы увидеть список (в JSON).
Пример интеграции с PostgreSQL
Вариант для PostgreSQL аналогичен MySQL, разница лишь в конфигурации соединения и варианте обращения.
Настройка подключения к PostgreSQL
В
config/autoload/global.php
замените настройки: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, ], // ... ];
1
2
3
4
5
6
7
8
9
10
11
12
13Фабрика DI и service_manager
Конфигурация фабрики и сервис-менеджера идентична вышеописанной для MySQL.Маршруты для PostgreSQL (module.config.php)
Добавьте маршруты:
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
35Методы для PostgreSQL (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 /** * Добавление пользователя в таблицу users (PostgreSQL) */ public function pgsqlAddAction() { $sql = new Sql($this->adapter); $insert = $sql->insert('users') ->values([ 'name' => 'ServBay Demo User', 'email' => '[email protected]', ]); $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, ]); } /** * Получение всех пользователей из таблицы users (PostgreSQL) */ 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Файлы представлений
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
2Проверка работы
Сервис PostgreSQL должен быть запущен. Посетите поочередно
https://servbay-zend-test.local/pgsql-add
(добавить пользователя) иhttps://servbay-zend-test.local/pgsql
(просмотр текущего списка).
Пример интеграции с Memcached
Демонстрация работы Memcached для кэширования в Zend Framework.
Установка адаптера Memcached
В файле
composer.json
убедитесь, что требуется пакет: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Установите зависимости:
bashcomposer update
1Расширение PHP
memcached
уже предустановлено в ServBay.Маршрут Memcached (module.config.php)
В
module/Application/config/module.config.php
добавьте маршрут: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
25Метод контроллера для Memcached
В контроллере добавьте:
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-инстанса (по умолчанию на 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Файл представления
module/Application/view/application/index/memcached.phtml
:php<h1>Memcached Example</h1> <p><?php echo $this->message; ?></p>
1
2Тестирование Memcached
Убедитесь, что Memcached активен в ServBay. Перейдите по адресу
https://servbay-zend-test.local/memcached
: при первом посещении увидите "CACHE MISS", далее — "CACHE HIT" (время не меняется).
Пример интеграции с Redis
Пример использования Redis для кэширования или хранения данных.
Установка адаптера Redis
В файле
composer.json
пропишите:json// composer.json { "require": { "laminas/laminas-skeleton-application": "^1.0", "laminas/laminas-cache-storage-adapter-redis": "^2.0", "ext-redis": "*" }, // ... }
1
2
3
4
5
6
7
8
9Обновите зависимости:
bashcomposer update
1В ServBay расширение
redis
уже присутствует.Маршрут Redis (module.config.php)
В файле конфигурации маршрутов добавьте:
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
25Метод контроллера для Redis
В контроллере реализуйте:
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 работает на 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Файл представления
module/Application/view/application/index/redis.phtml
:php<h1>Redis Example</h1> <p><?php echo $this->message; ?></p>
1
2Тестирование Redis
Проверьте работу Redis через
https://servbay-zend-test.local/redis
. Первый заход — "CACHE MISS", последующие (до истечения ttl) — "CACHE HIT" (время не меняется).
Итоги
Выполнив вышеуказанные шаги, вы научились создавать, настраивать и запускать проект Zend Framework (Laminas) в локальной среде ServBay, а также интегрировать MySQL, PostgreSQL, Memcached и Redis в ваш проект.
ServBay делает организацию локального окружения максимально простой и быстрой, позволяя сосредоточиться на непосредственной разработке кода. Бизнес-логика, настройка вашего стек и имитация продуктивных сценариев — всё это возможно прямо на вашем Mac с помощью ServBay, что значительно увеличивает эффективность разработки.