Como las tareas se ejecutan en una consola de comandos, también tienes acceso
a la entrada estándar STDIN. En UNIX, las aplicaciones pueden interactuar entre
si de muchas formas diferentes, una de las cuales se denomina pipe o tubería
y se simbolizan mediante el carácter |. El pipe permite conectar la salida
de una aplicación (conocida como STDOUT) con la entrada estándar de otra
aplicación (conocida como STDIN). Tanto la entrada como la salida estándar
son accesibles desde las tareas de Symfony mediante unas constantes especiales
de PHP denominadas STDIN
y STDOUT
. Existe otra constante especial llamada
STDERR
preparada para mostrar los mensajes de error de las aplicaciones.
¿Qué se puede hacer con la entrada estándar? Imagina que dispones en tu servidor de una aplicación que se quiere comunicar con Symfony. Por supuesto podría comunicarse mediante HTTP, pero una forma mucho más eficiente de hacerlo sería mediante un pipe de su salida a la entrada de la tarea de Symfony. Supongamos que la aplicación puede generar datos estructurados (por ejemplo un array PHP serializado) que describe los objetos que se deben insertar en la base de datos. En este caso, se podría escribir una tarea como la siguiente:
while ($content = trim(fgets(STDIN)))
{
if ($data = unserialize($content) !== false)
{
$object = new Object();
$object->fromArray($data);
$object->save();
}
}
Ahora ya podrías conectar las dos mediante el siguiente comando:
/usr/bin/data_provider | ./symfony data:import
data_provider
es la aplicación que genera los objetos y data:import
es la
tarea que se acaba de crear.