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 phalconEs recomendable instalar las DevTools de Phalcon para desarrollar.
composer require phalcon/devtools:"^5.0@dev" --devY 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 /rootUn fichero de nombre 50-phalcon.ini en el mismo directorio con el siguiente contenido.
extension=phalcon.soY 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=rootVamos 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 postAl 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.