PHP code example of kariricode / processor-pipeline

1. Go to this page and download the library: Download kariricode/processor-pipeline library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

kariricode / processor-pipeline example snippets






declare(strict_types=1);

or\Processor;
use KaririCode\ProcessorPipeline\ProcessorBuilder;
use KaririCode\ProcessorPipeline\ProcessorRegistry;
use KaririCode\ProcessorPipeline\Result\ProcessingResultCollection;

// Example of actual processors.
class UpperCaseProcessor implements Processor
{
    public function process(mixed $input): mixed
    {
        return strtoupper((string) $input);
    }
}

class TrimProcessor implements Processor
{
    public function process(mixed $input): mixed
    {
        return trim((string) $input);
    }
}

class EmailTransformerProcessor implements Processor
{
    public function process(mixed $input): mixed
    {
        return strtolower((string) $input);
    }
}

class EmailValidatorProcessor implements Processor
{
    public function __construct(private ProcessingResultCollection $resultCollection)
    {
    }

    public function process(mixed $input): mixed
    {
        if (!filter_var($input, FILTER_VALIDATE_EMAIL)) {
            $this->resultCollection->addError(
                self::class,
                'invalidFormat',
                "Invalid email format: $input"
            );
        }
        return $input;
    }
}

// Function to handle pipeline execution
function executePipeline(ProcessorBuilder $builder, ProcessorRegistry $registry, array $processorSpecs, string $input): void
{
    $resultCollection = new ProcessingResultCollection();
    $context = 'example_context';

    $registry->register($context, 'upper_case', new UpperCaseProcessor())
             ->register($context, 'trim', new TrimProcessor())
             ->register($context, 'email_transform', new EmailTransformerProcessor())
             ->register($context, 'email_validate', new EmailValidatorProcessor($resultCollection));

    try {
        $pipeline = $builder->buildPipeline($context, $processorSpecs);
        $output = $pipeline->process($input);

        // Displaying the results
        echo "Original Input: '$input'\n";
        echo "Pipeline Output: '$output'\n";

        // Display errors if any
        if ($resultCollection->hasErrors()) {
            echo "\nProcessing Errors:\n";
            print_r($resultCollection->getErrors());
        } else {
            echo "\nNo processing errors encountered.\n";
        }
    } catch (\Exception $e) {
        echo "Error executing the pipeline: " . $e->getMessage() . "\n";
    }
}

// Register processors to a context in the registry.
$registry = new ProcessorRegistry();
$builder = new ProcessorBuilder($registry);

// Execute scenario 1 - Valid input
$processorSpecs = [
    'upper_case' => false,
    'trim' => true,
    'email_transform' => true,
    'email_validate' => true,
];
$input = "   [email protected]   ";

echo "Scenario 1 - Valid Input\n";
executePipeline($builder, $registry, $processorSpecs, $input);

// Execute scenario 2 - Invalid input
$input = "   InvalidEmail@@@   ";

echo "\nScenario 2 - Invalid Input:\n";
executePipeline($builder, $registry, $processorSpecs, $input);

use KaririCode\Contract\Processor\ConfigurableProcessor;

class AgeValidator implements ConfigurableProcessor
{
    private int $minAge = 0;
    private int $maxAge = 120;

    public function configure(array $options): void
    {
        if (isset($options['minAge'])) {
            $this->minAge = $options['minAge'];
        }
        if (isset($options['maxAge'])) {
            $this->maxAge = $options['maxAge'];
        }
    }

    public function process(mixed $input): bool
    {
        return is_numeric($input) && $input >= $this->minAge && $input <= $this->maxAge;
    }
}

$registry->register('user', 'ageValidator', new AgeValidator());
$pipeline = $builder->buildPipeline('user', ['ageValidator' => ['minAge' => 18, 'maxAge' => 100]]);

use KaririCode\Validator\Attribute\Validate;

class UserProfile
{
    #[Validate(
        processors: [
            ' => 'Username is lidate(
        processors: ['
    // Getters and setters...
}

use KaririCode\ProcessorPipeline\ProcessorRegistry;
use KaririCode\Validator\Validator;
use KaririCode\Validator\Processor\Logic\RequiredValidator;
use KaririCode\Validator\Processor\Input\LengthValidator;
use KaririCode\Validator\Processor\Input\EmailValidator;

$registry = new ProcessorRegistry();
$registry->register('validator', '->validate($userProfile);

if ($result->hasErrors()) {
    foreach ($result->getErrors() as $property => $errors) {
        foreach ($errors as $error) {
            echo "$property: {$error['message']}\n";
        }
    }
}