Instalacion y primera aplicacion de Phalcon Framework para PHP
By: Date: febrero 19, 2014 Categories: Programación

En el artículo anterior PDO básico para PHP escribía sobre mis intenciones de hablar sobre un ORM y que el tener que configurar todo para llevar a cabo el artículo sobre pasaba mi intención de redactarlo, por supuesto ese artículo como la mayoría los redacto en las madrugadas cuando al fin tengo tiempo de escribir para mi blog. Hoy encontré un tiempo para investigar sobre ORM disponibles y encontré algo que mejor que un ORM. Un Framework MvC para PHP y como tal incluye un ORM integrado.

Debo aclarar que no soy fan de los frameworks, los considero el opio de los programadores pero no negare que si estas sobre un framework el trabajo se hace muy rápidamente, incluso la aplicación que escribí para este artículo la hice en escasos 2 minutos, no estoy seguro si seguí todas las convenciones que requiere un MvC.

Así que me centrare mas en lo que es más natural para mí, la implementación del framework en sí mismo y luego reescribiré la aplicación de mi artículo anterior.

El framework es Phalcon, este Framework es muy rápido y abstrae todo, incluso pienso que es más veloz y fácil comparándolo con la tecnología .NET que estamos usando en desarrollo, todo y digo todo está completamente abstraído, muchos de los que usan ORM maldicen el tener que mapear las base de datos con XML, algunos usan otros productos que abstraen dichos XML pero son capaz , sobre capaz por lo que el Framework final termina siendo un sándwich de 5 pisos.

Phalcon abstrae todo eso en un solo nivel por lo que una vez instalado ya está listo para mapear los modelos y entrar a la DB y mostrar vistas.

No solo eso, el Framework debería estar montado sobre PHP , pero en lugar de eso el Framework está integrado/incrustado en PHP mediante un modulo de objeto compartido en C o para abreviarlo una librería DLL ya sea para MS/Windows o GNU/Linux. De este modo todas las funciones vitales del Framework no son código PHP, son código C ejecutándose en código nativo en la maquina, el PHP solo se usa como un método acceso a las APIS, el resultado final es que la aplicación final aunque está escrita en PHP puede correr más rápido que una aplicación común y corriente de PHP

Siempre hay un punto débil en todo esto , una aplicación escrita en un framework no siempre será posible deployarla en un hosting, por que no todos los hosting tienen instalado el framework, no basta con poner los archivos PHP sobre un servidor WEB que tiene PHP, se requiere convertir ese servidor WEB con PHP a un servidor de aplicaciones con Phalcon, por lo que pocos sitios de hosting te darán ese beneficio es más probable que termines instalando este framework en el site de una compañía donde tendría más sentido y para instalarlo requieres tener acceso root al servidor por todas las adecuaciones necesarias.

Requistos.
En el servidor WEB
Soportar ReWrite en Apache mod_rewrite, Nginx y la mayoría de los servidores web no tendrán problemas con esto.

Requisitos de PHP que son opcionales pero dan mucha mayor funcionalidad
Soportar PDO y todos los drivers necesarios de base de datos
mbstring
mcrypt
openssl
y adicionalmente las que el programador requiera. ( GD , Curls, Etc )

Git

Se requiere Git para bajar el código fuente de Phalcon

Entorno del sistema
Si la compilación de PHP ha sido realizada por el administrador de forma personalizada, se requiere que los binarios de PHP estén disponibles en el PATH

Instalación

Descargar el código fuente en C de Phalcon con Git

git clone --depth=1 git://github.com/phalcon/cphalcon.git

Entrar al directorio cphalcon/build y ejecutar ./install
Nota: Si los binarios de PHP específicamente el phpizer no está en el PATH fallara la compilación.

En el PHP.INI agregar la nueva extensión de PHP
extension=phalcon.so

En este punto PHP ya soporta Phalcon, ahora se descargan las herramientas del framework

curl -s http://getcomposer.org/installer | php

Instalando las herramientas del framework para que funcionen como comandos en la consola de GNU/Linux

php composer.phar install

Nota: Si los binarios de PHP no están en el PATH fallara.

En el directorio phalcon/bin de las herramientas de phalcon está el script PHP phalcon, Este script creara la estructura de directorios de las aplicaciones, creara los modelos y los controladores del programa o incluso activar una interfaz web de administración para la aplicación.

Nota: Ya no es requerido que los binarios de PHP estén en el PATH aunque es deseable, sin embargo si no lo están habrá que especificar toda la ruta del binario PHP para ejecutar el script phalcon

