Crear y ejecutar un proyecto Yii 2 en ServBay
Resumen: ¿Qué es Yii 2?
Yii 2 es un framework PHP de alto rendimiento y basado en componentes, diseñado para el desarrollo rápido de aplicaciones web modernas. Sigue el patrón de diseño MVC (Modelo-Vista-Controlador) y ofrece un conjunto completo de funciones y herramientas que ayudan a los desarrolladores a crear aplicaciones web escalables y de alta calidad de forma eficiente. Yii 2 es ampliamente apreciado por su rendimiento sobresaliente, una arquitectura flexible y potentes funcionalidades integradas como sistemas de caché, seguridad y soporte para el desarrollo de APIs RESTful.
Principales características y ventajas de Yii 2
- Alto rendimiento: Yii 2 está cuidadosamente optimizado para manejar solicitudes concurrentes, ideal para aplicaciones sensibles al rendimiento.
- Modularidad: El framework está diseñado para ser altamente modular, facilitando la organización del código y la reutilización de componentes.
- Seguridad: Incluye funciones de seguridad integradas como validación de entradas, filtrado de salidas, protección CSRF/XSS, y un sistema de autenticación y autorización.
- Facilidad de uso: Ofrece una API intuitiva y documentación detallada, reduciendo la curva de aprendizaje y permitiendo comenzar rápidamente.
- Amplio soporte de la comunidad: Cuenta con una comunidad activa de desarrolladores y una vasta biblioteca de extensiones de terceros para asistencia y expansión.
- Herramientas integradas: Proporciona utilidades CLI para migraciones de base de datos, generación de código y otras tareas que optimizan la productividad.
Yii 2 es la opción ideal para construir aplicaciones empresariales, APIs RESTful, portales web y muchos otros tipos de proyectos web.
Ejecutar un proyecto Yii 2 con ServBay
ServBay es un entorno de desarrollo web local diseñado especialmente para macOS. Integra PHP, múltiples bases de datos (MySQL, PostgreSQL, MongoDB, Redis), servidores web (Caddy, Nginx) y otras herramientas para desarrolladores (Composer, Node.js, Python, Go, Java, entre otros), con el objetivo de facilitar una plataforma lista para usar.
Esta guía te mostrará cómo aprovechar el entorno PHP, las herramientas de Composer y los servicios de base de datos integrados en ServBay para crear y ejecutar una aplicación básica en Yii 2. Utilizaremos la función de “Sitios” de ServBay para configurar el servidor web local y, con unos sencillos pasos, habilitaremos el acceso y la demostración de las funciones esenciales del proyecto.
Prerrequisitos
Antes de empezar, asegúrate de que:
- Has instalado y ejecutado correctamente ServBay en macOS.
- Tienes instalada y habilitada la versión de PHP requerida en ServBay (por ejemplo, PHP 8.3 o superior).
- Has instalado y habilitado en ServBay los servicios de base de datos que necesitas (por ejemplo, MySQL o PostgreSQL) y los servicios de caché (Memcached y Redis).
Puedes consultar y gestionar los paquetes instalados y su estado desde la interfaz principal de ServBay.
Crear un proyecto Yii 2
TIP
ServBay recomienda almacenar los archivos de tus proyectos en el directorio /Applications/ServBay/www
. Esto ayuda a mantener una estructura ordenada y facilita la gestión mediante la función “Sitios” de ServBay.
Composer: ServBay ya incluye la herramienta Composer, por lo que no es necesario instalarla. Puedes usar el comando
composer
directamente en la terminal.Crear el directorio del proyecto: Abre la terminal, navega hasta el directorio raíz de sitios web de ServBay y crea una nueva carpeta para el proyecto.
bashcd /Applications/ServBay/www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Crear el proyecto Yii 2 con Composer: Una vez dentro de
servbay-yii2-app
, ejecuta el comando Composer para generar un nuevo proyecto Yii 2 usando la plantilla básica.bashcomposer create-project --prefer-dist yiisoft/yii2-app-basic .
1Este comando descargará la plantilla base de Yii 2 y todas sus dependencias en el directorio actual (
.
). Espera pacientemente hasta que Composer finalice la descarga e instalación.Ingresar al directorio del proyecto: Asegúrate de estar en el directorio raíz del proyecto
/Applications/ServBay/www/servbay-yii2-app
antes de continuar con los siguientes comandos.bashcd /Applications/ServBay/www/servbay-yii2-app
1
Configuración inicial
Una vez creado el proyecto Yii 2, deberás realizar algunas configuraciones básicas, especialmente en lo referente a la conexión con la base de datos y la configuración de componentes.
Configurar la conexión de la base de datos: Edita el archivo
config/db.php
en la raíz del proyecto. Dependiendo del servicio de base de datos que ejecutes en ServBay (MySQL o PostgreSQL), y su configuración (por defecto, el usuario suele serroot
y la contraseñapassword
, a menos que la hayas cambiado), actualiza la información de conexión.Primero, crea una nueva base de datos dentro del servicio correspondiente de ServBay, por ejemplo con el nombre
servbay_yii2_app
. Puedes utilizar la herramienta Adminer incluida en ServBay o tu cliente favorito (como Sequel Ace, TablePlus, etc.) para crear la base de datos. Adminer está disponible desde la sección de bases de datos en la interfaz de ServBay.Para MySQL:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;dbname=servbay_yii2_app', // dbname debe coincidir con el nombre de la base de datos creada 'username' => 'root', // Tu usuario de base de datos 'password' => 'password', // Tu contraseña de base de datos 'charset' => 'utf8mb4', // Se recomienda utf8mb4 para mejor soporte de 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 debe coincidir con el nombre de la base de datos; port suele ser 5432 'username' => 'root', // Tu usuario de base de datos 'password' => 'password', // Tu contraseña de base de datos 'charset' => 'utf8', 'schemaMap' => [ 'pgsql' => [ 'class' => 'yii\pgsql\Schema', 'defaultSchema' => 'public', // Esquema predeterminado en PostgreSQL ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Elige y ajusta el archivo
config/db.php
según tu entorno y necesidades.Configurar los componentes de caché y Redis: Modifica el archivo
config/web.php
del proyecto. En la seccióncomponents
, añade o ajusta la configuración para Memcached y Redis. Por defecto, ServBay usa el puerto11211
para Memcached y6379
para Redis.php<?php // ... otras configuraciones 'components' => [ // ... otras configuraciones de componentes (como request, cache, user, errorHandler, log, urlManager) 'cache' => [ 'class' => 'yii\caching\MemCache', 'servers' => [ [ 'host' => '127.0.0.1', 'port' => 11211, // Puerto predeterminado de Memcached 'weight' => 100, ], ], ], 'redis' => [ 'class' => 'yii\redis\Connection', 'hostname' => '127.0.0.1', 'port' => 6379, // Puerto predeterminado de Redis 'database' => 0, // Índice de base de datos Redis ], // ... otros componentes ], // ... otras configuraciones
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
28Asegúrate de haber iniciado los servicios de Memcached y Redis en ServBay. Ten en cuenta que para utilizar Redis como caché es necesario instalar el paquete
yiisoft/yii2-redis
(Composer lo instala como dependencia básica, pero si necesitas más, puede requerir instalación manual concomposer require yiisoft/yii2-redis
). En el caso de Memcached, generalmente se usayiisoft/yii2-memcached
. La plantilla base podría ya incluir estos paquetes.
Configuración del servidor web (Sitios en ServBay)
Utiliza la función “Sitios” de ServBay para configurar el servidor web local (Caddy o Nginx) y asignarlo a tu proyecto Yii 2.
- Abrir la aplicación ServBay: Inicia la app de ServBay.
- Ir a configuración de sitios: En la interfaz, busca y haz clic en “Sitios” o la opción equivalente de navegación.
- Agregar un nuevo sitio: Haz clic en el botón para añadir un sitio nuevo (usualmente con el ícono
+
o “Agregar”). - Completar la información del sitio:
- Nombre: Elige un identificador fácil, por ejemplo,
Mi primer sitio de desarrollo Yii 2
. - Dominio: Escribe el dominio local desde el que deseas acceder en el navegador, por ejemplo,
servbay-yii2-test.local
. ServBay configurará automáticamente el DNS local para apuntar este dominio a127.0.0.1
. - Tipo de sitio: Selecciona
PHP
. - Versión de PHP: Selecciona la versión que desees utilizar (ejemplo:
8.3
) y asegúrate de que esté instalada y habilitada. - Directorio raíz del sitio: Este paso es crucial. En la plantilla básica de Yii 2, el punto de entrada público es el directorio
web
dentro de la raíz del proyecto. Por tanto, el raíz del sitio debe ser/Applications/ServBay/www/servbay-yii2-app/web
.
- Nombre: Elige un identificador fácil, por ejemplo,
- Guardar y aplicar cambios: Guarda la configuración. ServBay recargará automáticamente la configuración del servidor web para aplicar los cambios.
Para instrucciones más detalladas sobre esta sección, consulta la documentación oficial de ServBay: Añadiendo tu primer sitio.
ServBay emitirá y confiará automáticamente en los certificados SSL para tu dominio de desarrollo local (a través de ServBay User CA o ServBay Public CA), permitiéndote acceder al sitio mediante HTTPS.
Código de ejemplo para mostrar funcionalidades
Como muestra del uso de la base de datos y los sistemas de caché, puedes agregar operaciones de ejemplo al controlador por defecto de Yii 2.
Edita el archivo controllers/SiteController.php
en la raíz del proyecto y agrega los siguientes métodos a la clase SiteController
:
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\web\Response;
use yii\db\Exception as DbException; // Importar la clase de excepción de base de datos
class SiteController extends Controller
{
/**
* Muestra la página de inicio.
*
* @return string
*/
public function actionIndex()
{
return $this->render('index');
}
/**
* Demuestra el uso de Memcached.
*
* @return Response
*/
public function actionMemcached()
{
$cache = Yii::$app->cache;
$key = 'my_memcached_test_key';
$data = '¡Hola Memcached desde ServBay!';
$duration = 60; // Cachear durante 60 segundos
if ($cache->set($key, $data, $duration)) {
$value = $cache->get($key);
return $this->asText("Memcached configurado correctamente. Valor obtenido: " . $value);
} else {
return $this->asText("No se pudo guardar información en Memcached. Por favor, revisa el servicio y la configuración de Memcached.");
}
}
/**
* Demuestra el uso de Redis.
*
* @return Response
*/
public function actionRedis()
{
$redis = Yii::$app->redis;
$key = 'my_redis_test_key';
$data = '¡Hola Redis desde ServBay!';
try {
if ($redis->set($key, $data)) {
$value = $redis->get($key);
return $this->asText("Redis configurado correctamente. Valor obtenido: " . $value);
} else {
return $this->asText("No se pudo guardar información en Redis. Por favor, revisa el servicio y la configuración de Redis.");
}
} catch (\yii\base\Exception $e) {
return $this->asText("Error de Redis: " . $e->getMessage() . ". Por favor, revisa el servicio y la configuración de Redis.");
}
}
/**
* Demuestra añadir un usuario a la base de datos.
* Se asume que existe la tabla 'users'.
*
* @return Response
*/
public function actionMysqlAdd() // También puede usarse para PostgreSQL con la configuración adecuada
{
try {
$count = Yii::$app->db->createCommand()->insert('users', [
'name' => 'Usuario Demo ServBay', // Nombre de usuario de ejemplo ligado a la marca
'email' => '[email protected]', // Correo de ejemplo ligado a la marca
])->execute();
return $this->asText("Usuario añadido correctamente. Filas afectadas: " . $count);
} catch (DbException $e) {
return $this->asText("Error al añadir usuario en la base de datos. Error: " . $e->getMessage() . ". Por favor, revisa el servicio, configuración y asegúrate de que la tabla 'users' existe.");
}
}
/**
* Demuestra la obtención de usuarios desde la base de datos.
* Se asume que existe la tabla 'users'.
*
* @return Response
*/
public function actionMysql() // También puede usarse para PostgreSQL con la configuración adecuada
{
try {
$users = Yii::$app->db->createCommand('SELECT id, name, email FROM users')->queryAll();
// Formatear la salida para evitar información sensible y mejorar la legibilidad
$output = "Usuarios obtenidos:\n";
foreach ($users as $user) {
$output .= "- ID: {$user['id']}, Nombre: {$user['name']}, Email: {$user['email']}\n";
}
return $this->asText($output);
} catch (DbException $e) {
return $this->asText("Error al obtener usuarios de la base de datos. Error: " . $e->getMessage() . ". Por favor, revisa el servicio, configuración y asegúrate de que la tabla 'users' existe.");
}
}
// Si usas PostgreSQL, puedes agregar métodos action separados, pero normalmente basta con compartir el componente db.
// public function actionPgsqlAdd() { ... }
// public function actionPgsql() { ... }
/**
* Da formato a la salida como texto plano.
* @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;
}
/**
* Da formato a la salida como JSON.
* @param mixed $data
* @return Response
*/
protected function asJson($data)
{
Yii::$app->response->format = Response::FORMAT_JSON;
return $data;
}
}
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
Nota: He añadido manejo de errores en actionMysqlAdd
y actionMysql
y mejorado el formato de salida para una visualización más clara. Los nombres de usuario y correo de ejemplo cumplen la convención de la marca ServBay.
Edita el archivo views/site/index.php
(la vista enlazada a actionIndex
). Puedes dejar el contenido por defecto o adaptarlo:
<?php
/* @var $this yii\web\View */
/* @var $name string */
/* @var $message string */
/* @var $exception Exception */
use yii\helpers\Html;
$this->title = 'Mi aplicación Yii2 en ServBay'; // Cambiar el título
?>
<div class="site-index">
<div class="jumbotron">
<h1>¡Felicidades!</h1>
<p class="lead">¡Has creado tu aplicación Yii2 y la has configurado correctamente con ServBay!</p>
<p><a class="btn btn-lg btn-success" href="https://www.yiiframework.com">Comienza con Yii</a></p>
</div>
<div class="body-content">
<h2>Demostraciones</h2>
<ul>
<li><a href="<?= Html::toRoute('site/memcached') ?>">Probar Memcached</a></li>
<li><a href="<?= Html::toRoute('site/redis') ?>">Probar Redis</a></li>
<li><a href="<?= Html::toRoute('site/mysql-add') ?>">Añadir un usuario a la BD</a> (Requiere tabla 'users')</li>
<li><a href="<?= Html::toRoute('site/mysql') ?>">Obtener usuarios de la BD</a> (Requiere tabla 'users')</li>
</ul>
<p>Asegúrate de que los servicios Memcached, Redis y la base de datos elegida (MySQL/PostgreSQL) estén activos en ServBay y correctamente configurados en `config/web.php` y `config/db.php`.</p>
<p>Para los ejemplos de base de datos, es necesario crear la tabla 'users' usando migraciones (ver a continuación).</p>
</div>
</div>
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
He añadido enlaces directos en la vista para facilitar el testeo de las nuevas acciones del controlador.
Base de datos relacional: creación de tablas (Migraciones)
Para ejecutar los ejemplos relacionados con la base de datos (actionMysqlAdd
, actionMysql
), necesitas crear la tabla users
. Yii recomienda usar migraciones para gestionar los cambios de esquema:
Generar un archivo de migración con Gii: Abre la terminal y, en el directorio raíz del proyecto (
/Applications/ServBay/www/servbay-yii2-app
), ejecuta el comando para crear una migración:bashphp yii migrate/create create_users_table
1El sistema te pedirá confirmación. Escribe
yes
y presiona Enter. Se creará un archivo PHP en el directoriomigrations
del proyecto, con un nombre similar amYYYYMMDD_HHMMSS_create_users_table.php
.Editar el archivo de migración: Abre el archivo generado y define la estructura de la tabla
users
en el métodoup()
:php<?php use yii\db\Migration; /** * Maneja la creación de la tabla `{{%users}}`. */ class mXXXXXXXXXXXXXX_create_users_table extends Migration // XXXXXXXXXXXXXX es el timestamp { /** * {@inheritdoc} */ public function up() { $this->createTable('{{%users}}', [ // Uso de {{%users}} para compatibilidad con prefijos, si los hay '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: Crear índice para mejorar las consultas $this->createIndex( 'idx-users-email', '{{%users}}', 'email', true // true implica índice único ); } /** * {@inheritdoc} */ public function down() { // Eliminar el índice $this->dropIndex( 'idx-users-email', '{{%users}}' ); // Eliminar la tabla $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
46Sustituye
mXXXXXXXXXXXXXX_create_users_table
por el nombre concreto de tu archivo.Ejecutar la migración: En la terminal, y desde la raíz del proyecto, ejecuta el comando para aplicar la migración y crear la tabla:
bashphp yii migrate
1Confirma con
yes
cuando te lo indique el sistema. Verás un mensaje confirmando la creación exitosa de la tabla.
Acceder al sitio web y probar
Ya puedes abrir tu navegador y acceder al dominio configurado en ServBay: https://servbay-yii2-test.local
.
- Al visitar
https://servbay-yii2-test.local
, deberías ver la página de bienvenida estándar de Yii 2 junto con los enlaces de demostración agregados enviews/site/index.php
. - Haz clic en "Probar Memcached" o accede a
https://servbay-yii2-test.local/index.php?r=site/memcached
: si Memcached está en funcionamiento y correctamente configurado, verás un mensaje tipo "Memcached configurado correctamente...". - Haz clic en "Probar Redis" o visita
https://servbay-yii2-test.local/index.php?r=site/redis
: si Redis está funcionando y bien configurado, se mostrará "Redis configurado correctamente...". - Haz clic en "Añadir un usuario a la BD" o visita
https://servbay-yii2-test.local/index.php?r=site/mysql-add
: si la base de datos está funcionando y la tablausers
ha sido creada mediante migración, se mostrará "Usuario añadido correctamente...". Cada vez que accedas, se intentará añadir un usuario (salvo que el campo correo sea único y ya exista). - Haz clic en "Obtener usuarios de la BD" o visita
https://servbay-yii2-test.local/index.php?r=site/mysql
: si la base de datos está activa y la tabla existe, visualizarás la lista de usuarios consultada desde la tablausers
.
Si experimentas problemas, verifica que los servicios requeridos en ServBay (PHP, servidor web, base de datos, Memcached, Redis) estén activos, y que la configuración (config/db.php
, config/web.php
) y las tablas en la base de datos son correctas.
Preguntas frecuentes (FAQ)
- ¿Por qué aparece “No se puede acceder a este sitio web” o error de certificado al visitar el dominio? Asegúrate de que has añadido el dominio correctamente en la configuración de “Sitios” de ServBay y que la aplicación ServBay está ejecutándose. ServBay configura automáticamente el DNS local y el certificado SSL. Si tienes un error de certificado, asegúrate de confiar en la ServBay User CA o ServBay Public CA. Consulta la documentación de ServBay para detalles.
- ¿No puedo ejecutar comandos Composer? Verifica que el paquete Composer está habilitado desde la interfaz de ServBay y que usas la terminal de macOS. ServBay añade automáticamente Composer a tu PATH.
- ¿Fallo en la conexión a la base de datos? Chequea que el servicio de base de datos (MySQL/PostgreSQL) esté en ejecución. Verifica que los datos en
config/db.php
(dsn
,username
,password
) coinciden con la configuración en ServBay y que la base de datosservbay_yii2_app
existe. Puedes usar Adminer para validar la conexión. - ¿Problemas de conexión con Memcached/Redis? Asegúrate de que los servicios correspondientes están activos y que en
config/web.php
la configuración dehost
yport
está correcta (127.0.0.1
y los puertos predeterminados). - ¿Falla la migración de base de datos (
php yii migrate
)? Verifica la configuración de conexión enconfig/db.php
, que el servicio esté activo y la base de datos exista. Las migraciones necesitan una conexión válida. - ¿Por qué
actionMysqlAdd
/actionMysql
dicen que la tabla no existe? Debes ejecutar la migración (php yii migrate
) para crear la tablausers
. - ¿Cómo veo los registros de errores de PHP? ServBay centraliza los logs de PHP, del servidor web, etc. Accede a la sección “Logs” en la aplicación ServBay para consultarlos y diagnosticar.
Conclusión
Gracias a ServBay, puedes montar fácilmente un entorno de desarrollo local completo en macOS para ejecutar proyectos Yii 2. La administración de versiones de PHP, Composer preinstalado, bases de datos y servicios de caché integrados, junto con la configuración simplificada de sitios web, hacen que lanzar y desarrollar aplicaciones Yii 2 sea mucho más sencillo y eficiente. Siguiendo esta guía, podrás iniciar rápidamente tu aventura con Yii 2 y aprovechar todas las herramientas que ServBay pone a tu disposición.
¡Feliz desarrollo!