Un framework full-stack de PHP entregado como una extensión de C

¡Su innovadora arquitectura hace de Phalcon el framework PHP más rápido jamás construido!

Los desarrolladores no necesitan conocer el lenguaje C para usar Phalcon. Su funcionalidad está expuesta como clases PHP bajo el espacio de nombres Phalcon, y está listo para ser usado.
Características
  • Baja sobrecarga
  • ORM
  • PHQL
  • Transacciones
  • Caché
  • Vistas y frontend
  • Motores de Plantillas
  • Motor de plantillas (Volt)
  • i18n
  • Constructor de Formularios
  • Mensajes Flash

  • Baja sobrecarga
    Bajo consumo de memoria y CPU en comparación con los frameworks tradicionales
  • MVC y HMVC
    Módulos, componentes, modelos, vistas y controladores
  • Inyección de Dependencias
    La Inyección de Dependencias y la ubicación de servicios es en sí mismo un contenedor para ellos.
  • Rest
    En este caso, puedes utilizar una micro aplicación o una aplicación full stack para cumplir tu objetivo. Además, un potente conjunto de ayudantes HTTP.
  • Cargador automático
    Proporciona el mecanismo de carga automática de clases PHP siguiendo el estándar de recomendaciones PSR-4.
  • Router
    Phalcon\Mvc\Router proporciona capacidades avanzadas de enrutamiento.
Baja sobrecarga
Extensión PHP en C (Phalcon)
  • Las extensiones en Zephir/C son cargadas con PHP una sola vez cuando inicia el servidor web
  • Las clases y funciones proporcionadas por la extensión están listas para usarse en cualquier aplicación
  • El código es compilado y no es interpretado porque ya está compilado previamente para una plataforma y procesador específico
  • Gracias a las optimizaciones y arquitectura de bajo nivel, Phalcon tiene una de las sobre cargas mas bajas para aplicaciones basadas en MVC
MVC
Construir aplicaciones individuales y aplicaciones de varios módulos es algo de suma facilidad y placer. Utilizando la estructura de archivos, esquema y patrones que ya conoces.
                        
single/
    app/
        controllers/
        models/
        views/
    public/
        css/
        img/
        js/

                        
                    
                        
multiple/
     apps/
       frontend/
          controllers/
          models/
          views/
          Module.php
       backend/
          controllers/
          models/
          views/
          Module.php
       public/
       ../
                        
                    
Inyección de Dependencias
Phalcon está construido sobre un potente diseño, llamado Inyección de Dependencias, que es fácil de entender y usar. Inicializa o define servicios una vez y utilízalos prácticamente en cualquier lugar de la aplicación.
                        
// Crear el contenedor de Inyector de Dependencias (DI)
$di = new Phalcon\DI();

// Registro de clases, funciones, componentes
$di->set("request", new Phalcon\Http\Request());

..

// Usalo en cualquier otro lugar del código
$request = $di->getShared('request');
                        
                    
Servicios RESTful
Escribir servidores y aplicaciones REST (Representational State Transfer) nunca ha sito tan fácil. Sin complicaciones. Los servicios simples caben en un solo archivo.
                        
use Phalcon\Mvc\Micro;

$app = new Micro();

// Devolver datos en JSON
$app->get(
    '/check/status',
    function () {
        return $this
            ->response
            ->setJsonContent(
                [
                    'status' => 'important',
                ]
            )
        ;
    }
);

$app->handle();
                        
                    
Autoloader
Registra espacios de nombres, prefijos, directorios o clases. Aprovecha las ventajas de los eventos del auto cargador y mantén el control total sobre qué archivos se cargan y desde donde.
                        
use Phalcon\Loader;

// Crea el auto cargador
$loader = new Loader();

// Registrar algunos espacios de nombres
$loader->registerNamespaces(
    [
       'Example\Base'    => 'vendor/example/base/',
       'Example\Adapter' => 'vendor/example/adapter/',
       'Example'         => 'vendor/example/',
    ]
);

// Registrar auto cargador
$loader->register();
                        
                    
Router
El enrutamiento como se supone debe ser. Ni más ni menos.
                        
// Crear el router
$router = new \Phalcon\Mvc\Router();