Prueba de ejecución SIN los binarios de PHP en el PATH

/usr/php/bin/php /usr/phalcon/bin/phalcon.php

Regresa:
Phalcon DevTools (1.2.6)

Available commands:
commands (alias of: list, enumerate)
controller (alias of: create-controller)
model (alias of: create-model)
all-models (alias of: create-all-models)
project (alias of: create-project)
scaffold
migration
webtools

Configuración de Apache para soportar Re-Write y los archivos .htaccess de Phalcon

RewriteEngine on

Order Deny,Allow
Allow from all
Options FollowSymLinks
AllowOverride All
Require all granted

Nota: AllowOverride debe estar seteado a All

Reiniciar el servicio WEB para que PHP y las nuevas configuraciones de Apache carguen

Es fácil ver que tener un servidor de aplicaciones Phalcon requiere un esfuerzo adicional para estar listo, modificaciones y compilaciones son necesarias. Pero para quien haya tenido la paciencia de llegar a este punto ahora tiene la recompensa de poder escribir aplicaciones Phalcon en minutos si se trata de cosas pequeñas o al menos llevar un desarrollo más rápido para aplicaciones grandes como las de un corporativo.

La aplicación que escribí para PDO PHP del artículo anterior, será reescrita a Phalcon para mostrar su funcionalidad. He decidido manejar la misma base de datos.

Crear una aplicación Phalcon con la herramienta plahcon.php desde la consola deGNU/Linux

Se debe estar dentro de la carpeta que se ha designado para aplicaciones Phalcon en apache y ejecutar phalcon.php project nombredelaapp, para mi artículo la llamare dragon

phalcon.php project dragon

Se crea un directorio con archivos, la aplicación ya está lista para ejecutarse * Y NO HACER NADA * , si se ha configurado correctamente Phalcon en el navegador se recibe esto:
http://www.lastdragon.net/phalcon/dragon/

Congratulations!

You’re now flying with Phalcon. Great things are about to happen!

Los archives y directorios que se crean en automático son:
app index.html public

Dentro de app se ejecuta phalcon y el lugar donde se programa la aplicación.

Configurando la base de datos en dragon/app/config/config.php

< ?php return new \Phalcon\Config(array( 'database' => array(
'adapter' => 'Mysql',
'host' => 'localhost',
'username' => 'pdo',
'password' => 'test',
'dbname' => 'pdotest',
),
'application' => array(
'controllersDir' => __DIR__ . '/../../app/controllers/',
'modelsDir' => __DIR__ . '/../../app/models/',
'viewsDir' => __DIR__ . '/../../app/views/',
'pluginsDir' => __DIR__ . '/../../app/plugins/',
'libraryDir' => __DIR__ . '/../../app/library/',
'cacheDir' => __DIR__ . '/../../app/cache/',
'baseUri' => '/dragon/',
)
));

Programando una vista en dragon/app/views , se crea un directorio con el nombre de la vista en este caso persona y dentro del directorio un archivo archivo con código php vacio pero con extensión .volt

direcotorio
dragon/app/views/persona
index.volt
dragon/app/views/persona/index.volt
Contenido de index.volt

# cat index.volt
< ?php ?>

Si en este punto se ejecutara la vista persona, la ejecución fallaría por qué no tendría un controlador

Creando el controlador y el mapeo del modelo de la base de datos con la herramienta phanton en la línea de comandos

Controlador

phalcon.php controller persona

Creando el modelo de la base de datos

phalcon.php model pdotest

La herramienta phalcon ha abstraído todo, todas las tablas dentro de la base de datos pdotest ahora son objetos.

El código en el controlador persona

< ?php class PersonaController extends \Phalcon\Mvc\Controller { public function indexAction() { } public function agregarPersonaAction() { $tablapersona = new Persona(); $tablapersona->id = null;
$tablapersona->nombre="Soy Batman en un ORM TEST";
$tablapersona->edad=2014;
$tablapersona->save();

}

public function recuperaPersonaAction()
{
$tablapersona = Persona::find();
foreach ($tablapersona as $objtabla)
{
echo $objtabla->nombre."
";
echo $objtabla->edad."
";
}

}

}

Aunque todo esto parece aparatoso, cuando ya lo dominas puedes escribir aplicaciones en minutos libres de inyección de SQL y sin necesidad de saber SQL

El siguiente video muestra la aplicación ejecutándose

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *