Criando e Executando Projetos Yii 2 no ServBay
Visão Geral: O que é Yii 2?
O Yii 2 é um framework PHP de alta performance e baseado em componentes, voltado para o rápido desenvolvimento de aplicações web modernas. Ele segue o padrão de arquitetura MVC (Model-View-Controller) e oferece um conjunto completo de funcionalidades e ferramentas poderosas, facilitando para desenvolvedores construir aplicações web escaláveis e robustas. Yii 2 é amplamente popular por sua performance superior, arquitetura flexível e recursos nativos avançados como caching, segurança e suporte para APIs RESTful.
Principais recursos e vantagens do Yii 2
- Alta performance: Yii 2 é cuidadosamente otimizado para lidar com grande volume de requisições simultâneas, tornando-se ideal para projetos críticos em desempenho.
- Modularidade: O design altamente modular do framework facilita a organização do código e o uso de componentes reaproveitáveis.
- Segurança: Recursos nativos de segurança, incluindo validação de entrada, filtragem de saída, proteção contra CSRF/XSS, autenticação e autorização.
- Facilidade de uso: API simples e intuitiva, além de documentação detalhada, tornam o aprendizado mais rápido e fácil para desenvolvedores.
- Comunidade ativa: Uma comunidade vibrante e numerosa, com diversas extensões de terceiros disponíveis para ampliar funcionalidades e suporte fácil para dúvidas e problemas.
- Ferramentas integradas: Ferramentas de terminal para tarefas essenciais do desenvolvimento, como migração de banco de dados e geração de código, otimizam o fluxo de trabalho.
Yii 2 é uma escolha ideal para aplicações empresariais, APIs RESTful, portais e muitos outros tipos de projetos web.
Executando Projetos Yii 2 com ServBay
ServBay é um ambiente de desenvolvimento local para macOS e Windows, que integra tudo que você precisa: PHP, diversos bancos de dados (MySQL, PostgreSQL, MongoDB, Redis), servidores web (Caddy, Nginx) e ferramentas extras (Composer, Node.js, Python, Go, Java e outros). Seu objetivo é oferecer uma plataforma “pronto para uso”, eliminando complexidade da configuração inicial.
A seguir, explicamos como usar o ambiente PHP, Composer e os serviços de banco de dados do ServBay para criar e executar um aplicativo Yii 2 básico. Vamos utilizar o recurso “Sites” do ServBay para configurar o servidor web local, demonstrando o acesso e as funcionalidades principais do projeto.
Pré-Requisitos
Antes de começar, certifique-se de que:
- O ServBay está instalado e executando em seu macOS ou Windows.
- Você habilitou a versão necessária do PHP no ServBay (por exemplo, PHP 8.3 ou superior).
- Os serviços de banco de dados desejados (MySQL ou PostgreSQL) e de cache (Memcached e Redis) estão instalados e ativados em seu ServBay.
Você pode verificar e gerenciar os pacotes instalados diretamente na interface principal do ServBay.
Criando um Projeto Yii 2
TIP
ServBay recomenda armazenar seus arquivos de projeto nos seguintes diretórios. Isso mantém a estrutura de arquivos organizada e facilita o gerenciamento pelo recurso “Sites” do ServBay:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Composer: O Composer já está integrado ao ServBay, não sendo necessário instalá-lo separadamente. Basta usar o comando
composer
diretamente no terminal.Criar diretório do projeto: No terminal, navegue até o diretório padrão da web do ServBay e crie o diretório do projeto.
macOS:
bashcd /Applications/ServBay/www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Windows:
cmdcd C:\ServBay\www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Criar o projeto Yii 2 com Composer: Dentro do diretório
servbay-yii2-app
, execute o comando Composer para baixar o template básico do Yii 2.bashcomposer create-project --prefer-dist yiisoft/yii2-app-basic .
1Este comando fará o download do template do Yii 2 e todas as dependências para o diretório atual (
.
). Aguarde até que o Composer finalize o processo de instalação.Navegar para o diretório do projeto: Certifique-se de que está no diretório raiz do projeto para executar os próximos comandos.
macOS:
bashcd /Applications/ServBay/www/servbay-yii2-app
1Windows:
cmdcd C:\ServBay\www\servbay-yii2-app
1
Configuração Inicial
Depois da criação do projeto Yii 2, é preciso realizar algumas configurações essenciais, principalmente as relacionadas a conexão com banco de dados e componentes do sistema.
Configurar a conexão com o banco de dados: Edite o arquivo
config/db.php
no diretório raiz do seu projeto. Com base no banco de dados (MySQL ou PostgreSQL) ativo no ServBay e em sua configuração (usuário padrão geralmente éroot
, senhapassword
a menos que você tenha mudado), ajuste as informações de conexão.Primeiro, crie um novo banco de dados no serviço correspondente do ServBay, por exemplo,
servbay_yii2_app
. Para criar o banco, use a ferramenta Adminer incluída no ServBay ou qualquer outro cliente de banco de dados de sua preferência (como Sequel Ace, TablePlus, etc.). O Adminer pode ser acessado pela interface do ServBay, na seção de bancos de dados.Para MySQL:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;dbname=servbay_yii2_app', // dbname deve ser o nome do banco criado 'username' => 'root', // Usuário do banco 'password' => 'password', // Senha do banco 'charset' => 'utf8mb4', // Recomenda-se utf8mb4 para melhor suporte à caracteres ];
1
2
3
4
5
6
7
8
9Para PostgreSQL:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'pgsql:host=127.0.0.1;port=5432;dbname=servbay_yii2_app', // dbname criado e porta padrão 5432 'username' => 'root', // Usuário do banco 'password' => 'password', // Senha do banco 'charset' => 'utf8', 'schemaMap' => [ 'pgsql' => [ 'class' => 'yii\pgsql\Schema', 'defaultSchema' => 'public', // Schema padrão do PostgreSQL ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Escolha e edite o
config/db.php
conforme o seu cenário.Configurar Memcached e Redis: Edite o arquivo
config/web.php
no diretório raiz do projeto. Modifique ou adicione a seçãocomponents
para configurar Memcached e Redis. Por padrão, a porta do Memcached é11211
e do Redis é6379
no ServBay.php<?php // ... outras configurações 'components' => [ // ... demais componentes (request, cache, user, errorHandler, log, urlManager, etc.) 'cache' => [ 'class' => 'yii\caching\MemCache', 'servers' => [ [ 'host' => '127.0.0.1', 'port' => 11211, // Porta padrão do Memcached 'weight' => 100, ], ], ], 'redis' => [ 'class' => 'yii\redis\Connection', 'hostname' => '127.0.0.1', 'port' => 6379, // Porta padrão do Redis 'database' => 0, // Índice do banco Redis ], // ... demais componentes ], // ... outras configurações
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
28Verifique se Memcached e Redis estão ativos no ServBay. Lembre-se: para usar Redis como cache, é necessário instalar o pacote
yiisoft/yii2-redis
(que pode já estar nas dependências básicas, senão instale manualmente comcomposer require yiisoft/yii2-redis
). O Memcached utilizayiisoft/yii2-memcached
. O template básico pode já incluir esses pacotes.
Configuração do Servidor Web (“Sites” no ServBay)
Utilize a função “Sites” do ServBay para ajustar o servidor web local (Caddy ou Nginx) e apontar para seu projeto Yii 2.
- Abra o ServBay: Inicie o aplicativo ServBay.
- Acesse as configurações de Sites: Busque e clique em “Sites” ou similar na interface.
- Adicione novo site: Clique no botão para adicionar um novo site (normalmente se identifica por um
+
ou por “Adicionar”). - Preencha as informações do site:
- Nome: Defina um nome fácil de identificar, como
Meu Primeiro Site Yii 2
. - Domínio: Escolha o domínio local, por exemplo,
servbay-yii2-test.local
. O ServBay cuida do DNS local apontando para127.0.0.1
. - Tipo de site: Selecione
PHP
. - Versão do PHP: Escolha a versão do PHP desejada (ex.:
8.3
). Certifique-se de que essa versão está instalada e ativada. - Diretório raiz do site: Muito importante: Para o template básico do Yii 2, a raiz pública é o diretório
web
dentro da pasta do projeto. Portanto, configure conforme:- macOS:
/Applications/ServBay/www/servbay-yii2-app/web
- Windows:
C:\ServBay\www\servbay-yii2-app\web
- macOS:
- Nome: Defina um nome fácil de identificar, como
- Salve e aplique: Salve a configuração do site. O ServBay recarregará automaticamente as configurações do servidor web.
Para mais detalhes, confira a documentação oficial do ServBay: Adicionando o primeiro site.
O ServBay emite e confia certificados SSL locais (via ServBay User CA ou ServBay Public CA), assim você pode acessar o site via HTTPS sem problemas.
Adicionando Código de Exemplo para Demonstração
Para exemplificar o uso de banco de dados e cache, adicione métodos de demonstração ao controlador padrão do Yii 2.
Edite controllers/SiteController.php
no diretório raiz e inclua os métodos abaixo à classe SiteController
:
php
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\web\Response;
use yii\db\Exception as DbException; // Importa exceção de banco de dados
class SiteController extends Controller
{
/**
* Exibe a página inicial.
*
* @return string
*/
public function actionIndex()
{
return $this->render('index');
}
/**
* Demonstra o uso do Memcached.
*
* @return Response
*/
public function actionMemcached()
{
$cache = Yii::$app->cache;
$key = 'my_memcached_test_key';
$data = 'Hello Memcached from ServBay!';
$duration = 60; // Cache por 60 segundos
if ($cache->set($key, $data, $duration)) {
$value = $cache->get($key);
return $this->asText("Memcached configurado com sucesso. Valor recuperado: " . $value);
} else {
return $this->asText("Falha ao gravar dados no Memcached. Verifique o serviço e a configuração do Memcached.");
}
}
/**
* Demonstra o uso do Redis.
*
* @return Response
*/
public function actionRedis()
{
$redis = Yii::$app->redis;
$key = 'my_redis_test_key';
$data = 'Hello Redis from ServBay!';
try {
if ($redis->set($key, $data)) {
$value = $redis->get($key);
return $this->asText("Redis configurado com sucesso. Valor recuperado: " . $value);
} else {
return $this->asText("Falha ao gravar dados no Redis. Verifique o serviço e a configuração do Redis.");
}
} catch (\yii\base\Exception $e) {
return $this->asText("Erro no Redis: " . $e->getMessage() . ". Verifique o serviço e a configuração do Redis.");
}
}
/**
* Demonstra a adição de um usuário ao banco de dados.
* Assume que existe a tabela 'users'.
*
* @return Response
*/
public function actionMysqlAdd() // Também funciona para PostgreSQL com a configuração adequada
{
try {
$count = Yii::$app->db->createCommand()->insert('users', [
'name' => 'ServBay Demo User', // Nome de usuário para demonstração do ServBay
'email' => 'demo-user@servbay.test', // E-mail de demonstração com marca ServBay
])->execute();
return $this->asText("Usuário adicionado com sucesso. Linhas afetadas: " . $count);
} catch (DbException $e) {
return $this->asText("Falha ao adicionar usuário ao banco de dados. Erro: " . $e->getMessage() . ". Verifique o serviço do banco, a configuração e se a tabela 'users' existe.");
}
}
/**
* Demonstra busca de usuários no banco de dados.
* Assume que existe a tabela 'users'.
*
* @return Response
*/
public function actionMysql() // Também funciona para PostgreSQL com a configuração adequada
{
try {
$users = Yii::$app->db->createCommand('SELECT id, name, email FROM users')->queryAll();
// Formata o resultado para exibir os dados de forma clara
$output = "Usuários encontrados:\n";
foreach ($users as $user) {
$output .= "- ID: {$user['id']}, Nome: {$user['name']}, E-mail: {$user['email']}\n";
}
return $this->asText($output);
} catch (DbException $e) {
return $this->asText("Falha ao buscar usuários no banco de dados. Erro: " . $e->getMessage() . ". Verifique o serviço do banco, a configuração e se a tabela 'users' existe.");
}
}
// Se você usar PostgreSQL, pode criar métodos específicos, mas geralmente usa o componente db padrão
// public function actionPgsqlAdd() { ... }
// public function actionPgsql() { ... }
/**
* Formata a saída como texto simples.
* @param string $text
* @return Response
*/
protected function asText($text)
{
Yii::$app->response->format = Response::FORMAT_RAW;
Yii::$app->response->getHeaders()->add('Content-Type', 'text/plain');
return $text;
}
/**
* Formata a saída como JSON.
* @param mixed $data
* @return Response
*/
protected function asJson($data)
{
Yii::$app->response->format = Response::FORMAT_JSON;
return $data;
}
}
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
Note que incluí tratamento de erro nos métodos actionMysqlAdd
e actionMysql
, assim como pequenas melhorias na saída para maior clareza. Os nomes de usuário/email do exemplo foram adaptados para o padrão de branding do ServBay.
Edite o arquivo de visão em views/site/index.php
, correspondente ao método actionIndex
. Você pode manter o conteúdo padrão ou ajustá-lo:
php
<?php
/* @var $this yii\web\View */
/* @var $name string */
/* @var $message string */
/* @var $exception Exception */
use yii\helpers\Html;
$this->title = 'Minha Aplicação Yii2 no ServBay'; // Atualização do título
?>
<div class="site-index">
<div class="jumbotron">
<h1>Parabéns!</h1>
<p class="lead">Você criou sua aplicação Yii2 e a configurou com sucesso usando o ServBay!</p>
<p><a class="btn btn-lg btn-success" href="https://www.yiiframework.com">Comece com o Yii</a></p>
</div>
<div class="body-content">
<h2>Demonstrações</h2>
<ul>
<li><a href="<?= Html::toRoute('site/memcached') ?>">Testar Memcached</a></li>
<li><a href="<?= Html::toRoute('site/redis') ?>">Testar Redis</a></li>
<li><a href="<?= Html::toRoute('site/mysql-add') ?>">Adicionar usuário no BD</a> (requer tabela 'users')</li>
<li><a href="<?= Html::toRoute('site/mysql') ?>">Buscar usuários no BD</a> (requer tabela 'users')</li>
</ul>
<p>Certifique-se de que Memcached, Redis e seu banco de dados (MySQL/PostgreSQL) estejam em execução no ServBay e configurados corretamente nos arquivos `config/web.php` e `config/db.php`.</p>
<p>Para os exemplos de banco de dados, é necessário criar a tabela 'users' usando migrações do Yii (veja abaixo).</p>
</div>
</div>
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
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
Incluí links para facilitar testes dos métodos demonstrativos.
Bancos de Dados Relacionais: Criando Estrutura de Tabelas (Migração)
Para usar os exemplos de banco (actionMysqlAdd
, actionMysql
), crie a tabela users
no banco de dados via sistema de migração do Yii.
Criar migração com o Gii: No terminal, assegure-se de estar no diretório raiz do projeto e execute o comando para criar o arquivo de migração:
Diretório do projeto:
- macOS:
/Applications/ServBay/www/servbay-yii2-app
- Windows:
C:\ServBay\www\servbay-yii2-app
bashphp yii migrate/create create_users_table
1O comando solicitará confirmação; digite
yes
e pressione Enter. Será criado um arquivo PHP novo emmigrations
, com nome similar amYYYYMMDD_HHMMSS_create_users_table.php
.- macOS:
Editar arquivo de migração: No migration recém-criado, edite o método
up()
para definir a estrutura da tabelausers
.php<?php use yii\db\Migration; /** * Cria a tabela `{{%users}}`. */ class mXXXXXXXXXXXXXX_create_users_table extends Migration // XXXXXXXXXXXXXX é carimbo de data/hora { /** * {@inheritdoc} */ public function up() { $this->createTable('{{%users}}', [ // {{%users}} permite uso de prefixo de tabela 'id' => $this->primaryKey(), 'name' => $this->string()->notNull(), 'email' => $this->string()->notNull()->unique(), 'created_at' => $this->timestamp()->defaultExpression('CURRENT_TIMESTAMP'), 'updated_at' => $this->timestamp()->defaultExpression('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'), ]); // Opcional: criar índice para acelerar buscas $this->createIndex( 'idx-users-email', '{{%users}}', 'email', true // true = índice único ); } /** * {@inheritdoc} */ public function down() { // Remove o índice $this->dropIndex( 'idx-users-email', '{{%users}}' ); // Remove a tabela $this->dropTable('{{%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
46Troque
mXXXXXXXXXXXXXX_create_users_table
pelo nome gerado pelo console.Executar migração: No terminal, ainda na raiz do projeto, execute o comando para aplicar a migração e criar a tabela conforme definição do método
up()
:bashphp yii migrate
1O sistema pedirá confirmação; responda
yes
e pressione Enter. Se tudo estiver correto, verá a mensagem de sucesso da criação da tabela.
Acessando o Site e Testando
Agora, abra o navegador e acesse o domínio configurado, por exemplo: https://servbay-yii2-test.local
.
- Acesse
https://servbay-yii2-test.local
: Você verá a página de boas-vindas do template básico do Yii 2 e os links de demonstração adicionados emviews/site/index.php
. - Clique em "Testar Memcached" ou acesse
https://servbay-yii2-test.local/index.php?r=site/memcached
: Se o serviço Memcached estiver funcionando e corretamente configurado, verá a mensagem "Memcached configurado com sucesso...". - Clique em "Testar Redis" ou acesse
https://servbay-yii2-test.local/index.php?r=site/redis
: Se o serviço Redis estiver funcionando e corretamente configurado, verá "Redis configurado com sucesso...". - Clique em "Adicionar usuário no BD" ou acesse
https://servbay-yii2-test.local/index.php?r=site/mysql-add
: Caso banco de dados esteja ativo, configurado e a tabelausers
criada por migração, verá "Usuário adicionado com sucesso...". Cada acesso tentará inserir novo usuário (exceto se o campo e-mail já existir e for único). - Clique em "Buscar usuários no BD" ou acesse
https://servbay-yii2-test.local/index.php?r=site/mysql
: Se o banco estiver ativo, tabelas criadas, verá a lista de usuários recuperados da tabelausers
.
Se houver problemas, verifique se os serviços (PHP, servidor web, banco de dados, Memcached, Redis) estão ativos no ServBay e confira as configurações do projeto (config/db.php
, config/web.php
). Garanta que a tabela foi criada corretamente.
Perguntas Frequentes (FAQ)
- Por que aparece “site não encontrado” ou erro de certificado ao acessar o domínio? Certifique-se de que o domínio foi adicionado corretamente nas configurações em “Sites” do ServBay e que o aplicativo ServBay está aberto. O ServBay configura o DNS local e os certificados SSL por conta própria. Em caso de erro de certificado, confira se você confiou na ServBay User CA ou Public CA. Consulte a documentação do ServBay para saber como confiar no certificado.
- Não consigo executar comandos Composer. O que fazer? Verifique se o pacote do Composer está ativado na interface do ServBay e se o comando está sendo executado no terminal do macOS. O ServBay adiciona automaticamente o Composer ao seu PATH.
- Falha na conexão com o banco de dados? Confira se o serviço de banco (MySQL/PostgreSQL) está ativo no ServBay. Cheque os parâmetros
dsn
,username
,password
emconfig/db.php
. Certifique-se que o bancoservbay_yii2_app
foi criado e está disponível. Use o Adminer para verificar conexões e bancos existentes. - Problemas ao conectar Memcached/Redis? Verifique se Memcached/Redis estão ativos no ServBay e se os parâmetros de configuração (
host
,port
) emconfig/web.php
estão corretos (padrão:127.0.0.1
e portas mencionadas). - Erro na migração (
php yii migrate
)? Confirme se o arquivoconfig/db.php
está configurado corretamente, se o serviço do banco está ativo e se o banco de dados existe. O comando depende da conexão estar ativa para executar. - Por que os métodos
actionMysqlAdd
/actionMysql
informam que a tabela não existe? Antes, rode a migração viaphp yii migrate
para criar a tabelausers
. - Como visualizar logs de erro do PHP? O ServBay centraliza os logs de erro do PHP e do servidor web. Você pode acessar a seção “Logs” na interface do ServBay e ver detalhes que ajudam a solucionar eventuais problemas.
Conclusão
Com o ServBay, você monta facilmente um ambiente de desenvolvimento local completo para executar projetos Yii 2 no macOS ou Windows. A integração do Composer, o gerenciamento de versões do PHP, bancos de dados e serviços de cache incorporados, além das funções de configuração rápida de sites, simplificam todo o processo de desenvolvimento com Yii 2. Seguindo este guia, você inicia rapidamente seu projeto e aproveita as ferramentas do ServBay para aumentar sua produtividade.
Bom desenvolvimento!