// Definir una ruta
$router->add(
   '/admin/users/my-profile',
   [
       'controller' => 'users',
       'action'     => 'profile',
   ]
);
                        
                    
  • ORM
    Mapeo Relacional de Objetos
  • PHQL
    El potente y seguro lenguaje de consultas de Phalcon, PHQL
  • Transacciones
    Las transacciones en Phalcon permiten mantener segura la integridad de los datos.
  • Caché
    Mejore su rendimiento con muchos de los cachés de backend que proporciona Phalcon
ORM
Un potente ORM (Object-Relational Mapping) proporcioando por Phalcon permite manipular registros de base de datos como clases y objetos. Los motores de base de datos MySQL, PostgreSQL y SQLite están soportados desde el primer momento.
                        
use Invoices;
use Phalcon\Mvc\Model;

class Customers extends Model
{
    public $cst_id;

    public $cst_name;

    public function initialize()
    {
        $this->hasMany(
            'cst_id',
            Invoices::class,
            'inv_cst_id'
        );
    }
}
                        
                    
PHQL
PHQL es un dialecto SQL orientado a objetos de alto nivel, que permite para escribir consultas utilizando un lenguaje estándar SQL. PHQL se implementa como un analizador (escrito en C) que traduce la sintaxis que corresponde al RDBMS utilizado. Para lograr el mayor rendimiento posible, Phalcon proporciona un analizador que utiliza la misma tecnología que SQLite. Esta tecnología proporciona un pequeño analizador que reside en memoria con un uso de recursos muy bajo y que también usa sub procesos seguros.
                        
$phql  = 'SELECT * '
       . 'FROM Formula\Cars '
       . 'ORDER BY Formula\Cars.name';
$query = $manager->createQuery($phql);

$phql  = 'SELECT Formula\Cars.name '
       . 'FROM Formula\Cars '
       . 'ORDER BY Formula\Cars.name';
$query = $manager->createQuery($phql);

$phql  = 'SELECT c.name '
       . 'FROM Formula\Cars c '
       . 'ORDER BY c.name';
$query = $manager->createQuery($phql);

$phql = 'SELECT c.* '
      . 'FROM Cars AS c '
      . 'ORDER BY c.name';
$cars = $manager->executeQuery($phql);

foreach ($cars as $car) {
    echo "Name: ", $car->name, "\n";
}
                        
                    
Transacciones
Cuando un proceso realiza múltiples operaciones de base de datos, sería importante que cada paso que se ha completado con éxito para que pueda mantenerse la integridad de los datos. Las transacciones ofrecen la capacidad para garantizar que todas las operaciones de base de datos sean ejecutadas con éxito antes de que los datos sean enviados a la base de datos.
                        
use Phalcon\Mvc\Model\Transaction\Failed;
use Phalcon\Mvc\Model\Transaction\Manager;

try {

    // Crear un gestor de transacciones
    $manager = new Manager();

    // Solicitar una transacción
    $transaction = $manager->get();

    // Haz que los robots sean eliminados
    $invoices = Invoices::find(
        'inv_cst_id = 123'
    );

    foreach ($invoices as $invoice) {
        $invoice->setTransaction($transaction);
        if ($invoice->delete() == false) {
            // Algo está mal - revertir la transacción
            foreach ($invoice->getMessages() as $message) {
                $transaction
                    ->rollback($message->getMessage());
            }
        }
    }

    // Todo está bien - confirmar transacción
    $transaction->commit();

    echo "¡Los robots se eliminaron con éxito!";

} catch (Failed $e) {
    echo "Fallido, razón:  ", $e->getMessage();
}
                        
                    
Caché
El componente de caché permite un acceso más rápido a los datos utilizados frecuentemente o que ya fueron procesados. Es compatible con muchos backends como Redis, Memcached, Mongo, Archivos, Apc y más
                        
use Phalcon\Cache;
use Phalcon\Cache\AdapterFactory;
use Phalcon\Storage\Serializer\SerializerFactory;

$serializerFactory = new SerializerFactory();
$adapterFactory    = new AdapterFactory($serializerFactory);

$options = [
    'defaultSerializer' => 'Json',
    'lifetime'          => 7200
];

$adapter = $adapterFactory
    ->newInstance('apcu', $options);

