venta/framework

View on GitHub
src/Routing/src/Factory/MiddlewarePipelineFactory.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php declare(strict_types = 1);

namespace Venta\Routing\Factory;

use Venta\Contracts\Container\Container;
use Venta\Contracts\Routing\MiddlewarePipeline as MiddlewarePipelineContract;
use Venta\Contracts\Routing\MiddlewarePipelineFactory as MiddlewarePipelineFactoryContract;
use Venta\Routing\MiddlewarePipeline;

/**
 * Class MiddlewarePipelineFactory
 *
 * @package Venta\Routing
 */
final class MiddlewarePipelineFactory implements MiddlewarePipelineFactoryContract
{
    /**
     * @var Container
     */
    private $container;

    /**
     * MiddlewarePipelineFactory constructor.
     *
     * @param Container $container
     */
    public function __construct(Container $container)
    {
        $this->container = $container;
    }

    /**
     * @inheritDoc
     */
    public function create(array $middlewares): MiddlewarePipelineContract
    {
        $pipeline = new MiddlewarePipeline();
        foreach ($middlewares as $middleware) {
            $pipeline = $pipeline->withMiddleware($this->container->get($middleware));
        }

        return $pipeline;
    }

}