Tutorial de Phalcon PHP
Capítulo I: Primeros Pasos¿Qué es Phalcon?
Phalcon PHP es un framework de alto rendimiento desarrollado como un módulo nativo de C para el núcleo de PHP, convirtiéndolo en el framework más rápido de todos, siendo hasta 10 veces más rápido que symfony 2 y zend framework 2.
Phalcon es un framework full stack para el desarrollo de aplicaciones complejas.
Cuenta con los siguientes módulos y funcionalidades:
- Desarrollo con uso de PHP 5.3 y namespaces
- Patrón de arquitectura MVC para el desarrollo de aplicaciones (Módulo Simple, Multi Módulos y Micro Aplicaciones)
- Motor de ORM (Transacciones, Comportamientos, Relaciones, PHQL, Eventos, Validaciones, Hydration, Logging, Profiling, Sharding)
- HTTP Request/Response/Cookies
- ODM para la base de datos documental Mongo DB
- Motor de Templates (Volt)
- Inyección de Dependencias DI/IOC
- Gestión de Eventos
- Cifrado
- Filtrado y Saneamiento
- Constructor de Formularios y Validación
- Mensajes Instantáneos
- Cache
- Paginación
- Anotaciones
- Seguridad
- Traducción
- Gestión de Assets (despliegue de archivos públicos: js,css)
- Auto-Loader Universal
- Logging
- Interfaz de comandos CLI
Instalación de Phalcon
Usaremos Ubuntu como distribución base de preferencia una versión LTS 12.04 o release superior
Logueandose como root
$> sudo su -
Actualizando la lista de paquetes
$> apt-get -y update
Instalamos vim para como editor de texto
$> apt-get -y install vim
Instalando los paquetes de desarrollo de php y el compilador de c
$> apt-get -y install php5-dev php5-mysql gcc
Instalando el sistema de control de versiones git
$> apt-get -y install git
Haciendo un checkout del proyecto; desde github
$> git clone git://github.com/phalcon/cphalcon.git
Compilando el framework
$> cd cphalcon/build
Ubuntu de 32 bits
$> ./install 32bits
Ubuntu de 64 bits
$> ./install 64bits
Habilitando la extensión phalcon en la configuración de php
$> vim /etc/php5/conf.d/20-phalcon.ini
extension=phalcon.so
Verificando la carga de la exensión phalcon
$> php -r "print_r(get_loaded_extensions());" | grep phalcon
Plataforma de despliegue (LAMP o LEMP)
* Instalación de Apache, extensiones de PHP y MySQL (LAMP)
Apache es el servidor web más popular en la internet y su combinación con Linux, PHP y MySQL
lo convierten en la plataforma más importante en el despliegue de aplicaciones web.
Instalación de apache, php, librería gráfica (gd), depurador (xdbug), interfaz de comandos (cli), ldap, cifrado (mcrypt), download manager (curl)
$> apt-get install apache2 php5 mysql-server php5-mysql php5-gd php5-xdebug php5-cli php5-ldap php5-mcrypt php5-curl
* Instalación de Ngnix, PHP y MySQL (Linux EngineX: LEMP)
Ngix es un servidor web muy ligero, de gran performance y cada vez gana más aceptación;
su uso con PHP, PHP-FPM y MySQL lo convierten en una interesante alternativa a Apache
Instalación de apache, php, librería gráfica (gd), depurador (xdbug), interfaz de comandos (cli), ldap, cifrado (mcrypt), download manager (curl) y php-fpm (fast cgi)
$> apt-get install nginx php5 mysql-server php5-mysql php5-gd php5-xdebug php5-cli php5-ldap php5-mcrypt php5-curl php5-fpm
Primera Aplicación: holamundo
Estructura base de directorios
tutorial/
app/
controllers/
models/
views/
public/
css/
img/
js/
Creación de la estructura base de directorios
$> cd /var/www
$> mkdir holamundo
$> mkdir holamundo/app
$> mkdir holamundo/app/controllers
$> mkdir holamundo/app/models
$> mkdir holamundo/app/views
$> mkdir holamundo/public
$> mkdir holamundo/public/css
$> mkdir holamundo/public/img
$> mkdir holamundo/public/js
Creación del archivo .htaccess del directorio public para habilitar el uso de URLs Limpias
$> vim holamundo/public/.htaccess
AddDefaultCharset UTF-8
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
</IfModule>
Definiendo el BootStrap principal (Front Controller)
$> vim holamundo/public/index.php
<?php
try {
//Definiendo el Autloader para autocargar las clases del controlador y del modelo
$loader = new \Phalcon\Loader();
$loader->registerDirs(array(
'../app/controllers/',
'../app/models/'
))->register();
//Creando una instancia de Inyección de Dependencias
$di = new Phalcon\DI\FactoryDefault();
//Definiendo el directorio de vistas de la aplicacion, con el uso de una función lamba (función anónima)
$di->set('view', function(){
$view = new \Phalcon\Mvc\View();
$view->setViewsDir('../app/views/');
return $view;
});
//Gestionando la petición y desplegando la aplicación
$application = new \Phalcon\Mvc\Application();
$application->setDI($di);
echo $application->handle()->getContent();
} catch(\Phalcon\Exception $e) {
echo "PhalconException: ", $e->getMessage();
}
Creando el controlador IndexController
$> vim holamundo/app/controllers/IndexController.php
<?php
class IndexController extends \Phalcon\Mvc\Controller
{
// método para la acción index
public function indexAction()
{
}
}
Creando el directorio la vista para el controlador index
$> mkdir holamundo/app/views/index
Creando el archivo de vista para la acción index
$> vim holamundo/app/views/index/index.phtml
<h1> Hola Mundo desde Phalcon :) </h1>
Despliegue y prueba de la Aplicación
Crearemos un dominio ficticio en el /etc/hosts
Agregar en la última línea
$> vim /etc/hosts
127.0.1.1 www.holamundo.com
Despliegue en Apache
Creamos el virtualhost para la resolución de www.holamundo.com tomando como directorio raíz
/var/www/holamundo/public
Reemplazar el contenido
$> vim /etc/apache2/sites-enabled/000-default
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/holamundo/public
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/holamundo/public>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Reiniciamos Apache
$> /etc/init.d/apache2 restart
Comprobamos nuestro hola mundo con el navegador
http://www.holamundo.com
Despliegue en Nginx
Creamos el virtualhost para la resolución de www.holamundo.com tomando como directorio raíz
/var/www/holamundo/public
Reemplazar el contenido
$> vim /etc/nginx/sites-enabled/default
server {
listen 80;
server_name www.holamundo.com;
index index.php index.html index.htm;
set $root_path '/var/www/holamundo/public';
root $root_path;
try_files $uri $uri/ @rewrite;
location @rewrite {
rewrite ^/(.*)$ /index.php?_url=/$1;
}
location ~ \.php {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index /index.php;
include /etc/nginx/fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~* ^/(css|img|js|flv|swf|download)/(.+)$ {
root $root_path;
}
location ~ /\.ht {
deny all;
}
}
Reiniciamos Nginx
$> /etc/init.d/nginx restart
Comprobamos nuestro hola mundo con el navegador
http://www.holamundo.com
