Phalcon un framework PHP MVC diferente

Phalcon
Solucionex
22
Ago 25

Dentro de la variedad de los frameworks MVC para PHP que tenemos actualmente, Phalcon se diferencia de los demás al estar creado como una extensión de PHP escrita en C, lo cual le ofrece un rendimiento mayor que el del resto de frameworks PHP.

En cuanto a las funcionalidades que ofrece tenemos las habituales de los frameworks MVC a los que estamos acostumbrados, inyección de dependencias, motor de plantillas, ORM, gestión de roles y permisos, etc.

Es conveniente indicar que las razones para elegir este framework son pocas dado que no cuenta con una comunidad grande como pueda ser Symfony o Laravel, la documentación es bastante deficiente y si estás ante una aplicación web en la que el rendimiento es crítico probablemente quieras utilizar algo como Rust o Go, aún así si estás atado a algún paquete que solo está para PHP y necesitas exprimirlo al máximo este es el nicho de Phalcon.

Instalación

La instalación de Phal poco diferente dado que es una extensión de PHP, los detalles completos de la instalación están aquí.

El método preferido de instalación es PECL.

pecl channel-update pecl.php.net
pecl install phalcon

Es recomendable instalar las DevTools de Phalcon para desarrollar.

composer require phalcon/devtools:"^5.0@dev" --dev

Y ahora podemos usarlas para crear un nuevo proyecto.

phalcon create-project <nombre_proyecto>

Lo cual nos creara la estructura de carpetas del proyecto, y nos cargará las configuraciones básicas.

Ejemplo sencillo

Con un Dockerfile así.

FROM php:8.4-apache

ARG UID=1000
ARG GID=1000

RUN apt update \
   && apt install -y git

RUN docker-php-ext-install pdo pdo_mysql
RUN a2enmod rewrite

RUN pecl channel-update pecl.php.net
RUN pecl install phalcon

COPY 50-phalcon.ini /usr/local/etc/php/conf.d/

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer global require phalcon/devtools:"^5.0@dev" --dev

ENV PATH="$PATH:/root/.composer/vendor/bin"
RUN chown -R $UID:$GID /root

Un fichero de nombre 50-phalcon.ini en el mismo directorio con el siguiente contenido.

extension=phalcon.so

Y un compose.yaml así, Nótese que en este caso el nombre del proyecto es example.

services:
 php:
   build:
     dockerfile: .docker/Dockerfile
     args:
       - UID=${UID:-1000}
       - GID=${GID:-1000}
   user: ${UID:-1000}:${GID:-1000}
   ports:
     - 80:80
   volumes:
     - ./example:/var/www/html
   depends_on:
     - db
 db:
   image: mariadb:10.6
   user: ${UID:-1000}:${GID:-1000}
   ports:
     - 3306:3306
   volumes:
     - ./db/data:/var/lib/mysql
   environment:
     - MARIADB_ROOT_PASSWORD=root

Vamos a crear una tabla sencilla en nuestra base de datos

CREATE TABLE `test`.`post` (
 `id` INT NOT NULL AUTO_INCREMENT,
 `title` VARCHAR(50) NOT NULL,
 `content` TEXT NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE (`id`) );

Y a continuación crearemos el modelo con las devtools, recuerda que en este caso el host de la base de datos es db y hay que cambiarlo en app/config/config.php

phalcon model post

Al crear el proyecto con las devtools ya estará creado el controlador para el index, un plantilla index.phtml así como el motor de plantillas Volt configurado, podemos eliminar la plantilla index.phtml y crear un fichero index.volt

En nuestro caso vamos a utilizar un nuevo controlador app/controller/PostController.php

<?php
declare(strict_types=1);
class PostController extends ControllerBase
{
   public function indexAction()
   {
       $this->view->posts = Post::find();
   }
}

Con la vista app/view/post/index.volt

{% for post in posts %}
 <div>
   <h2>{{ post.title }}</h2>
   <p>{{ post.content }}</p>
 </div>
{% endfor %}

Y así tendríamos un ejemplo básico que nos permitiría arrancar el desarrollo de una aplicación Phalcon.

php