$cache = new Cache($adapter);
                        
                    
  • Motores de Plantillas
    Las vistas representan la interfaz de usuario de tu aplicación
  • Motor de plantillas (Volt)
    Un motor de plantillas inspirado en Jinja pero construido en C para PHP
  • i18n
    Traduce tus aplicaciones a muchos idiomas fácilmente
  • Constructor de Formularios
    Crear fácilmente formularios HTML
  • Mensajes Flash
    Mensajes flash se utilizan para notificar al usuario sobre el estado de las acciones.
Motores de Plantillas
Las vistas representas la interfaz de usuario de tu aplicación. Las vistas son a menudo archivos HTML con código PHP incrustado que realizan tareas relacionadas únicamente a la presentación de datos. Las vistas se encargan de proporcionar datos al navegador web o a alguna otra herramienta que realice solicitudes de datos a tu aplicación.
                        
<html>
    <body>
    <div class='top'>
        <?php $this->partial('shared/ad_banner'); ?>
    </div>
    <div class='content'>
        <h1>Robots</h1>
        <p>
            Check out our specials for robots:
        </p>
        ...
    </div>
    <div class='footer'>
        <?php $this->partial('shared/footer'); ?>
    </div>
    </body>
</html>
                        
                    
Motor de plantillas (Volt)
Volt es un lenguaje de plantillas para PHP ultra rápido y amigable para el diseñador, está escrito en Zephir/C. Te proporciona un conjunto de ayudantes para escribir vistas de una manera fácil. Volt están altamente integrada con otros componentes de Phalcon, y puede ser utilizado como componente independiente en tus aplicaciones.
                        
