Создание и запуск проекта Zend Framework
Что такое Zend Framework?
Zend Framework — это открытый PHP фреймворк, который предоставляет набор объектно-ориентированных библиотек для построения современных веб-приложений и сервисов. Он известен своей модульностью и высокой производительностью, подходит для создания проектов от малых до корпоративных масштабов.
Основные особенности и преимущества Zend Framework
- Модульная архитектура: Zend Framework использует модульный подход, позволяя разработчикам выбирать и использовать компоненты по мере необходимости.
- Высокая производительность: Благодаря оптимизированной архитектуре и механизмам кеширования, Zend Framework обеспечивает отличную производительность.
- Гибкость: Возможность интеграции с различными сторонними библиотеками и расширениями, подходит для проектов любого масштаба.
- Поддержка сообщества: Обширное сообщество разработчиков и богатая экосистема.
- Хорошая документация: Предоставлены подробные документы и учебные материалы, которые помогают разработчикам быстро освоиться.
Zend Framework подходит для создания высококачественных веб-приложений и API, от малых приложений до крупных корпоративных систем.
Создание и запуск проекта Zend Framework с использованием ServBay
В этой статье мы будем использовать PHP-окружение, предоставляемое ServBay, чтобы создать и запустить проект Zend Framework. Мы будем использовать функции хостинга ServBay для настройки веб-сервера и доступа к проекту посредством простых конфигураций.
Замечание: если вы раньше использовали NGINX или Apache
По умолчанию ServBay использует Caddy в качестве веб-сервера. Для пользователей, переходящих с NGINX и Apache на ServBay, есть несколько ключевых изменений, о которых следует помнить:
Настройка Caddy
ServBay включает Caddy из коробки, с оптимальными настройками по умолчанию. Разработчикам нужно управлять сайтами через функции хостинга ServBay, без необходимости вручную изменять конфигурационные файлы Caddy.
Правила переписывания и .htaccess
В NGINX и Apache разработчикам обычно нужно писать правила переписывания и файлы .htaccess самостоятельно. Однако, в ServBay правила Caddy уже настроены, поэтому, за исключением особых требований, разработчикам не нужно писать эти правила.
Узнать больше
Для получения дополнительной информации, пожалуйста, ознакомьтесь со статьями Правила переписывания и htaccess, Как мигрировать сайт Apache в ServBay, Как мигрировать сайт NGINX в ServBay.
Создание проекта Zend Framework
TIP
ServBay рекомендует разработчикам размещать сайты в директории /Applications/ServBay/www
для удобства управления.
Установка Composer
Composer уже предустановлен в ServBay, отдельная установка не требуется.
Создание проекта Zend Framework
Используйте Composer для создания нового проекта Zend Framework:
bashcd /Applications/ServBay/www mkdir servbay-zend-app cd servbay-zend-app composer create-project zendframework/skeleton-application .
1
2
3
4Переход в директорию проекта
Перейдите в только что созданную директорию проекта Zend Framework:
bashcd /Applications/ServBay/www/servbay-zend-app
1
Первоначальная настройка
Настройка переменных окружения
В файле
config/autoload/global.php
настройте данные для подключения к базе данных и другие переменные окружения. Убедитесь, что настройки следующие:phpreturn [ 'db' => [ 'driver' => 'Pdo_Mysql', 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', 'hostname' => '127.0.0.1', ], ];
1
2
3
4
5
6
7
8
9
Настройка веб-сервера
Используйте функции хостинга ServBay для доступа к проекту Zend Framework через веб-сервер. В настройках хостинга ServBay добавьте новый хост:
- Название:
My First Zend Dev Site
- Доменное имя:
servbay-zend-test.local
- Тип сайта:
PHP
- Версия PHP: выберите
8.3
- Корневая директория сайта:
/Applications/ServBay/www/servbay-zend-app/public
Подробные шаги настройки смотрите в статье Добавление первого сайта.
Добавление примера кода
В файл module/Application/config/module.config.php
добавьте следующий код, чтобы вывести "Hello ServBay!":
return [
'router' => [
'routes' => [
'home' => [
'type' => 'Literal',
'options' => [
'route' => '/',
'defaults' => [
'controller' => 'Application\Controller\Index',
'action' => 'index',
],
],
],
],
],
'controllers' => [
'factories' => [
'Application\Controller\Index' => InvokableFactory::class,
],
],
'view_manager' => [
'template_path_stack' => [
__DIR__ . '/../view',
],
],
];
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
В файл module/Application/src/Controller/IndexController.php
добавьте следующий код:
namespace Application\Controller;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
class IndexController extends AbstractActionController
{
public function indexAction()
{
return new ViewModel([
'message' => 'Hello ServBay!',
]);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
В файл module/Application/view/application/index/index.phtml
добавьте следующий код:
<?php echo $this->message; ?>
Доступ к сайту
Откройте браузер и перейдите по адресу https://servbay-zend-test.local
, и вы увидите сообщение Hello ServBay!
.
Пример NoSQL базы данных
Пример с Memcached
Установка расширения Memcached
В ServBay расширение Memcached уже установлено, дополнительных действий не требуется.
Настройка Memcached
В файл
composer.json
добавьте зависимость Memcached:json{ "require": { "laminas/laminas-cache-storage-adapter-memcached": "^2.0" } }
1
2
3
4
5Затем запустите
composer update
для установки зависимости.Настройка маршрутизации
В файл
module/Application/config/module.config.php
добавьте следующий код:phpreturn [ 'router' => [ 'routes' => [ 'memcached' => [ 'type' => 'Literal', 'options' => [ 'route' => '/memcached', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'memcached', ], ], ], ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16Использование Memcached
В контроллере используйте кеширование:
phpnamespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Cache\StorageFactory; class IndexController extends AbstractActionController { public function memcachedAction() { $cache = StorageFactory::factory([ 'adapter' => [ 'name' => 'memcached', 'options' => [ 'servers' => [ ['127.0.0.1', 11211], ], ], ], ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->getItem($cacheKey, $success); if (!$success) { $cachedData = 'Hello Memcached!'; $cache->setItem($cacheKey, $cachedData); } 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В файл
module/Application/view/application/index/memcached.phtml
добавьте следующий код:php<?php echo $this->message; ?>
1Откройте браузер и перейдите по адресу
https://servbay-zend-test.local/memcached
Пример с Redis
Установка расширения Redis
В ServBay расширение Redis уже установлено, дополнительных действий не требуется.
Настройка Redis
В файл
composer.json
добавьте зависимость Redis:json{ "require": { "laminas/laminas-cache-storage-adapter-redis": "^2.0" } }
1
2
3
4
5Затем запустите
composer update
для установки зависимости.Настройка маршрутизации
В файл
module/Application/config/module.config.php
добавьте следующий код:phpreturn [ 'router' => [ 'routes' => [ 'redis' => [ 'type' => 'Literal', 'options' => [ 'route' => '/redis', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'redis', ], ], ], ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16Использование Redis
В контроллере используйте кеширование:
phpnamespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminас\View\Model\ViewModel; use Laminас\Cache\StorageFactory; class IndexController extends AbstractActionController { public function redisAction() { $cache = StorageFactory::factory([ 'adapter' => [ 'name' => 'redis', 'options' => [ 'server' => [ 'host' => '127.0.0.1', 'port' => 6379, ], ], ], ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->getItem($cacheKey, $success); if (!$success) { $cachedData = 'Hello Redis!'; $cache->setItem($cacheKey, $cachedData); } 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В файл
module/Application/view/application/index/redis.phtml
добавьте следующий код:php<?php echo $this->message; ?>
1Откройте браузер и перейдите по адресу
https://servbay-zend-test.local/redis
Пример реляционной базы данных
Создание структуры базы данных и файлов миграции
Создание файла миграции
Используйте инструмент миграции Laminas для создания файла миграции:
bashcomposer require laminas/laminas-db
1Редактирование файла миграции
В директории
data/migrations
создайте новый файл миграции и отредактируйте его для определения структуры таблицы базы данных:phpuse Laminas\Db\Adapter\Adapter; use Laminas\Db\Sql\Sql; class CreateUsersTable { public function up(Adapter $adapter) { $sql = new Sql($adapter); $create = $sql->createTable('users') ->addColumn('id', 'integer', ['auto_increment' => true]) ->addColumn('name', 'varchar', ['length' => 255]) ->addColumn('email', 'varchar', ['length' => 255, 'unique' => true]) ->addPrimaryKey('id'); $adapter->query( $sql->buildSqlString($create), Adapter::QUERY_MODE_EXECUTE ); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20Запуск миграции
Вручную запустите миграцию для создания таблицы базы данных:
php$adapter = new Adapter([ 'driver' => 'Pdo_Mysql', 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', 'hostname' => '127.0.0.1', ]); $migration = new CreateUsersTable(); $migration->up($adapter);
1
2
3
4
5
6
7
8
9
10
Пример MySQL
Настройка MySQL
В файле
config/autoload/global.php
настройте подключение к MySQL:phpreturn [ 'db' => [ 'driver' => 'Pdo_Mysql', 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', 'hostname' => '127.0.0.1', ], ];
1
2
3
4
5
6
7
8
9Настройка маршрутизации
В файл
module/Application/config/module.config.php
добавьте следующий код:phpreturn [ 'router' => [ 'routes' => [ 'mysql-add' => [ 'type' => 'Literal', 'options' => [ 'route' => '/mysql-add', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'mysqlAdd', ], ], ], 'mysql' => [ 'type' => 'Literal', 'options' => [ 'route' => '/mysql', 'defaults' => [ 'controller' => 'Application\Controller\Index', '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Запись данных пользователей
В контроллере запишите данные пользователей:
phpnamespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Db\Adapter\Adapter; use Laminas\Db\Sql\Sql; class IndexController extends AbstractActionController { protected $adapter; public function __construct(Adapter $adapter) { $this->adapter = $adapter; } public function mysqlAddAction() { $sql = new Sql($this->adapter); $insert = $sql->insert('users') ->values([ 'name' => 'ServBay', 'email' => '[email protected]', ]); $this->adapter->query( $sql->buildSqlString($insert), Adapter::QUERY_MODE_EXECUTE ); return new ViewModel([ 'message' => 'User added', ]); } public function mysqlAction() { $sql = new Sql($this->adapter); $select = $sql->select('users'); $result = $this->adapter->query( $sql->buildSqlString($select), Adapter::QUERY_MODE_EXECUTE ); $users = []; foreach ($result as $row) { $users[] = $row; } return new ViewModel([ 'users' => json_encode($users), ]); } }
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/mysql-add.phtml
добавьте следующий код:php<?php echo $this->message; ?>
1В файл
module/Application/view/application/index/mysql.phtml
добавьте следующий код:php<?php echo $this->users; ?>
1Откройте браузер и перейдите по адресу
https://servbay-zend-test.local/mysql-add
иhttps://servbay-zend-test.local/mysql
Пример PostgreSQL
Настройка PostgreSQL
В файле
config/autoload/global.php
настройте подключение к PostgreSQL:phpreturn [ 'db' => [ 'driver' => 'Pdo_Pgsql', 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', 'hostname' => '127.0.0.1', ], ];
1
2
3
4
5
6
7
8
9Настройка маршрутизации
В файл
module/Application/config/module.config.php
добавьте следующий код:phpreturn [ 'router' => [ 'routes' => [ 'pgsql-add' => [ 'type' => 'Literal', 'options' => [ 'route' => '/pgsql-add', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'pgsqlAdd', ], ], ], 'pgsql' => [ 'type' => 'Literal', 'options' => [ 'route' => '/pgsql', 'defaults' => [ 'controller' => 'Application\Controller\Index', '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Запись данных пользователей
В контроллере запишите данные пользователей:
phpnamespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminас\Db\Adapter\Adapter; use Laminас\Db\Sql\Sql; class IndexController extends AbstractActionController { protected $adapter; public function __construct(Adapter $adapter) { $this->adapter = $adapter; } public function pgsqlAddAction() { $sql = new Sql($this->adapter); $insert = $sql->insert('users') ->values([ 'name' => 'servbay', 'email' => '[email protected]', ]); $this->adapter->query( $sql->buildSqlString($insert), Adapter::QUERY_MODE_EXECUTE ); return new ViewModel([ 'message' => 'Пользователь добавлен', ]); } public function pgsqlAction() { $sql = new Sql($this->adapter); $select = $sql->select('users'); $result = $this->adapter->query( $sql->buildSqlString($select), Adapter::QUERY_MODE_EXECUTE ); $users = []; foreach ($result as $row) { $users[] = $row; } return new ViewModel([
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