Работали ли вы с Zend Framework?

«Работали ли вы с Zend Framework?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, работал с Zend Framework (сейчас Laminas) в enterprise-проектах. Использовал Zend Framework 2 и 3 для создания масштабируемых веб-приложений.

Ключевые компоненты, с которыми работал:

  1. ZendMVC — архитектурный паттерн Model-View-Controller
  2. ZendDb — абстракция для работы с базами данных
  3. ZendForm — создание и валидация форм
  4. ZendAuthentication — система аутентификации
  5. ZendCache — кэширование данных

Пример работы с ZendDb:

// Конфигурация адаптера базы данных
use ZendDbAdapterAdapter;

$adapter = new Adapter([
    'driver'   => 'Pdo_Mysql',
    'hostname' => 'localhost',
    'database' => 'application_db',
    'username' => 'db_user',
    'password' => 'secure_password',
    'charset'  => 'utf8mb4'
]);

// Выполнение запроса с параметрами
$sql = 'SELECT * FROM users WHERE status = :status AND created_at > :date';
$result = $adapter->query($sql, [
    'status' => 'active',
    'date'   => '2023-01-01'
]);

// Использование TableGateway
use ZendDbTableGatewayTableGateway;

$usersTable = new TableGateway('users', $adapter);
$activeUsers = $usersTable->select(['status' => 'active']);

foreach ($activeUsers as $user) {
    echo $user->username;
}

Пример создания модуля в Zend Framework 3:

// Module.php
namespace Application;

use ZendModuleManagerFeatureConfigProviderInterface;

class Module implements ConfigProviderInterface
{
    public function getConfig()
    {
        return include __DIR__ . '/../config/module.config.php';
    }
}

// module.config.php
return [
    'controllers' => [
        'factories' => [
            ControllerIndexController::class => InvokableFactory::class,
        ],
    ],
    'router' => [
        'routes' => [
            'home' => [
                'type' => 'Literal',
                'options' => [
                    'route' => '/',
                    'defaults' => [
                        'controller' => ControllerIndexController::class,
                        'action' => 'index',
                    ],
                ],
            ],
        ],
    ],
    'view_manager' => [
        'template_path_stack' => [
            __DIR__ . '/../view',
        ],
    ],
];

Миграция на Laminas: Участвовал в переходе с Zend Framework на Laminas, который включал:

  • Обновление зависимостей через Composer
  • Замену неймспейсов с Zend на Laminas
  • Обновление конфигураций и фабрик
  • Тестирование совместимости после миграции

Сильные стороны Zend/Laminas:

  • Хорошо документирован
  • Следует стандартам PSR
  • Подходит для больших enterprise-проектов
  • Имеет множество готовых компонентов