Criar e executar um projeto Zend Framework
O que é Zend Framework?
Zend Framework é um framework PHP de código aberto que fornece uma coleção de bibliotecas orientadas a objetos para construir aplicativos e serviços web modernos. É conhecido por sua modularidade e alta performance, adequado para construir desde pequenos até grandes aplicativos corporativos.
Principais características e vantagens do Zend Framework
- Design modular: O Zend Framework utiliza design modular, permitindo que os desenvolvedores escolham e usem componentes conforme necessário.
- Alta performance: Graças à arquitetura otimizada e mecanismos de cache, Zend Framework oferece excelente desempenho.
- Flexibilidade: Pode integrar várias bibliotecas e extensões de terceiros, adequado para projetos de qualquer escala.
- Suporte da comunidade: Possui uma grande comunidade de desenvolvedores e um ecossistema rico.
- Documentação abrangente: Fornece documentação detalhada e tutoriais, ajudando os desenvolvedores a começarem rapidamente.
O Zend Framework é ideal para construir aplicativos e APIs web de alta qualidade, adequados para projetos que vão de pequenas aplicações a sistemas empresariais de grande escala.
Usando ServBay para criar e executar um projeto Zend Framework
Neste artigo, usaremos o ambiente PHP fornecido pelo ServBay para criar e executar um projeto Zend Framework. Utilizaremos a funcionalidade "Host" do ServBay para configurar o servidor web e acessar o projeto através de uma configuração simples.
Atenção: Se você já usou NGINX ou Apache
O ServBay usa Caddy como servidor web por padrão. Para usuários que estão migrando do NGINX e Apache para o ServBay, há algumas mudanças importantes a serem observadas:
Configuração do Caddy
O ServBay já vem com Caddy embutido, com configurações otimizadas e ajustadas. Os desenvolvedores só precisam usar a funcionalidade "Host" do ServBay para gerenciar os sites, sem necessidade de modificar os arquivos de configuração do Caddy.
Regras de Rewrite e .htaccess
No NGINX e Apache, os desenvolvedores geralmente precisam escrever suas próprias regras de Rewrite e arquivos .htaccess para tratar reescritas de URL e outras configurações. No entanto, o ServBay já tem as regras do Caddy configuradas, então a menos que haja uma necessidade especial, os desenvolvedores não precisam escrever essas regras.
Saber mais
Para mais informações, consulte Rewrite e htaccess, Como migrar um site Apache para o ServBay, Como migrar um site NGINX para o ServBay.
Criando o projeto Zend Framework
TIP
O ServBay recomenda que os desenvolvedores coloquem os sites no diretório /Applications/ServBay/www
para facilitar a gestão.
Instalar o Composer
O ServBay já vem com Composer embutido, então não é necessário instalá-lo separadamente.
Criar um projeto Zend Framework
Use o Composer para criar um novo projeto Zend Framework:
bashcd /Applications/ServBay/www mkdir servbay-zend-app cd servbay-zend-app composer create-project zendframework/skeleton-application .
1
2
3
4Entrar no diretório do projeto
Entre no diretório do projeto Zend Framework recém-criado:
bashcd /Applications/ServBay/www/servbay-zend-app
1
Configuração inicial
Configurar variáveis de ambiente
Configure as informações de conexão do banco de dados e outras variáveis de ambiente no arquivo
config/autoload/global.php
. Certifique-se de que as seguintes configurações estão corretas: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
Configurar o servidor web
Use a funcionalidade "Host" do ServBay para acessar o projeto Zend Framework através do servidor web. Na configuração "Host" do ServBay, adicione um novo host:
- Nome:
My First Zend Dev Site
- Domínio:
servbay-zend-test.local
- Tipo de site:
PHP
- Versão do PHP: escolha
8.3
- Diretório raiz do site:
/Applications/ServBay/www/servbay-zend-app/public
Para obter detalhes sobre os passos de configuração, consulte Adicionar o primeiro site.
Adicionar código de exemplo
Adicione o seguinte código no arquivo module/Application/config/module.config.php
para exibir "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
Adicione o seguinte código no arquivo 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
Adicione o seguinte código no arquivo module/Application/view/application/index/index.phtml
:
<?php echo $this->message; ?>
Acessar o site
Abra o navegador e acesse https://servbay-zend-test.local
, você verá Hello ServBay!
.
Exemplo com banco de dados NoSQL
Exemplo com Memcached
Instalar a extensão Memcached
No ServBay, a extensão Memcached já está pré-instalada, portanto, não é necessário instalar.
Configurar Memcached
Adicione a dependência do Memcached no arquivo
composer.json
:json{ "require": { "laminas/laminas-cache-storage-adapter-memcached": "^2.0" } }
1
2
3
4
5Em seguida, execute
composer update
para instalar a dependência.Configurar rotas
Adicione o seguinte código no arquivo
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
16Usar Memcached
No controlador, utilize o cache:
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
34Adicione o seguinte código no arquivo
module/Application/view/application/index/memcached.phtml
:php<?php echo $this->message; ?>
1Abra o navegador e acesse
https://servbay-zend-test.local/memcached
Exemplo com Redis
Instalar a extensão Redis
No ServBay, a extensão Redis já está pré-instalada, portanto, não é necessário instalar.
Configurar Redis
Adicione a dependência do Redis no arquivo
composer.json
:json{ "require": { "laminas/laminas-cache-storage-adapter-redis": "^2.0" } }
1
2
3
4
5Em seguida, execute
composer update
para instalar a dependência.Configurar rotas
Adicione o seguinte código no arquivo
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
16Usar Redis
No controlador, utilize o cache:
phpnamespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\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
35Adicione o seguinte código no arquivo
module/Application/view/application/index/redis.phtml
:php<?php echo $this->message; ?>
1Abra o navegador e acesse
https://servbay-zend-test.local/redis
Exemplo com banco de dados relacional
Criar estrutura de banco de dados e arquivos de migração
Criar arquivo de migração
Use a ferramenta Migrations do Laminas para criar um arquivo de migração:
bashcomposer require laminas/laminas-db
1Editar arquivo de migração
No diretório
data/migrations
, crie um novo arquivo de migração e edite-o para definir a estrutura da tabela do banco de dados: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
20Executar a migração
Execute a migração manualmente para criar a tabela do banco de dados:
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
Exemplo com MySQL
Configurar MySQL
Configure as informações de conexão MySQL no arquivo
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
9Configurar rotas
Adicione o seguinte código no arquivo
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
26Inserir dados de usuário
No controlador, insira dados de usuário:
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
55Adicione o seguinte código no arquivo
module/Application/view/application/index/mysql-add.phtml
:php<?php echo $this->message; ?>
1Adicione o seguinte código no arquivo
module/Application/view/application/index/mysql.phtml
:php<?php echo $this->users; ?>
1Abra o navegador e acesse
https://servbay-zend-test.local/mysql-add
ehttps://servbay-zend-test.local/mysql
Exemplo com PostgreSQL
Configurar PostgreSQL
Configure as informações de conexão PostgreSQL no arquivo
config/autoload/global.php
: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
9Configurar rotas
Adicione o seguinte código no arquivo
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
26Inserir dados de usuário
No controlador, insira dados de usuário:
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 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' => 'User added', ]); } 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([ '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
56