PHPackages                             vox/pipeline-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. vox/pipeline-bundle

ActiveProject

vox/pipeline-bundle
===================

v1.0.0(8y ago)012MITPHPPHP &gt;=7

Since Jan 16Pushed 8y ago1 watchersCompare

[ Source](https://github.com/jhonatanTeixeira/pipeline-bundle)[ Packagist](https://packagist.org/packages/vox/pipeline-bundle)[ RSS](/packages/vox-pipeline-bundle/feed)WikiDiscussions master Synced 3d ago

READMEChangelog (1)Dependencies (10)Versions (2)Used By (0)

Pipeline Bundle
===============

[](#pipeline-bundle)

Configuração
------------

[](#configuração)

```
vox_pipeline:                     # nome do bundle
    pipelines:                    # deve declarar um array de pipelines
      primeiro_passo_filter:      # será o nome do serviço que poderar ser referenciado na injeção de dependencia
          type: kernel-subscriber # tipo de serviço, pode ser kernel-subscriber, doctrine-subscriber e service
          subscribedEvents:       # eventos que os subscribers irão escutar
            - api.form.post_build.primeiroPasso
          services:               # serviços que compõem a pipeline, srão executados na ordem de declaração
            - AppBundle\Pipeline\Form\DadosProcessoPipelineService
            - AppBundle\Pipeline\Form\EmpresaPipelineService
            - AppBundle\Pipeline\Form\PassoDois\Empresario\EmpresarioPipelineService
```

Declaração de um item da pipeline
---------------------------------

[](#declaração-de-um-item-da-pipeline)

Todos os items da pipeline devem ser "callables" que recebem um objeto de contexto

```
class PipelineItem
{
    /**
     * se houver esse método declarado, ele será chamado antes de chamar o __invoke
     * e caso ele retone false, não será chamado o __invoke
     * essa interface é implicita, não sendo necessário implementar nenhuma interface
     */
    public function shouldCall(PipelineContext $context): boolean
    {
        return true;
    }

    public function __invoke(PipelineContext $context)
    {
        //code
    }
}
```

Tipos de pipelines
------------------

[](#tipos-de-pipelines)

### - Kernel Subscriber (kernel-subscriber):

[](#--kernel-subscriber-kernel-subscriber)

Escuta a qualquer evento disparado pelo EventDispatcher do symfony, recebera um objeto do tipo PipelineContext com o evento real dentro da propriedade event que pode ser pego da seguintes formas:

```
public function __invoke(PipelineContext $context)
{
    $event = $context->event;
    $event = $context->get('event');
}
```

### - Doctrine Subscriber (doctrine-subscriber)

[](#--doctrine-subscriber-doctrine-subscriber)

Escuta a qualquer evento do doctrine, e recebe o evento da mesma forma descrita para o kernel subscriber. na configuração, deve se usar no subscribedEvents os nomes dos eventos doctrine. Ex:

```
subscribedEvents:
    - prePersist
    - postPersist
    - preUpdtade
    - postUpdate
    - onFlush
```

### - Service (service)

[](#--service-service)

Esse tipo não escuta a nada, apenas vira um serviço para ser injetado em outros serviço, e se trata de um objeto do tipo PiplineRunner. Eis um exemplo de uso da pipeline:

config so serviço:

```
vox_pipeline:
    pipelines:
        primeiro_passo_filter:
            type: service
            services:
                - AppBundle\Pipeline\Form\DadosProcessoPipelineService
                - AppBundle\Pipeline\Form\EmpresaPipelineService
                - AppBundle\Pipeline\Form\PassoDois\Empresario\EmpresarioPipelineService

services:
    AppBundle\Service\SomeService:
        arguments: ['@primeiro_passo_filter']
```

```
class SomeService
{
    private $pipelineRunner;

    public function __contruct(PipelineRunner $pipelineRunner)
    {
        $this->pipelineRunner = $pipelineRunner;
    }

    public function soSomething()
    {
        $context = new PipelineContext();

        $this->pipelineRunner->run($context);

        // o pipeline runner é também um callable, pode ser executado como uma função
        call_user_func($this->pipelineRunner, $context);

        // ou
        $this->pipelineRunner($context);
    }
}
```

Controle de fluxo
-----------------

[](#controle-de-fluxo)

Existem algumas maneiras de controllar o fluxo da pipeline

Através de exceptions:

```
public function __invoke(PipelineContext $context)
{
    //para a execução dessa pipe e vai para a proxima
    throw new CannotHandleContextException();
}
```

```
public function __invoke(PipelineContext $context)
{
    //para a execução dessa pipe e termina a execução, evitando de chamar que chame as proximas
    throw new ShouldStopPropagationException();
}
```

```
public function __invoke(PipelineContext $context)
{
    // se esse metodo for chamado, os proximos itens da pipeline não serão mais chamados
    // a execução desse item continua até o final
    $context->stopPropagation();
}
```

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity5

Limited adoption so far

Community4

Small or concentrated contributor base

Maturity63

Established project with proven stability

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

3040d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/2b151b09844eedb0fc2a4a3f5ff6766ec85d3bd1f3c5553e0c117ee279ede952?d=identicon)[jhonatanTeixeira](/maintainers/jhonatanTeixeira)

### Embed Badge

![Health badge](/badges/vox-pipeline-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/vox-pipeline-bundle/health.svg)](https://phpackages.com/packages/vox-pipeline-bundle)
```

###  Alternatives

[ed/blog-bundle

Symfony EDBlogBundle

348.4k](/packages/ed-blog-bundle)[ecentria/ecentria-rest-bundle

Goal of this bundle is to simplify process of creating APIs with Symfony. We use already well-coded libraries, combine them together to simplify process and not to re-invent the wheel. We've chose REST and HATEOS to have unified standards of API requests and responses.

142.4k](/packages/ecentria-ecentria-rest-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
