lunes, diciembre 16, 2013

Curso 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)
- Motor de ODM ( Mongo DB)
- Encriptación
- 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{
    //Register an autoloader
    $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

Hola Mundo desde Phalcon :)

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

1 comentario:

Anónimo dijo...

y donde queda el resto del curso?