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 funcionalidades y herramientas para ayudar a los desarrolladores a construir aplicaciones web escalables y de alta calidad de manera eficiente. Yii 2 es reconocido por su excelente desempeño, arquitectura flexible y potentes características integradas, incluyendo soporte para sistemas de caché, seguridad y 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, lo que facilita la organización del código y la reutilización de componentes.
- Seguridad: Incluye múltiples características de seguridad, como validación de entradas, filtrado de salidas, protección CSRF/XSS y un framework de autenticación y autorización.
- Facilidad de uso: Proporciona una API intuitiva y documentación exhaustiva, haciendo que la curva de aprendizaje sea baja y permitiendo a los desarrolladores comenzar rápidamente.
- Gran comunidad de apoyo: Cuenta con una comunidad activa de desarrolladores y una gran variedad de extensiones de terceros; es fácil encontrar ayuda cuando surgen problemas.
- Herramientas integradas: Ofrece utilidades de línea de comandos para tareas como migraciones de base de datos y generación de código, mejorando la eficiencia del desarrollo.
Yii 2 es una opción ideal para construir aplicaciones empresariales, APIs RESTful, portales web y muchos otros tipos de proyectos web.
Ejecutar un proyecto Yii 2 en ServBay
ServBay es un entorno de desarrollo web local diseñado específicamente para macOS y Windows. Integra PHP, bases de datos como MySQL, PostgreSQL, MongoDB, Redis; servidores web (Caddy, Nginx) y otras herramientas esenciales para el desarrollador (Composer, Node.js, Python, Go, Java, entre otros), ofreciendo una plataforma lista para usar.
Esta guía le mostrará cómo crear y ejecutar una aplicación básica Yii 2 usando los servicios PHP, Composer y base de datos provistos por ServBay. Utilizaremos la función “Sitio web” para configurar el servidor web local y acceder fácilmente al proyecto, demostrando las funcionalidades básicas en pocos pasos.
Requisitos previos
Antes de comenzar, asegúrese de:
- Haber instalado y ejecutado ServBay correctamente en macOS o Windows.
- Tener instalada y habilitada la versión de PHP que necesita en ServBay (por ejemplo, PHP 8.3 o superior).
- Haber instalado y activado los servicios de base de datos (como MySQL o PostgreSQL) y de caché (Memcached y Redis) que desea usar en ServBay.
Puede gestionar y revisar el estado de los paquetes y servicios desde la interfaz principal de ServBay.
Crear un proyecto Yii 2
TIP
ServBay recomienda almacenar sus archivos de proyecto en los siguientes directorios. Esto ayuda a mantener la estructura organizada y facilita la gestión desde la función “Sitio web” de ServBay:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Composer: ServBay incluye Composer de forma integrada, así que no necesita instalarlo por separado. Puede utilizar el comando
composer
directamente desde la terminal.Crear el directorio del proyecto: Abra la terminal, navegue al directorio raíz recomendado y cree una nueva carpeta para el proyecto.
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
3Crear proyecto Yii 2 usando Composer: Dentro de la carpeta
servbay-yii2-app
, ejecute el siguiente comando para instalar la plantilla de aplicación básica de Yii 2.bashcomposer create-project --prefer-dist yiisoft/yii2-app-basic .
1Este comando descargará la estructura base de Yii 2 y todas las dependencias necesarias en el directorio actual (
.
). Espere mientras Composer completa el proceso.Ingresar al directorio del proyecto: Asegúrese de estar situado en el directorio raíz del proyecto antes de continuar.
macOS:
bashcd /Applications/ServBay/www/servbay-yii2-app
1Windows:
cmdcd C:\ServBay\www\servbay-yii2-app
1
Configuración inicial
Después de la instalación, realice algunas configuraciones básicas, especialmente en la conexión a la base de datos y componentes adicionales.
Configurar la conexión a la base de datos: Edite el archivo
config/db.php
en la raíz del proyecto, ajustando la información de conexión según el servicio de base de datos que ejecuta en ServBay (MySQL o PostgreSQL) y su configuración (normalmente usuarioroot
y contraseñapassword
, a menos que lo haya modificado).Primero, cree una nueva base de datos para el proyecto en ServBay, por ejemplo llamada
servbay_yii2_app
. Puede realizar esto usando Adminer integrado en ServBay o alguna herramienta de preferencia (Sequel Ace, TablePlus, etc.). Adminer está disponible desde la sección de bases de datos en la aplicación 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 su base de datos 'username' => 'root', // Usuario de la base de datos 'password' => 'password', // Contraseña de la base de datos 'charset' => 'utf8mb4', // Recomendada para mayor 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 su base de datos, puerto usualmente 5432 'username' => 'root', // Usuario de la base de datos 'password' => 'password', // Contraseña de la 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
15Ajuste el archivo
config/db.php
según sus necesidades reales.Configurar componentes de caché y Redis: Modifique el archivo
config/web.php
en la raíz del proyecto agregando o actualizando la seccióncomponents
para Memcached y Redis. Por defecto, Memcached en ServBay usa el puerto11211
, y Redis el6379
.php<?php // ... otras configuraciones 'components' => [ // ... otros componentes existentes (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úrese de tener activos los servicios Memcached y Redis en ServBay. Recuerde que usar Redis como caché requiere el paquete
yiisoft/yii2-redis
(Composer instala lo básico encreate-project
, aunque puede requerircomposer require yiisoft/yii2-redis
manualmente si necesita funcionalidad extra). Para Memcached, se empleayiisoft/yii2-memcached
, y la plantilla básica suele incluir ambas dependencias.
Configuración del servidor web (Sitio web en ServBay)
Utilice la función “Sitio web” de ServBay para organizar el servidor web local (Caddy o Nginx) apuntando al directorio correcto del proyecto Yii 2.
- Abra la aplicación ServBay.
- Navegue a configuración de sitio web: Dentro de ServBay, busque y haga clic en la sección “Sitio web” o similar.
- Agregue un sitio nuevo: Haga clic en el botón para agregar nuevo sitio (suele aparecer como
+
oAgregar
). - Complete la información del sitio:
- Nombre: Defina un nombre identificable, como
Mi Primer Sitio Yii 2
. - Dominio: Escriba el dominio para acceder al sitio en su navegador, por ejemplo
servbay-yii2-test.local
. ServBay lo apuntará a127.0.0.1
mediante DNS local. - Tipo de sitio: Seleccione
PHP
. - Versión de PHP: Elija la versión instalada y activa que desee (ejemplo
8.3
). - Directorio raíz del sitio: Es fundamental. En el proyecto básico de Yii 2, el punto de entrada es la carpeta
web
en la raíz del proyecto. Configure el directorio:- macOS:
/Applications/ServBay/www/servbay-yii2-app/web
- Windows:
C:\ServBay\www\servbay-yii2-app\web
- macOS:
- Nombre: Defina un nombre identificable, como
- Guarde y aplique: Al guardar, ServBay recargará automáticamente la configuración del servidor web para habilitar el sitio.
Puede consultar documentación oficial de ServBay para detalles: Agregar el primer sitio web.
ServBay otorgará y confiará automáticamente el certificado SSL para su desarrollo local (usando ServBay User CA o ServBay Public CA), permitiendo acceder por HTTPS.
Agregar código de ejemplo para demostraciones
Para mostrar el funcionamiento con base de datos y caché, añada métodos de ejemplo en el controlador principal.
Edite el archivo controllers/SiteController.php
en la raíz del proyecto e incorpore los siguientes métodos en la clase SiteController
:
php
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\web\Response;
use yii\db\Exception as DbException; // Importar clase de excepción de base de datos
class SiteController extends Controller
{
/**
* Muestra la página principal.
*
* @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 por 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 el dato en Memcached. Verifique el servicio y 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 el dato en Redis. Verifique el servicio y configuración de Redis.");
}
} catch (\yii\base\Exception $e) {
return $this->asText("Error de Redis: " . $e->getMessage() . ". Verifique el servicio y configuración de Redis.");
}
}
/**
* Demuestra cómo agregar un usuario a la base de datos.
* Se asume que la tabla 'users' existe.
*
* @return Response
*/
public function actionMysqlAdd() // Útil también para PostgreSQL con configuración correcta
{
try {
$count = Yii::$app->db->createCommand()->insert('users', [
'name' => 'Usuario Demo de ServBay', // Nombre de ejemplo según la marca
'email' => 'demo-user@servbay.test', // Correo de ejemplo según la marca
])->execute();
return $this->asText("Usuario agregado correctamente. Filas afectadas: " . $count);
} catch (DbException $e) {
return $this->asText("Error al agregar usuario en la base de datos: " . $e->getMessage() . ". Verifique el servicio, la configuración y que la tabla 'users' exista.");
}
}
/**
* Demuestra cómo consultar usuarios desde la base de datos.
* Se asume que la tabla 'users' existe.
*
* @return Response
*/
public function actionMysql() // Útil también para PostgreSQL con configuración correcta
{
try {
$users = Yii::$app->db->createCommand('SELECT id, name, email FROM users')->queryAll();
// Presentación más clara, evita mostrar campos sensibles o formato desordenado
$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 consultar usuarios en la base de datos: " . $e->getMessage() . ". Verifique el servicio, la configuración y que la tabla 'users' exista.");
}
}
// Si utiliza PostgreSQL puede agregar métodos específicos, pero normalmente basta el componente db
// public function actionPgsqlAdd() { ... }
// public function actionPgsql() { ... }
/**
* Formatea 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;
}
/**
* Formatea la salida 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
Observe que en los métodos actionMysqlAdd
y actionMysql
se ha mejorado el manejo de errores y la presentación para mayor claridad, utilizando un nombre y correo de ejemplo acordes al branding de ServBay.
Edite también el archivo views/site/index.php
, la vista correspondiente al método actionIndex
. Puede mantener el contenido predeterminado o personalizarlo:
php
<?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'; // Título actualizado
?>
<div class="site-index">
<div class="jumbotron">
<h1>¡Felicidades!</h1>
<p class="lead">¡Ha creado su aplicación Yii2 y la ha configurado exitosamente en ServBay!</p>
<p><a class="btn btn-lg btn-success" href="https://www.yiiframework.com">Empiece 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') ?>">Agregar usuario a la BD</a> (requiere la tabla 'users')</li>
<li><a href="<?= Html::toRoute('site/mysql') ?>">Consultar usuarios en la BD</a> (requiere la tabla 'users')</li>
</ul>
<p>Asegúrese de que los servicios Memcached, Redis y la base de datos de su elección (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 de Yii (vea más abajo).</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
La vista ahora contiene enlaces para probar las acciones nuevas.
Base de datos relacional: creación de la tabla (Migraciones)
Para ejecutar los ejemplos de base de datos (actionMysqlAdd
, actionMysql
), debe crear la tabla users
en la base de datos. Yii recomienda usar migraciones para administrar los cambios en la estructura.
Cree el archivo de migración con Gii: Desde la terminal, en la raíz del proyecto, ejecute el siguiente comando para generar el archivo de migración.
Ruta raíz del proyecto:
- macOS:
/Applications/ServBay/www/servbay-yii2-app
- Windows:
C:\ServBay\www\servbay-yii2-app
bashphp yii migrate/create create_users_table
1Al confirmarlo con
yes
, se generará el archivo PHP en la carpetamigrations
, con nombre similar amYYYYMMDD_HHMMSS_create_users_table.php
.- macOS:
Edite el archivo de migración: Abra el archivo y defina 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}}', [ // {{%users}} apoya prefijo de tabla si se configura '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 búsquedas $this->createIndex( 'idx-users-email', '{{%users}}', 'email', true // true indica índice único ); } /** * {@inheritdoc} */ public function down() { // Eliminar índice $this->dropIndex( 'idx-users-email', '{{%users}}' ); // Eliminar 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
46Reemplace
mXXXXXXXXXXXXXX_create_users_table
por el nombre real del archivo generado.Ejecute la migración: Desde la terminal, en la raíz del proyecto, corra el comando para aplicar la migración y crear la tabla.
bashphp yii migrate
1Confirme con
yes
cuando se le solicite. Verá un mensaje indicando la creación exitosa de la tabla.
Acceda al sitio y pruebe la instalación
Ahora puede abrir su navegador y visitar el dominio que configuró en ServBay: https://servbay-yii2-test.local
.
- Acceda a
https://servbay-yii2-test.local
: Debería ver la página de bienvenida de la aplicación Yii 2 y los enlaces de demostración agregados. - Haga clic en "Probar Memcached" o visite
https://servbay-yii2-test.local/index.php?r=site/memcached
: Si Memcached está activo y bien configurado, verá el mensaje de éxito relacionado. - Haga clic en "Probar Redis" o visite
https://servbay-yii2-test.local/index.php?r=site/redis
: Si Redis está funcionando y configurado, también verá la confirmación correspondiente. - Haga clic en "Agregar usuario a la BD" o ingrese a
https://servbay-yii2-test.local/index.php?r=site/mysql-add
: Si la base de datos es accesible y la tablausers
fue creada correctamente, recibirá un mensaje de éxito. Cada vez que acceda agregará un usuario (en caso de que el campo email sea único, pueden surgir restricciones). - Haga clic en "Consultar usuarios en la BD" o visite
https://servbay-yii2-test.local/index.php?r=site/mysql
: Si todo está correcto, verá la lista de usuarios almacenados en la tabla.
Si encuentra algún inconveniente, revise que todos los servicios (PHP, el servidor web, base de datos, Memcached, Redis) estén activos, que sus archivos config/db.php
y config/web.php
estén bien configurados y que la tabla en la base de datos fue creada exitosamente.
Preguntas frecuentes (FAQ)
- ¿Por qué no puedo acceder al dominio o me aparece un error de certificado? Verifique que ha añadido el dominio correctamente en la configuración de “Sitio web” y que la aplicación ServBay está en ejecución. ServBay configura DNS local y certificados SSL automáticamente. Si hay errores de certificados, asegúrese de haber confiado en ServBay User CA o ServBay Public CA; vea la documentación de ServBay para los pasos concretos.
- ¿No se ejecutan los comandos de Composer? Confirme que habilitó Composer en la interfaz de ServBay y que está usando la terminal correcta (macOS). ServBay configura automáticamente el PATH para Composer.
- ¿Conexión a base de datos fallida? Cheque que el servicio correspondiente (MySQL/PostgreSQL) está activo. Verifique en
config/db.php
los parámetrosdsn
,username
,password
y que la base de datosservbay_yii2_app
fue creada. Puede verificarlo con Adminer en ServBay. - ¿Error de conexión con Memcached o Redis? Cheque que los servicios están activos y revise en
config/web.php
el host (127.0.0.1
) y el puerto correspondiente. - ¿Falla de migración (
php yii migrate
)? Asegúrese de que la configuración deconfig/db.php
es correcta y la base de datos está activa. Las migraciones requieren conexión válida. - ¿Por qué los métodos
actionMysqlAdd
/actionMysql
indican que la tabla no existe? Debe ejecutar la migración conphp yii migrate
para crear la tabla 'users'. - ¿Dónde revisar el log de errores de PHP? ServBay centraliza los logs de PHP, servidor web, etc. Revise la sección “Log” en la interfaz de ServBay para diagnósticos detallados.
Resumen
Con ServBay puede crear fácilmente un entorno de desarrollo local completo en macOS y Windows para ejecutar proyectos Yii 2. ServBay simplifica el proceso gracias a Composer integrado, gestión de versiones de PHP, bases de datos y caché listas para usar y herramientas intuitivas para la configuración de sitios web. Si sigue esta guía, podrá comenzar rápidamente con su desarrollo en Yii 2, aprovechando la eficiencia y robustez que ServBay proporciona.
¡Felices desarrollos!