Criando e Executando Projetos Zend Framework (Laminas) no ServBay
Visão Geral
O Zend Framework (atualmente parte do Laminas Project) é um poderoso framework open source para PHP, composto por componentes orientados a objetos de alta qualidade para construção de aplicações web e serviços modernos. É reconhecido por sua flexibilidade, arquitetura modular e alta performance, sendo ideal tanto para sites simples quanto sistemas empresariais complexos.
O ServBay é um ambiente de desenvolvimento web local, projetado para macOS e Windows, que integra o PHP, múltiplos servidores web (como Caddy e Nginx), bancos de dados (MySQL, PostgreSQL, MongoDB), serviços de cache (Redis, Memcached) e outras ferramentas essenciais para desenvolvimento. O ServBay facilita a configuração e gerenciamento desses serviços, tornando simples a criação e execução local de projetos em diversos frameworks PHP.
Este documento irá guiá-lo na criação e execução de um projeto Zend Framework (Laminas) no ServBay, demonstrando ainda a integração dos bancos de dados e serviços de cache disponíveis.
Pré-requisitos
Antes de começar, certifique-se de ter realizado as seguintes etapas:
- Instalar o ServBay: O ServBay está corretamente instalado e em execução no macOS ou Windows. Se necessário, acesse o site oficial do ServBay para download e instruções de instalação.
- Pacotes ServBay: Os pacotes necessários já estão instalados e ativos no ServBay, incluindo:
- Pelo menos uma versão do PHP (recomenda-se PHP 8.x ou superior, pois as versões modernas do Zend Framework / Laminas exigem versões recentes).
- Servidor web (Caddy ou Nginx).
- Composer (normalmente pré-instalado com o ServBay).
- Serviços de banco de dados (por exemplo, MySQL, PostgreSQL) e de cache (Memcached, Redis) que serão utilizados no projeto. Estes podem ser ativados facilmente através do painel de controle do ServBay.
Criando um Projeto Zend Framework
O ServBay recomenda que todos os seus projetos de site sejam armazenados nas seguintes pastas, facilitando o gerenciamento e configuração automática dos sites:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Navegue até o diretório raiz dos sites
Abra o terminal e acesse o diretório sugerido pelo ServBay:
macOS:
bashcd /Applications/ServBay/www
1Windows:
cmdcd C:\ServBay\www
1Crie o projeto usando o Composer
Não é necessário instalar o Composer separadamente, pois já vem com o ServBay. Use o comando
create-project
do Composer para criar o esqueleto do aplicativo Zend Framework (Laminas skeleton application) em uma subpasta chamadaservbay-zend-app
:bashcomposer create-project laminas/laminas-skeleton-application servbay-zend-app
1Isso fará o download do esqueleto do Zend Framework (Laminas) para a pasta
servbay-zend-app
e instalará todas as dependências necessárias.Acesse o diretório do projeto
Navegue até o diretório recém-criado:
bashcd servbay-zend-app
1
Configuração do Servidor Web
Para acessar seu projeto Zend Framework pelo navegador, é necessário configurar um site no ServBay.
- Abra o painel de controle do ServBay: Inicie o aplicativo ServBay.
- Acesse as configurações de site: No painel de controle, clique na aba Websites.
- Adicione um novo site: Clique no botão
+
no canto inferior esquerdo para incluir uma nova configuração de site. - Preencha as informações do site:
- Nome (Name): Escolha um nome fácil de identificar, como
My Zend Dev Site
. - Domínio (Domain): Defina o domínio que será usado para acessar o projeto no navegador. Para evitar conflitos com domínios reais, utilize sufixos como
.local
ou.test
, por exemplo,servbay-zend-test.local
. O ServBay configura automaticamente o DNS local para isso. - Tipo de site (Website Type): Selecione
PHP
. - Versão do PHP (PHP Version): Escolha a versão do PHP que será utilizada (ex:
8.3
). Certifique-se de que esta versão já esteja instalada e ativa no ServBay. - Diretório raiz do site (Document Root): É o diretório servido pelo servidor web. O arquivo de entrada do Zend Framework,
index.php
, está na pastapublic
do projeto. Portanto, defina o diretório raiz comopublic
:/Applications/ServBay/www/servbay-zend-app/public
.
- Nome (Name): Escolha um nome fácil de identificar, como
- Salvar e reiniciar: Clique em Salvar (Save). O ServBay pedirá a confirmação para aplicar as mudanças; confirme e o servidor web será recarregado, aplicando a nova configuração do site.
Para detalhes sobre configuração de sites, consulte Adicionando o primeiro site na documentação do ServBay.
Exemplo Básico "Hello ServBay!"
Agora, vamos editar o código do projeto para que, ao acessar a URL raiz (/
), seja exibida a mensagem "Hello ServBay!".
Configure rotas e o controlador (module.config.php)
Edite o arquivo
module/Application/config/module.config.php
no diretório do projeto e certifique-se de que contenha a configuração básica de rotas e de controlador:php// ... outros códigos PHP // ... outras configurações // ... outras rotas // ... outros controladores // ... outras configurações // ... outros retornos e arrays de configuração // Observação: apenas traduza os comentários em chinês // ... 其他路由配置 // ... 其他配置 // ... 其他 action 方法 // ... 其他全局配置 // ... 现有 action 方法 (如 indexAction, mysqlAddAction, mysqlAction) // ... 现有 action 方法 // ... 现有路由 (如 'home', 'mysql-add', 'mysql') // ... 现有路由 // ... 其他 use 声明 // ... 其他配置 (controllers, service_manager, view_manager 等) // ... 其他配置 // ... 其他配置 // ... 其他配置 // ... 其他配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24Observação: Este bloco representa parte do conteúdo do
module.config.php
; integre-o ao array de configuração já existente do arquivo. Certifique-se que existe a rota'home'
e a definição da fábrica do controladorController\IndexController::class
.Crie ou edite o controlador (IndexController.php)
Edite ou crie o arquivo
module/Application/src/Controller/IndexController.php
. Garanta que o métodoindexAction
retorne um ViewModel com a mensagem:php/** * Ação padrão para exibir a página de boas-vindas. */ public function indexAction() { // Retorne um ViewModel e passe a variável 'message' para a view return new ViewModel([ 'message' => 'Hello ServBay!', ]); } // ... outras action methods
1
2
3
4
5
6
7
8
9
10
11Crie ou edite a view (index.phtml)
Edite ou crie o arquivo
module/Application/view/application/index/index.phtml
. Este receberá a variávelmessage
do controlador e a exibirá:php<h1><?php echo $this->message; ?></h1>
1Aqui, usamos o helper
$this->message
do Zend Framework (Laminas) para acessar os dados enviados pelo controlador.
Acessando o Site
Abra um navegador e acesse o domínio configurado no ServBay, por exemplo: https://servbay-zend-test.local
.
Se tudo estiver correto, você verá a página exibindo Hello ServBay!
. Isso confirma que seu projeto Zend Framework está rodando com sucesso no ServBay.
Exemplos de Integração com Banco de Dados e Cache
O ServBay oferece múltiplos bancos de dados e serviços de cache. Abaixo, seguem exemplos de como conectar e utilizar Memcached, Redis, MySQL e PostgreSQL no projeto Zend Framework.
Atenção: Os exemplos de banco de dados e cache são demonstrativos e independentes. Para projetos reais, escolha a tecnologia conforme a necessidade, utilizando técnicas como injeção de dependência para gerenciar conexões. Certifique-se de iniciar os respectivos serviços via painel do ServBay (MySQL, PostgreSQL, Memcached, Redis).
Exemplo de Interação com Banco – Criação de Tabela
Começamos mostrando como interagir com o banco de dados usando o componente Laminas DB, criando uma tabela simples (sem utilizar a ferramenta completa de migração).
Instale o componente Laminas DB
No diretório do projeto, execute:
bashcomposer require laminas/laminas-db
1Crie o banco de dados manualmente
Antes do exemplo de banco, crie no ServBay um banco chamado
servbay_zend_app
. Utilize ferramentas de gerenciamento como phpMyAdmin, pgAdmin, MongoDB Compass etc. No ServBay, o usuário padrão do MySQL/MariaDB éroot
, senha padrão épassword
. O PostgreSQL também usaroot
epassword
como padrão.Defina e execute o script de criação de tabela (exemplo)
Crie um arquivo PHP, por exemplo,
create_users_table.php
, contendo:php<?php // create_users_table.php use Laminas\Db\Adapter\Adapter; use Laminas\Db\Sql\Sql; // Supondo uso de MySQL ou MariaDB $adapter = new Adapter([ 'driver' => 'Pdo_Mysql', // ou 'Pdo_Pgsql' 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', // Senha padrão do ServBay 'hostname' => '127.0.0.1', // 'port' => 3306, // Porta padrão do MySQL // 'port' => 5432, // Porta padrão do PostgreSQL ]); $sql = new Sql($adapter); // Define a SQL para criar a tabela users // 定义创建 users 表的 SQL // 执行 SQL // 返回 ViewModel 并将 'message' 变量传递给视图 try { // Executa o 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
33Observação: Este é um script manual. Normalmente, utiliza-se ferramentas como o Laminas Migrations para controle de versão do schema.
No terminal, execute via PHP CLI para criar a tabela:
bashphp create_users_table.php
1
Exemplo de Integração MySQL
Como conectar e consultar um banco MySQL no controlador do Zend Framework.
Configure a conexão com o banco
Edite o arquivo
config/autoload/global.php
para incluir as informações do MySQL:php<?php // config/autoload/global.php return [ 'db' => [ 'driver' => 'Pdo_Mysql', 'database' => 'servbay_zend_app', // Certifique-se que o banco exista 'username' => 'root', // Usuário padrão do ServBay 'password' => 'password', // Senha padrão 'hostname' => '127.0.0.1', 'port' => 3306, // Porta padrão MySQL 'charset' => 'utf8mb4', ], // ... outras configurações globais ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14Configure a factory do controlador (module.config.php)
Para injetar
Laminas\Db\Adapter\Adapter
no controlador, defina uma factory para oIndexController
emmodule/Application/config/module.config.php
:php// Aqui, traduza apenas os comentários em chinês // 从 Service Manager 中获取数据库适配器 // 创建并返回 IndexController 实例,注入适配器 // 如果需要,为其他控制器添加工厂 // 为 Laminas\Db\Adapter\AdapterInterface 设置一个别名,指向实际的 Adapter // 定义 Laminas\Db\Adapter\Adapter 的工厂 // 上述代码块是 module.config.php 的部分内容,您需要将其合并到文件中已有的配置数组中。特别是 service_manager 部分,确保 AdapterInterface 的别名和 Laminas\Db\Adapter\Adapter 的工厂已正确配置。
1
2
3
4
5
6
7
8Configure as rotas (module.config.php)
Inclua novas rotas para os exemplos MySQL:
php// 现有路由 (如 'home') // 将上述路由添加到 router 数组中的 'routes' 子数组里。
1
2Adicione métodos ao controlador (IndexController.php)
Implemente os métodos
mysqlAddAction
emysqlAction
:php/** * Ação para adicionar usuário à tabela 'users' via MySQL. */ public function mysqlAddAction() { // Aqui, os comentários do exemplo original já estão em inglês e não precisam ser traduzidos } /** * Ação para buscar todos os usuários da tabela 'users' via MySQL. */ public function mysqlAction() { // ... lógica conforme exemplo } // ... outras action methods
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16Crie arquivos de view
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
2Acesse o exemplo MySQL
Assegure-se de que o serviço MySQL esteja ativo no ServBay. Acesse
https://servbay-zend-test.local/mysql-add
para adicionar um usuário ehttps://servbay-zend-test.local/mysql
para listar os usuários em formato JSON.
Exemplo de Integração PostgreSQL
Como conectar e consultar PostgreSQL no Zend Framework.
Configure a conexão com PostgreSQL
Edite
config/autoload/global.php
e ajuste os dados de acesso:php// ... configuração conforme exemplo acima
1Configure a factory do controlador
(Idêntico ao exemplo do MySQL)
Configure rotas
Inclua rotas para
/pgsql-add
e/pgsql
no arquivo de configuração.Adicione métodos ao controlador
Implemente
pgsqlAddAction
epgsqlAction
conforme exemplo.Crie arquivos de view
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
2Acesse o exemplo PostgreSQL
Ative o serviço PostgreSQL no ServBay. Acesse
https://servbay-zend-test.local/pgsql-add
para adicionar usuário ehttps://servbay-zend-test.local/pgsql
para listar os usuários.
Exemplo de Integração Memcached
Como usar o Memcached para cache no Zend Framework.
Instale o adaptador Memcached
No
composer.json
:json// composer.json { "require": { "laminas/laminas-skeleton-application": "^1.0", "laminas/laminas-cache-storage-adapter-memcached": "^2.0" // ... outras dependências } }
1
2
3
4
5
6
7
8Rode
composer update
para instalar. O ServBay já possui o PHP Memcached habilitado.Configure rotas
Adicione rota para
/memcached
no arquivo de configuração.Adicione método ao controlador
Implemente
memcachedAction
:php/** * Ação para demonstrar uso do Memcached. */ public function memcachedAction() { // ... lógica conforme exemplo }
1
2
3
4
5
6
7Crie arquivo de view
module/Application/view/application/index/memcached.phtml
:php<h1>Memcached Example</h1> <p><?php echo $this->message; ?></p>
1
2Acesse o exemplo Memcached
Certifique-se que o Memcached está ativo. Acesse
https://servbay-zend-test.local/memcached
. Na primeira vez, a mensagem terá "CACHE MISS". Enquanto o cache for válido (300 segundos, neste exemplo), verá "CACHE HIT".
Exemplo de Integração Redis
Como utilizar Redis para cache ou armazenamento.
Instale o adaptador Redis
No
composer.json
:json// composer.json { "require": { "laminas/laminas-skeleton-application": "^1.0", "laminas/laminas-cache-storage-adapter-redis": "^2.0", "ext-redis": "*" // ... outras dependências } }
1
2
3
4
5
6
7
8
9Rode
composer update
. O ServBay já possui a extensão PHP Redis instalada.Configure rotas
Inclua rota para
/redis
no arquivo de configuração.Adicione método ao controlador
Implemente
redisAction
:php/** * Ação para demonstrar uso do Redis. */ public function redisAction() { // ... lógica conforme exemplo }
1
2
3
4
5
6
7Crie arquivo de view
module/Application/view/application/index/redis.phtml
:php<h1>Redis Example</h1> <p><?php echo $this->message; ?></p>
1
2Acesse o exemplo Redis
Certifique-se de que o serviço Redis está ativo. Acesse
https://servbay-zend-test.local/redis
. A mensagem mostrará "CACHE MISS" na primeira visita, e "CACHE HIT" nas visitas seguintes, enquanto o cache estiver válido.
Conclusão
Com esses passos, você configurou e executou um projeto Zend Framework (Laminas) no ambiente local ServBay, aprendeu a configurar o servidor web para apontar para a pasta pública do projeto e a integrar bancos de dados MySQL, PostgreSQL, além dos serviços de cache Memcached e Redis.
O ServBay simplifica a instalação e administração do ambiente de desenvolvimento, permitindo focar no desenvolvimento do seu projeto. Aproveite os variados pacotes e flexibilidade do ServBay para simular facilmente um ambiente de produção local e aumentar sua produtividade.