Creación y Ejecución de un Proyecto Phalcon
¿Qué es Phalcon?
Phalcon es un framework PHP de alto rendimiento implementado como una extensión en C que ofrece una eficiencia de ejecución excepcional. Emplea la arquitectura MVC (Modelo-Vista-Controlador) y está diseñado para proporcionar a los desarrolladores una experiencia de desarrollo rápida y flexible mientras mantiene un alto rendimiento.
Características y Ventajas Principales de Phalcon
- Alto rendimiento: Dado que Phalcon está implementado como una extensión en C, ofrece un rendimiento excepcional.
- Rica funcionalidad: Incluye ORM, motor de plantillas, enrutamiento, caché, colas, entre otros, para satisfacer diversas necesidades de desarrollo.
- Bajo consumo de memoria: Debido a su enfoque único, Phalcon tiene un consumo de memoria muy bajo en tiempo de ejecución.
- Facilidad de uso: Proporciona una API simple y documentación clara para ayudar a los desarrolladores a comenzar rápidamente.
- Diseño modular: Puede seleccionar y usar diferentes componentes según se necesite, ofreciendo una gran flexibilidad.
Phalcon es una opción ideal para construir aplicaciones web de alto rendimiento y APIs, adecuada para proyectos que van desde aplicaciones pequeñas hasta sistemas empresariales a gran escala.
Creación y Ejecución de un Proyecto Phalcon con ServBay
En este artículo, usaremos el entorno PHP proporcionado por ServBay para crear y ejecutar un proyecto Phalcon. Utilizaremos la función 'host' de ServBay para configurar el servidor web y acceder al proyecto mediante una configuración sencilla.
WARNING
Nota: Si alguna vez has sido usuario de NGINX o Apache
Por defecto, ServBay utiliza Caddy como servidor web. Para los usuarios que migran de NGINX y Apache a ServBay, hay algunos puntos clave a considerar:
Configuración de Caddy
ServBay ya incluye Caddy y su configuración predeterminada está optimizada y probada. Los desarrolladores solo necesitan gestionar los sitios web mediante la función 'host' de ServBay, 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 reglas de reescritura y archivos .htaccess para manejar la reescritura de URL y otras configuraciones. Sin embargo, ServBay ya tiene preconfiguradas las reglas de Caddy, por lo que, a menos que haya una necesidad especial, los desarrolladores no necesitan escribir estas reglas por sí mismos.
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.
DANGER
Nota: Activación del módulo Phalcon
ServBay incluye el módulo Phalcon preinstalado y los usuarios necesitan activarlo y reiniciar PHP. Consulta Cómo activar el módulo Phalcon incluido en ServBay para activar el módulo Phalcon.
Diferentes Versiones de Phalcon y DevTools
Dependiendo de la versión de PHP, necesitarás instalar una versión diferente de Phalcon DevTools:
- PHP 5.6, 7.0, 7.1: Phalcon 3.4.5
- Versión correspondiente de Phalcon DevTools:
3.4.x
- Versión correspondiente de Phalcon DevTools:
- PHP 7.2, 7.3, 7.4: Phalcon 4.1.2
- Versión correspondiente de Phalcon DevTools:
4.3.x
- Versión correspondiente de Phalcon DevTools:
- PHP 8.0, 8.1, 8.2, 8.3, 8.4: Phalcon 5.7.0
- Versión correspondiente de Phalcon DevTools:
5.0.x
(recomendada versión fija debido a soporte limitado oficial para PHP 8.x)
- Versión correspondiente de Phalcon DevTools:
Creación de un Proyecto Phalcon
TIP
ServBay sugiere a los desarrolladores colocar el sitio web en el directorio /Applications/ServBay/www
para facilitar su administración.
Instalar Composer
ServBay incluye Composer preinstalado, por lo que no es necesario instalarlo por separado.
Crear el Directorio del Proyecto
Crear el directorio del proyecto e ingresar a él:
bashcd /Applications/ServBay/www mkdir servbay-phalcon-app cd servbay-phalcon-app
1
2
3Instalar Phalcon DevTools
Instala la versión correspondiente de Phalcon DevTools según la versión de PHP:
PHP 5.6, 7.0, 7.1:
bashcomposer require phalcon/devtools:"^3.4"
1PHP 7.2, 7.3, 7.4:
bashcomposer require phalcon/devtools:"~4.1"
1PHP 8.0, 8.1, 8.2, 8.3, 8.4:
Crear archivo
composer.json
, con el siguiente contenido:
{
"repositories": [
{
"url": "https://github.com/daleffe/phalcon-devtools-5.x-fixed.git",
"type": "git"
}
],
"require": {
"phalcon/devtools": "dev-master"
},
"minimum-stability": "dev",
"prefer-stable": true
}
2
3
4
5
6
7
8
9
10
11
12
13
Luego ejecuta:
composer update
Crear Proyecto Phalcon
Usar Phalcon DevTools para crear un nuevo proyecto Phalcon:
bashvendor/bin/phalcon project servbay-phalcon-app
1Ingresar al Directorio del Proyecto
Ingresar al directorio del nuevo proyecto Phalcon:
bashcd servbay-phalcon-app
1
Configuración Inicial
Configurar Variables de Entorno
Configura la información de conexión a la base de datos y otras variables de entorno en el archivo
app/config/config.php
. Asegúrate de que la configuración sea correcta:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], ]);
1
2
3
4
5
6
7
8
9
Configurar el Servidor Web
Usar la función ‘host’ de ServBay para acceder al proyecto Phalcon. En la configuración ‘host’ de ServBay, agrega un nuevo host:
- Nombre:
My First Phalcon Dev Site
- Dominio:
servbay-phalcon-test.local
- Tipo de Sitio:
PHP
- Versión de PHP: Selecciona la versión correspondiente de PHP
- Directorio Raíz del Sitio:
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/public
Consulta los pasos detallados en Agregar el Primer Sitio Web.
Agregar Código de Ejemplo
En el archivo app/config/routes.php
agrega el siguiente código para mostrar "Hello ServBay!":
$router->add(
'/',
[
'controller' => 'index',
'action' => 'index',
]
);
2
3
4
5
6
7
En el archivo app/controllers/IndexController.php
agrega el siguiente código:
namespace App\Controllers;
use Phalcon\Mvc\Controller;
class IndexController extends Controller
{
public function indexAction()
{
echo 'Hello ServBay!';
}
}
2
3
4
5
6
7
8
9
10
11
Acceder al Sitio Web
Abre el navegador web y visita https://servbay-phalcon-test.local
, verás que la página muestra Hello ServBay!
.
Ejemplo con Base de Datos NoSQL
Ejemplo con Memcached
Instalar la Extensión Memcached
En ServBay, la extensión Memcached ya está preinstalada, no necesitas instalarla adicionalmente.
Configurar Memcached
Agregar información de conexión Memcached en el archivo
app/config/config.php
:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], 'cache' => [ 'adapter' => 'Memcached', 'host' => '127.0.0.1', 'port' => 11211, ], ]);
1
2
3
4
5
6
7
8
9
10
11
12
13
14Configurar Rutas
En el archivo
app/config/routes.php
agrega el siguiente código:php$router->add( '/memcached', [ 'controller' => 'index', 'action' => 'memcached', ] );
1
2
3
4
5
6
7Usar Memcached
En el controlador, usa la caché:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Cache\Backend\Memcached; use Phalcon\Cache\Frontend\Data as FrontData; class IndexController extends Controller { public function memcachedAction() { $frontCache = new FrontData([ 'lifetime' => 86400 ]); $cache = new Memcached($frontCache, [ 'host' => '127.0.0.1', 'port' => 11211, ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->get($cacheKey); if ($cachedData === null) { $cachedData = 'Hello Memcached!'; $cache->save($cacheKey, $cachedData); } echo $cachedData; } }
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
30Abre el navegador web y visita
https://servbay-phalcon-test.local/memcached
Ejemplo con Redis
Instalar la Extensión Redis
En ServBay, la extensión Redis ya está preinstalada, no necesitas instalarla adicionalmente.
Configurar Redis
Agregar información de conexión Redis en el archivo
app/config/config.php
:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], 'cache' => [ 'adapter' => 'Redis', 'host' => '127.0.0.1', 'port' => 6379, ], ]);
1
2
3
4
5
6
7
8
9
10
11
12
13
14Configurar Rutas
En el archivo
app/config/routes.php
agrega el siguiente código:php$router->add( '/redis', [ 'controller' => 'index', 'action' => 'redis', ] );
1
2
3
4
5
6
7Usar Redis
En el controlador, usa la caché:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Cache\Backend\Redis; use Phalcon\Cache\Frontend\Data as FrontData; class IndexController extends Controller { public function redisAction() { $frontCache = new FrontData([ 'lifetime' => 86400 ]); $cache = new Redis($frontCache, [ 'host' => '127.0.0.1', 'port' => 6379, ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->get($cacheKey); if ($cachedData === null) { $cachedData = 'Hello Redis!'; $cache->save($cacheKey, $cachedData); } echo $cachedData; } }
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
30Abre el navegador web y visita
https://servbay-phalcon-test.local/redis
Ejemplo con Bases de Datos Relacionales
Crear Estructura de la Base de Datos y Archivos de Migración
Crear Archivos de Migración
Usa Phalcon DevTools para crear archivos de migración:
bashvendor/bin/phalcon migration generate --directory=servbay-phalcon-app
1Editar Archivos de Migración
En el directorio
migrations
, crea un nuevo archivo de migración y edítalo para definir la estructura de la tabla:phpuse Phalcon\Db\Column; use Phalcon\Db\Index; use Phalcon\Migrations\Mvc\Model\Migration; class UsersMigration_100 extends Migration { public function morph() { $this->morphTable('users', [ 'columns' => [ new Column( 'id', [ 'type' => Column::TYPE_INTEGER, 'autoIncrement' => true, 'notNull' => true, 'primary' => true, ] ), new Column( 'name', [ 'type' => Column::TYPE_VARCHAR, 'size' => 255, 'notNull' => true, ] ), new Column( 'email', [ 'type' => Column::TYPE_VARCHAR, 'size' => 255, 'notNull' => true, 'unique' => true, ] ), ], 'indexes' => [ new Index('PRIMARY', ['id'], 'PRIMARY'), new Index('email_UNIQUE', ['email'], 'UNIQUE'), ], ]); } }
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
44Ejecutar Migración
Usa el comando de Phalcon DevTools para ejecutar la migración y crear la tabla en la base de datos:
bashvendor/bin/phalcon migration run --directory=servbay-phalcon-app
1
Ejemplo con MySQL
Configurar MySQL
Configura la información de conexión a MySQL en el archivo
app/config/config.php
:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], ]);
1
2
3
4
5
6
7
8
9Configurar Rutas
En el archivo
app/config/routes.php
agrega el siguiente código:php$router->add( '/mysql-add', [ 'controller' => 'index', 'action' => 'mysqlAdd', ] ); $router->add( '/mysql', [ 'controller' => 'index', 'action' => 'mysql', ] );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Agregar Datos de Usuario
En el controlador, agrega datos de usuario:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Db\Adapter\Pdo\Mysql; class IndexController extends Controller { public function mysqlAddAction() { $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ]); $success = $connection->insert( 'users', ['ServBay', '[email protected]'], ['name', 'email'] ); echo $success ? 'User added' : 'Failed to add user'; } public function mysqlAction() { $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ]); $users = $connection->fetchAll('SELECT * FROM users', \Phalcon\Db\Enum::FETCH_ASSOC); echo 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
37
38
39Abre el navegador web y visita
https://servbay-phalcon-test.local/mysql-add
yhttps://servbay-phalcon-test.local/mysql
Ejemplo con PostgreSQL
Configurar PostgreSQL
Configura la información de conexión a PostgreSQL en el archivo
app/config/config.php
:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Postgresql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], ]);
1
2
3
4
5
6
7
8
9Configurar Rutas
En el archivo
app/config/routes.php
agrega el siguiente código:php$router->add( '/pgsql-add', [ 'controller' => 'index', 'action' => 'pgsqlAdd', ] ); $router->add( '/pgsql', [ 'controller' => 'index', 'action' => 'pgsql', ] );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Agregar Datos de Usuario
En el controlador, agrega datos de usuario:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Db\Adapter\Pdo\Postgresql; class IndexController extends Controller { public function pgsqlAddAction() { $connection = new Postgresql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ]); $success = $connection->insert( 'users', ['ServBay', '[email protected]'], ['name', 'email'] ); echo $success ? 'User added' : 'Failed to add user'; } public function pgsqlAction() { $connection = new Postgresql([ 'host' => '127.0.0.1', 'username' => 'root
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