Crear y ejecutar un proyecto Symfony
¿Qué es Symfony?
Symfony es un framework PHP de código abierto creado por SensioLabs, destinado a proporcionar a los desarrolladores un conjunto eficiente, flexible y potente de herramientas para construir aplicaciones web modernas. Symfony ofrece una amplia gama de características, como enrutamiento, motor de plantillas, manejo de formularios, autenticación, y más, simplificando las tareas comunes de desarrollo web.
Principales características y ventajas de Symfony
- Diseño modular: Symfony adopta un diseño modular, permitiendo a los desarrolladores seleccionar y usar componentes según sus necesidades.
- Alto rendimiento: A través de una arquitectura optimizada y mecanismos de caché, Symfony ofrece un rendimiento excepcional.
- Robusto soporte de la comunidad: Cuenta con una gran comunidad de desarrolladores y un rico ecosistema.
- Flexibilidad: Puede integrarse con varias bibliotecas y extensiones de terceros, adecuado para proyectos de cualquier escala.
- Buena documentación: Proporciona documentación exhaustiva y tutoriales para ayudar a los desarrolladores a comenzar rápidamente.
Symfony puede ayudar a los desarrolladores a construir rápidamente aplicaciones web y API de alta calidad, adecuado para proyectos desde pequeñas aplicaciones hasta grandes sistemas empresariales.
Usar ServBay para crear y ejecutar un proyecto Symfony
En este artículo, usaremos el entorno PHP proporcionado por ServBay para crear y ejecutar un proyecto Symfony. Utilizaremos la funcionalidad 'Host' de ServBay para configurar el servidor web y acceder al proyecto mediante una configuración sencilla.
Atención: si anteriormente eras un usuario de NGINX o Apache
ServBay usa Caddy como el servidor web por defecto. Para los usuarios que migren de NGINX y Apache a ServBay, hay algunos puntos clave que deben tener en cuenta:
Configuración de Caddy
ServBay ya tiene Caddy incorporado y configurado para un óptimo rendimiento. Los desarrolladores solo necesitan usar la función 'Host' de ServBay para administrar los sitios, sin necesidad de modificar manualmente los archivos de configuración de Caddy.
Reglas de reescritura y .htaccess
En NGINX y Apache, los desarrolladores generalmente necesitan escribir sus propias reglas de reescritura y archivos .htaccess para manejar la reescritura de URL y otras configuraciones. Sin embargo, ServBay ya tiene configurada y optimizada la configuración de Caddy, por lo que, salvo necesidades específicas, los desarrolladores no necesitan escribir estas reglas.
Más información
Para más información, consulta Rewrite y htaccess, Cómo migrar un sitio de Apache a ServBay, Cómo migrar un sitio de NGINX a ServBay.
Crear un proyecto Symfony
TIP
ServBay sugiere a los desarrolladores colocar sus sitios web en el directorio /Applications/ServBay/www
para facilitar la gestión.
Instalar Composer
ServBay viene con Composer preinstalado, por lo que no es necesario instalarlo por separado.
Crear un proyecto Symfony
Usa Composer para crear un nuevo proyecto Symfony:
bashcd /Applications/ServBay/www mkdir servbay-symfony-app cd servbay-symfony-app composer create-project symfony/website-skeleton .
1
2
3
4Entrar en el directorio del proyecto
Entra en el nuevo directorio del proyecto Symfony:
bashcd /Applications/ServBay/www/servbay-symfony-app
1
Configuración inicial
Configurar las variables de entorno
Configura la información de conexión a la base de datos y otras variables de entorno en el archivo
.env
. Asegúrate de que la siguiente configuración esté correctamente establecida:APP_ENV=dev APP_SECRET=your_secret_key DATABASE_URL=mysql://root:[email protected]:3306/servbay_symfony_app
1
2
3
Configurar el servidor web
Usa la función 'Host' de ServBay para acceder al proyecto Symfony a través del servidor web. En la configuración de 'Host' de ServBay, agrega un nuevo host:
- Nombre:
My First Symfony Dev Site
- Dominio:
servbay-symfony-test.local
- Tipo de sitio web:
PHP
- Versión de PHP: selecciona
8.3
- Directorio raíz del sitio web:
/Applications/ServBay/www/servbay-symfony-app/public
Consulta el paso a paso detallado en Agregar el primer sitio web.
Agregar código de ejemplo
Agrega el siguiente código en el archivo config/routes.yaml
para mostrar "Hello ServBay!":
index:
path: /
controller: App\Controller\DefaultController::index
2
3
Agrega el siguiente código en el archivo 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
Acceder al sitio web
Abre un navegador y visita https://servbay-symfony-test.local
, deberías ver la página mostrando Hello ServBay!
.
Ejemplo de base de datos NoSQL
Ejemplo de Memcached
Instalar extensión de Memcached
En ServBay, la extensión de Memcached ya viene preinstalada.
Configurar Memcached
Configura la información de conexión de Memcached en el archivo
.env
:CACHE_DRIVER=memcached MEMCACHED_HOST=127.0.0.1
1
2Agrega el siguiente código en el archivo
config/routes.yaml
:
memcached:
path: /memcached
controller: App\Controller\DefaultController::memcached
2
3
Usar Memcached
Usa la caché en el 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
21Abre un navegador y visita
https://servbay-symfony-test.local/memcached
Ejemplo de Redis
Instalar extensión de Redis
En ServBay, la extensión de Redis ya viene preinstalada.
Configurar Redis
Configura la información de conexión de Redis en el archivo
.env
:REDIS_URL=redis://127.0.0.1:6379
1Agrega el siguiente código en el archivo
config/routes.yaml
:
redis:
path: /redis
controller: App\Controller\DefaultController::redis
2
3
Usar Redis
Usa la caché en el 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
21Abre un navegador y visita
https://servbay-symfony-test.local/redis
Ejemplo de base de datos relacional
Crear estructura de base de datos y archivos de migración
Crear archivo de migración
Usa el Maker Bundle de Symfony para crear un archivo de migración:
bashphp bin/console make:migration
1Editar archivo de migración
Encuentra el nuevo archivo de migración en el directorio
src/Migrations
y edítalo para definir la estructura de la tabla de la base de datos: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
4Ejecutar migración
Usa el comando de Symfony para ejecutar la migración y crear la tabla de la base de datos:
bashphp bin/console doctrine:migrations:migrate
1
Ejemplo de MySQL
Configurar MySQL
Configura la información de conexión de MySQL en el archivo
.env
:DATABASE_URL=mysql://root:[email protected]:3306/servbay_symfony_app
1Agrega el siguiente código en el archivo
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
Escribir datos de usuario
Escribe datos de usuario en el 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
37Abre un navegador y visita
https://servbay-symfony-test.local/mysql-add
yhttps://servbay-symfony-test.local/mysql
Ejemplo de PostgreSQL
Configurar PostgreSQL
Configura la información de conexión de PostgreSQL en el archivo
.env
:DATABASE_URL=pgsql://root:[email protected]:5432/servbay_symfony_app
1Agrega el siguiente código en el archivo
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
Escribir datos de usuario
Escribe datos de usuario en el 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
37Abre un navegador y visita
https://servbay-symfony-test.local/pgsql-add
yhttps://servbay-symfony-test.local/pgsql
Después de seguir estos pasos, has creado y ejecutado exitosamente un proyecto Symfony y utilizado la funcionalidad proporcionada por ServBay para gestionar y acceder a tu proyecto, mientras te conectas a varios tipos de bases de datos y manipulas datos.