Trabajando con Symfony en forma interactiva

JP Juan Pablo Romero Juan Pablo Romero

Juan Pablo Romero

Software Engineer
2 min read.

Para algunos desarrolladores nos es muy cómodo trabajar desde la línea de comandos, ya que diez dedos hacen más que dos. De hecho cuando se desarrollan aplicaciones con Symfony, el uso de la terminal de comandos es fundamental para muchas tareas (generación del modelo, creación de esquemas de base de datos, limpiar la cache, etc,.) que simplifican el trabajo significativamente.



Desde luego, todo esto es gracias a la interfaz en línea de comandos del ínterprete php (más conocido como php-cli), que en algunos casos se queda corto para ejecutar algunas pruebas: ver el estado de un objeto, insertar datos en la base de datos,  probar métodos de manera interactiva, etc,. Sé que algunos dirán que php-cli tiene un modo interactivo, pero en realidad desde mi punto de vista es muy limitado.  Sería muy interesante contar con algo similar a la terminal interactiva de python y desde luego que se pueda trabajar con nuestros proyectos en Symfony.



Lo mejor de todo, es que la gente de facebook liberó bajo licencia BSD una shell interactiva para php y como sus mismos credadores dicen: "... irónicamente escrita en python ...."; se llama

phpsh

y realmente es un gran trabajo. He realizado algunas pruebas de integración con Symfony y creo que puede ser de gran apoyo para pruebas y aún más para las personas que están aprendiendo a trabajar con el framework.



A continuación van algunos de los sencillos experimentos realizados:



Una vez se haya instalado phpsh (leer el README), podemos trabajar  con sentencias de php y usar las funciones:


test$ phpsh
Starting php
type 'h' or 'help' to see instructions & features
php> echo "Hola mundo"
Hola mundo
php> $a = 2+3; echo $a
5

php> $f = array('uno' => 1, 'dos' => 2, 'tres' => 3);
php> foreach ($f as $n) { echo $n; }
123
php> foreach ($f as $n) { echo $n."\n"; }
1
2
3

php> foreach ($f as $n) {
... echo $n."\n";
... }
1
2
3
php> echo count($f);
3

Bien, pero ahora viene algo un poco más interesante: usar a través del shell interactivo nuestra aplicación hecha en Symfony.



No requiere ninguna configuración especial, simplemente cargar un archivo y listo; se trata del controlador frontal de nuestra aplicación (alguno de los que se encuentra en web), así:


test$ phpsh web/index.php
Starting php with extra includes: ['web/index.php']

.......................

php>

Para obviar la salida html, podemos crear una copia de ese archivo y evitar la llamada al método dispatch(), así:


require_once(dirname(__FILE__).'/config/ProjectConfiguration.class.php');

$configuration = ProjectConfiguration::getApplicationConfiguration('frontend','prod', false);
sfContext::createInstance($configuration);

Ahora, de nuevo lo cargamos (ese archivo lo he llamado shell.php):


test$ phpsh shell.php
Starting php with extra includes: ['shell.php']
type 'h' or 'help' to see instructions & features
php> $c = CiudadPeer::doSelect(new Criteria);

php> foreach ($c as $ciudad) {
... echo $ciudad."\n";
... }
Barranquilla
Bogota
Constantinopla
Medellin

php>

Como se puede ver, puedo acceder a las clases de mi modelo (disculpas a los usuarios de Doctrine) y desde luego a las clases que nos proporciona Symfony, por ejemplo si mi archivo

apps/frontend/config/app.yml

es:


all:
resultados_por_pagina: 15
sf_phpmailer:
mailer:                    true
smtp_auth:                 true
smtp_secure:               "ssl"
host:                      "smtp.mihost"
port:                      600
username:                  "miusuario"
password:                  "miclave"
from:                      "nosesabe@example.com"
from_name:                 "Anonimo"

test$ phpsh shell.php
Starting php with extra includes: ['shell.php']
type 'h' or 'help' to see instructions & features
php> $conf = sfConfig::get('app_sf_phpmailer_port');

php> echo $conf;
600
php> echo sfConfig::get('app_resultados_por_pagina');
15
php>

Bueno, esos han sido los experimentos que he alcanzado a realizar. Espero trabajar más en detalle y publicar los resultados. Hasta una próxima.


Written by Juan Pablo Romero

JP Juan Pablo Romero Juan Pablo Romero

Juan Pablo designs and builds robust software solutions with a focus on performance and usability. His problem-solving skills and attention to detail ensure high-quality and efficient applications.

Newsletter

Subscribe to our newsletter:

Read more

Django Templates Scribes

Plantillas para Django en el editor Scribes Python: django.xml Plantillas: django_template.xmlEspero les sean utiles. Saludos

1 min read.

Build Once. Own Forever.