grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026container = $container; } /** * Resolve toResolve into a closure so that the router can dispatch. * * If toResolve is of the format 'class:method', then try to extract 'class' * from the container otherwise instantiate it and then dispatch 'method'. * * @param mixed $toResolve * * @return callable * * @throws RuntimeException if the callable does not exist * @throws RuntimeException if the callable is not resolvable */ public function resolve($toResolve) { if (is_callable($toResolve)) { return $toResolve; } if (!is_string($toResolve)) { $this->assertCallable($toResolve); } // check for slim callable as "class:method" if (preg_match(self::CALLABLE_PATTERN, $toResolve, $matches)) { $resolved = $this->resolveCallable($matches[1], $matches[2]); $this->assertCallable($resolved); return $resolved; } $resolved = $this->resolveCallable($toResolve); $this->assertCallable($resolved); return $resolved; } /** * Check if string is something in the DIC * that's callable or is a class name which has an __invoke() method. * * @param string $class * @param string $method * @return callable * * @throws \RuntimeException if the callable does not exist */ protected function resolveCallable($class, $method = '__invoke') { if ($this->container->has($class)) { return [$this->container->get($class), $method]; } if (!class_exists($class)) { throw new RuntimeException(sprintf('Callable %s does not exist', $class)); } return [new $class($this->container), $method]; } /** * @param Callable $callable * * @throws \RuntimeException if the callable is not resolvable */ protected function assertCallable($callable) { if (!is_callable($callable)) { throw new RuntimeException(sprintf( '%s is not resolvable', is_array($callable) || is_object($callable) ? json_encode($callable) : $callable )); } } }