El Helper Pipeline en Laravel

Spread the love

Los pipelines de Laravel son una forma cómoda de ejecutar varias tareas una tras otra para obtener un resultado final complejo.

Laravel usa de forma interna el pipeline, pero ha sido hasta la versión 10 que fue agregado como helper y en la documentación.

Helper Pipeline

Esencialmente, la clase Pipeline es una implementación simple del patrón pipeline en PHP y es una forma de encadenar múltiples callbacks pasando el resultado al siguiente callback de forma secuencial.

Veamos cómo podemos utilizar la clase Pipeline en Laravel con un ejemplo sencillo.

use Illuminate\Support\Facades\Pipeline;
use Illuminate\Support\Str;

$postSlug = Pipeline::send('Laravel pipelines')
            ->through([
                function (string $title, \Closure $next) {
                    $title = Str::slug($title);
 
                    return $next($title);
                },
                function (string $title, \Closure $next) {
                    $title = Str::upper($title);
 
                    return $next($title);
                },
            ])
            ->then(fn (string $title) => $title);

dd($postSlug); // "LARAVEL-PIPELINES"

Como puedes ver en el ejemplo de arriba, estamos pasando la cadena “Laravel pipelines” a la clase Pipeline, y luego estamos encadenando dos callbacks usando el método through(). La primera llamada convertirá la cadena en un slug y la segunda convertirá el slug a mayúsculas.

El parámetro $next en la llamada de retorno es un closure que pasará el resultado de la llamada actual a la siguiente.

Finalmente, devolveremos el resultado (la cadena procesada) de la última llamada de retorno utilizando el método then().

Uso de clases invokable

Además, también puedes pasar clases invokable a la clase Pipeline.

$postSlug = Pipeline::send('Laravel pipelines')
            ->through([
                Slugify::class,
                Uppercase::class,
            ])
            ->then(fn (string $title) => $title);

Para terminar

Aunque el ejemplo anterior es bastante simple, la clase Pipeline se puede utilizar para hacer algunas cosas bastante interesantes y hay un montón de casos de uso para ella.