* @license http://www.apache.org/licenses/LICENSE-2.0 * @link http://phpsx.org */ class FilterChain implements FilterChainInterface, LoggerAwareInterface { /** @var array */ protected $filters; /** @var \PSX\Http\FilterChainInterface */ protected $filterChain; /** @var \Psr\Log\LoggerInterface */ protected $logger; /** * @param array|\Traversable $filters * @param FilterChainInterface|null $filterChain */ public function __construct($filters = [], FilterChainInterface $filterChain = null) { $this->filters = []; $this->filterChain = $filterChain; foreach ($filters as $filter) { $this->on($filter); } } /** * @inheritdoc */ public function setLogger(LoggerInterface $logger) { $this->logger = $logger; } /** * @inheritdoc */ public function on($filter) { if ($filter instanceof FilterInterface) { $this->filters[] = $filter; } elseif ($filter instanceof \Closure) { $this->filters[] = $filter; } elseif (is_callable($filter)) { $this->filters[] = $filter; } else { throw new \InvalidArgumentException('Invalid filter must be either a \Closure or ' . FilterInterface::class); } } /** * @inheritdoc */ public function handle(RequestInterface $request, ResponseInterface $response) { $filter = array_shift($this->filters); if ($filter === null) { // if we have no filters check whether we have a parent filter chain // which should be called next if ($this->filterChain !== null) { $this->filterChain->handle($request, $response); } } elseif ($filter instanceof FilterInterface) { if ($this->logger !== null) { $this->logger->info('Filter execute ' . get_class($filter)); } $filter->handle($request, $response, $this); } elseif ($filter instanceof \Closure) { $filter($request, $response, $this); } elseif (is_callable($filter)) { call_user_func_array($filter, array($request, $response, $this)); } else { throw new \RuntimeException('Invalid filter value'); } } } __halt_compiler();----SIGNATURE:----sv5BjxOEshMMDfDqH1eQH4ohorsbR4S2DKSbNUjqKiV5h3gD9+2Ab2YtY+5H3DVV8CbmkillJokCqxsNTIF7jUD9lM7AfYq73YV+0pVp7DV3Z2bps9YAmkGAntVmQyHIgR1REp92TaU0kDUGeRPllTrrtwDg1ijkXWo1U/tU/8nxnu+lo1RtTC17BpMY6/UpiBzQwyyLSlwDW1kplct1w15gVsP9TQQACnqYBcbOQp756FTXvnJpOCKdKCUzWGPR+bfuQj7DFlGxZ71asWnSd3WzTQUw7IFSu6VupFoBWJ107Q1E6a8UUWmXx32uwZCFH/qqeT9RjWMInuXWnRW6BfJTvdfI6k+/kqXCUnWOXq155JgbMR4mZj7K1fZLTwUyXNVVdWZS+YVuMeqSccO1yakA+bniI2gTyMXqvH7HYBct8Fw62Sp15ZDzcoksOMil9QcWGbBIkB69lvqJLIXCgn9XmvO2QNXu4yR0J49lQMLi6r35JiBcULRbR7r/4b8nGKCHpXOfDdt0H4BczXCW5+twCrxcvdWTlAgPCUglIealLKtG778o6FNEbC/YXYBNVUsM8WixcByiQxC61Z5c963wIXdUDk4r6wPyVWIQxdbKFZ/R+s9pZQU8YVUYZLoYP9HtUYSIvQ9yCtdNwLchDQrClBSQDcd0suRknlIa9rw=----ATTACHMENT:----NDc3Njc1MzQ1OTQ0NzAwOSA0ODQwOTA2NzI5NTM0NTk2IDEyNzI2NzY5NzA1MDQ5NTQ=