{# app/views/products/show.volt #}
{% block last_products %}
{% for prod in products %}
    * Name: {{ prod.name|e }}
    {% if prod.status == 'Active' %}
       Price: {{ prod.price + prod.taxes/100}}
    {% endif  %}
{% endfor  %}
{% endblock %}
                        
                    
i18n
El componente Phalcon\Translate ayuda en la creación de aplicaciones multilingües. Las aplicaciones que utilizan este componente muestran el contenido en diferentes idiomas, basados en el idioma elegido por el usuario, de los idiomas soportados por la aplicación.
// app/messages/en.php
$messages = [
    'hi'      => 'Hello',
    'bye'     => 'Good Bye',
    'hi-name' => 'Hello %name%',
    'song'    => 'This song is %song%'
];

// app/messages/es.php
$messages = [
    'hi'      => 'Hola',
    'bye'     => 'Adiós',
    'hi-name' => 'Hola %name%',
    'song'    => 'Esta canción es %song%'
];

use Phalcon\Mvc\Controller;
use Phalcon\Translate\Adapter\NativeArray;

// UserController.php
class UserController extends Controller
{
    protected function getTranslation()
    {
        // El mejor idioma del navegador
        $language = $this
            ->request
            ->getBestLanguage();

        // Compruebe el archivo de traducción de idioma
        $fileName = 'app/messages/'
                  . $language
                  . '.php';
        if (file_exists($fileName) {
            require $fileName;
        } else {
            // Regresa algún valor predeterminado
            require 'app/messages/en.php';
        }

        // Devuelve un objeto de traducción
        return new NativeArray(
            array(
                'content' => $messages
            )
        );
    }

    public function indexAction()
    {
        $this->view->name = 'Mike';

        $this->view->t = $this
            ->getTranslation();
    }
}
// user.volt
<p><?php echo $t->_('hi'), ' ', $name; ?></p>
                        
                    
Constructor de Formularios
Cada elemento del formulario puede ser procesado como es requerido por el desarrollador. Internamente, se utiliza Phalcon\Tag para producir el código HTML correcto de cada elemento y puede pasar atributos adicionales como segundo parámetro del método render():
                        
use Phalcon\Forms\Form;
use Phalcon\Forms\Element\Text;
use Phalcon\Forms\Element\Select;

$form = new Form();

$form->add(new Text('name'));

$form->add(new Text('telephone'));

$form->add(
    new Select(
        'telephoneType',
        array(
            'H' => 'Home',
            'C' => 'Cellphone'
        )
    )
);
                        
                    
Mensajes Flash
Usa el notificador flash para mostrar mensajes al usuario en una aplicación web:
                        
use Phalcon\Mvc\Controller;

class PostsController extends Controller
{
    public function saveAction()
    {
        $this->flash->error(
            'hubo errores en este formulario'
        );
        $this->flash->success(
            '¡sí!, todo está bien'
        );
        $this->flash->notice(
            'este es un aviso para los usuarios'
        );
        $this->flash->warning(
            'esto es solo una advertencia'
        );
    }
}
                        
                    
  • ACL
    La Lista de Control de Acceso (ALC) permite a los usuarios acceder a los módulos que están autorizados a
  • Fragmentando Bases de Datos
    Conecta, almacena y recupera datos de muchos sistemas de bases de datos al mismo tiempo
  • Crypt
    Encriptar o Desencriptar datos importantes para mantenerlos a salvo de terceros no autorizados
  • Eventos
    Puedes extender la mayoría de los componentes del framework mediante la creación de 'puntos del anclaje'. Esto permite crear sus propios eventos para hacer su aplicación más flexible y potente
ACL
Así es como puedes crear listas de control de acceso (ACL):
                        
use Phalcon\Acl;
use Phalcon\Acl\Enum;
use Phalcon\Acl\Role;
use Phalcon\Acl\Adapter\Memory;

// Crear la ACL
$acl = new Memory();

// La acción predeterminada es DENEGAR el acceso
$acl->setDefaultAction(Enum::DENY);

// Registrar dos roles, Usuarios
// e Invitados
$roles = array(
    'users'  => new Role('Users'),
    'guests' => new Role('Guests')
);

foreach ($roles as $role) {
    $acl->addRole($role);
}
                        
                    
Fragmentando Bases de Datos
Adjunte modelos a diferentes bases de datos
                        
use Phalcon\Db\Adapter\Pdo\Mysql;
use Phalcon\Db\Adapter\Pdo\PostgreSQL;

// Este servicio devuelve una base de datos MySQL
$container->set(
    'dbMysql',
    function () {
        return new Mysql(
            [
                'host'     => 'localhost',
                'username' => 'root',
                'password' => 'secret',
                'dbname'   => 'tutorial',
            ]
        );
    }
);

// Este servicio devuelve una base de datos PostgreSQL
$container->set(
    'dbPostgres',
    function () {
        return new PostgreSQL(
            [
                'host'     => 'localhost',
                'username' => 'postgres',
                'password' => '',
                'dbname'   => 'invo',
            ]
        );
    }
);
                        
                    
Encriptación
Phalcon proporciona servicios de cifrado mediante el componente Phalcon\Crypt. Esta clase ofrece capas simples orientadas a objetos de la biblioteca de cifrado de PHP openssl.
                        
use Phalcon\Crypt;

$crypt = new Crypt();

$key  = 'Esta es una clave secreta (32 bytes).';
$text = 'El texto que desea encriptar.';

$encrypted = $crypt->encrypt($text, $key);

echo $crypt->decrypt($encrypted, $key);
                        
                    
Gestión de Eventos
Un Gestor de Eventos o EventsManager te permite adjuntar oyentes a un tipo particular de evento. El tipo de evento que nos interesa ahora es 'dispatch'. El siguiente código filtra todos los eventos producidos por el Dispatcher:
                        
use Phalcon\Mvc\Dispatcher;
use Phalcon\Events\Manager;

$container->set(
    'dispatcher',
    function () {
        // Crear un gestor de eventos
        $manager = new Manager();

        // Escucha los eventos producidos en el
        // dispatcher usando el plugin SecurityPlugin
        $manager->attach(
            'dispatch:beforeExecuteRoute',
            new SecurityPlugin
        );

        // Manejar excepciones y errores not-found
        // excepciones usando NotFoundPlugin
        $manager->attach(
            'dispatch:beforeException',
            new NotFoundPlugin
        );

        $dispatcher = new Dispatcher();

        // Establece el gestor de eventos
        // al despachador
        $dispatcher
            ->setEventsManager($manager);

        return $dispatcher;
    }
);
                        
                    
Una aplicación de encuestas desde cero en menos de 15 minutos
Mira el video de demostración
¡Únete a nuestra vibrante comunidad de desarrolladores!
Conozca las contribuciones de la comunidad: extensiones, complementos, adaptadores, VM, ejemplos, código fuente... y más
Colaboradores de Phalcon
Phalcon es mejorado día a día por nuestra increíble comunidad
Contribuir