Criando e executando um projeto Symfony
O que é Symfony?
Symfony é um framework PHP open-source criado pela SensioLabs, projetado para fornecer aos desenvolvedores um conjunto eficiente, flexível e poderoso de ferramentas para construir aplicativos web modernos. O Symfony oferece uma ampla gama de funcionalidades, como roteamento, engine de templates, tratamento de formulários, autenticação, entre outras, simplificando tarefas comuns de desenvolvimento web.
Principais características e vantagens do Symfony
- Design Modular: Symfony adota um design modular, permitindo que os desenvolvedores escolham e usem componentes conforme necessário.
- Alta Performance: Através de uma arquitetura otimizada e mecanismos de cache, Symfony oferece um desempenho excepcional.
- Suporte forte da Comunidade: Possui uma grande comunidade de desenvolvedores e um ecossistema rico.
- Flexibilidade: Pode ser integrado com várias bibliotecas e extensões de terceiros, adequado para projetos de todos os tamanhos.
- Boa documentação: Fornece uma documentação e tutoriais detalhados, ajudando os desenvolvedores a começar rapidamente.
Symfony pode ajudar os desenvolvedores a construir rapidamente aplicativos web e APIs de alta qualidade, adequados para projetos desde pequenos aplicativos até grandes sistemas em nível empresarial.
Criando e executando um projeto Symfony usando ServBay
Neste artigo, vamos utilizar o ambiente PHP fornecido pelo ServBay para criar e executar um projeto Symfony. Vamos aproveitar a funcionalidade de "hospedagem" do ServBay para configurar o servidor web e acessar o projeto com uma simples configuração.
Atenção: Se você era usuário de NGINX ou Apache
O ServBay usa Caddy como servidor web por padrão. Para os 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á possui o Caddy integrado e a configuração padrão já está otimizada e ajustada. Os desenvolvedores só precisam gerenciar sites usando a funcionalidade de "hospedagem" do ServBay, sem a necessidade de modificar manualmente o arquivo de configuração do Caddy.
Regras de reescrita e .htaccess
No NGINX e Apache, desenvolvedores geralmente precisam escrever suas próprias regras de reescrita e arquivos .htaccess para lidar com reescrita de URL e outras configurações. No entanto, o ServBay já vem configurado com as regras do Caddy, então, a menos que haja uma necessidade específica, os desenvolvedores não precisarão escrever essas regras.
Saiba mais
Para mais informações relativas, consulte Reescreva e htaccess, Como migrar o site Apache para o ServBay, Como migrar o site NGINX para o ServBay.
Criando um projeto Symfony
TIP
O ServBay recomenda que os desenvolvedores coloquem seus sites no diretório /Applications/ServBay/www
para facilitar a gestão.
Instalando o Composer
O ServBay já vem com o Composer pré-instalado, então não há necessidade de instalá-lo separadamente.
Criando um projeto Symfony
Use o Composer para criar um novo projeto Symfony:
bashcd /Applications/ServBay/www mkdir servbay-symfony-app cd servbay-symfony-app composer create-project symfony/website-skeleton .
1
2
3
4Entrando no diretório do projeto
Entre no diretório do novo projeto Symfony:
bashcd /Applications/ServBay/www/servbay-symfony-app
1
Inicializando a configuração
Configurando variáveis de ambiente
Configure as informações de conexão do banco de dados e outras variáveis de ambiente no arquivo
.env
. Certifique-se de que as seguintes configurações estejam corretamente definidas:APP_ENV=dev APP_SECRET=your_secret_key DATABASE_URL=mysql://root:[email protected]:3306/servbay_symfony_app
1
2
3
Configurando o servidor web
Use a funcionalidade de "hospedagem" do ServBay para acessar o projeto Symfony através do servidor web. Nas configurações de "hospedagem" do ServBay, adicione um novo host:
- Nome:
My First Symfony Dev Site
- Domínio:
servbay-symfony-test.local
- Tipo de site:
PHP
- Versão do PHP: Escolha
8.3
- Diretório raiz do site:
/Applications/ServBay/www/servbay-symfony-app/public
Para etapas detalhadas de configuração, consulte Adicionando o primeiro site.
Adicionando código de exemplo
Adicione o seguinte código no arquivo config/routes.yaml
para exibir "Hello ServBay!":
index:
path: /
controller: App\Controller\DefaultController::index
2
3
Adicione o seguinte código no arquivo src/Controller/DefaultController.php
:
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class DefaultController
{
/**
* @Route("/", name="index")
*/
public function index(): Response
{
return new Response('Hello ServBay!');
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Acessando o site
Abra o navegador e acesse https://servbay-symfony-test.local
, e você verá a página exibindo Hello ServBay!
.
Exemplo de base de dados NoSQL
Exemplo de Memcached
Instalando a extensão Memcached
No ServBay, a extensão Memcached já está pré-instalada, não há necessidade de instalação adicional.
Configurando o Memcached
Configure as informações de conexão do Memcached no arquivo
.env
:CACHE_DRIVER=memcached MEMCACHED_HOST=127.0.0.1
1
2Adicione o seguinte código no arquivo
config/routes.yaml
:
memcached:
path: /memcached
controller: App\Controller\DefaultController::memcached
2
3
Usando o Memcached
Use o cache no controlador:
phpuse Symfony\Component\Cache\Adapter\MemcachedAdapter; class DefaultController { /** * @Route("/memcached", name="memcached") */ public function memcached(): Response { $client = MemcachedAdapter::createConnection('memcached://127.0.0.1:11211'); $cache = new MemcachedAdapter($client); $cacheItem = $cache->getItem('my_cache_key'); if (!$cacheItem->isHit()) { $cacheItem->set('Hello Memcached!'); $cache->save($cacheItem); } return new Response($cacheItem->get()); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Abra o navegador e acesse
https://servbay-symfony-test.local/memcached
Exemplo de Redis
Instalando a extensão Redis
No ServBay, a extensão Redis já está pré-instalada, não há necessidade de instalação adicional.
Configurando o Redis
Configure as informações de conexão do Redis no arquivo
.env
:REDIS_URL=redis://127.0.0.1:6379
1Adicione o seguinte código no arquivo
config/routes.yaml
:
redis:
path: /redis
controller: App\Controller\DefaultController::redis
2
3
Usando o Redis
Use o cache no controlador:
phpuse Symfony\Component\Cache\Adapter\RedisAdapter; class DefaultController { /** * @Route("/redis", name="redis") */ public function redis(): Response { $redisConnection = RedisAdapter::createConnection('redis://127.0.0.1:6379'); $cache = new RedisAdapter($redisConnection); $cacheItem = $cache->getItem('my_cache_key'); if (!$cacheItem->isHit()) { $cacheItem->set('Hello Redis!'); $cache->save($cacheItem); } return new Response($cacheItem->get()); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Abra o navegador e acesse
https://servbay-symfony-test.local/redis
Exemplo de base de dados relacional
Criação da estrutura do banco de dados e arquivos de migração
Criando os arquivos de migração
Use o Maker Bundle do Symfony para criar arquivos de migração:
bashphp bin/console make:migration
1Editando os arquivos de migração
No diretório
src/Migrations
, encontre o arquivo de migração recém-criado e edite-o para definir a estrutura da tabela do banco de dados:phppublic function up(Schema $schema): void { $this->addSql('CREATE TABLE users (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, PRIMARY KEY(id))'); }
1
2
3
4Executando a migração
Use o comando do Symfony para executar a migração e criar a tabela no banco de dados:
bashphp bin/console doctrine:migrations:migrate
1
Exemplo de MySQL
Configurando o MySQL
Configure as informações de conexão do MySQL no arquivo
.env
:DATABASE_URL=mysql://root:[email protected]:3306/servbay_symfony_app
1Adicione o seguinte código no arquivo
config/routes.yaml
:
mysql_add:
path: /mysql-add
controller: App\Controller\DefaultController::mysqlAdd
mysql_get:
path: /mysql
controller: App\Controller\DefaultController::mysql
2
3
4
5
6
Inserindo dados do usuário
Insira dados do usuário no controlador:
phpuse Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\Routing\Annotation\Route; class DefaultController { private $entityManager; public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/mysql-add", name="mysql_add") */ public function mysqlAdd(): Response { $user = new User(); $user->setName('ServBay'); $user->setEmail('[email protected]'); $this->entityManager->persist($user); $this->entityManager->flush(); return new Response('User added'); } /** * @Route("/mysql", name="mysql") */ public function mysql(): Response { $users = $this->entityManager->getRepository(User::class)->findAll(); return new Response(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
37Abra o navegador e acesse
https://servbay-symfony-test.local/mysql-add
ehttps://servbay-symfony-test.local/mysql
Exemplo de PostgreSQL
Configurando o PostgreSQL
Configure as informações de conexão do PostgreSQL no arquivo
.env
:DATABASE_URL=pgsql://root:[email protected]:5432/servbay_symfony_app
1Adicione o seguinte código no arquivo
config/routes.yaml
:
pgsql_add:
path: /pgsql-add
controller: App\Controller\DefaultController::pgsqlAdd
pgsql_get:
path: /pgsql
controller: App\Controller\DefaultController::pgsql
2
3
4
5
6
Inserindo dados do usuário
Insira dados do usuário no controlador:
phpuse Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\Routing\Annotation\Route; class DefaultController { private $entityManager; public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/pgsql-add", name="pgsql_add") */ public function pgsqlAdd(): Response { $user = new User(); $user->setName('ServBay'); $user->setEmail('[email protected]'); $this->entityManager->persist($user); $this->entityManager->flush(); return new Response('User added'); } /** * @Route("/pgsql", name="pgsql") */ public function pgsql(): Response { $users = $this->entityManager->getRepository(User::class)->findAll(); return new Response(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
37Abra o navegador e acesse
https://servbay-symfony-test.local/pgsql-add
ehttps://servbay-symfony-test.local/pgsql
Seguindo estes passos, você terá criado e executado com sucesso um projeto Symfony, utilizando as funcionalidades fornecidas pelo ServBay para gerenciar e acessar seu projeto, enquanto conecta várias bases de dados e acessa dados nelas contidos.