Overview

Namespaces

  • Autarky
    • Config
      • Loaders
    • Console
    • Container
      • Exception
      • Factory
      • Proxy
    • Database
    • Errors
    • Events
    • Files
    • Http
    • Logging
    • Providers
    • Routing
      • Events
    • Testing
    • TwigTemplating
      • Extensions
    • Utils

Classes

  • Autarky\Application
  • Autarky\Config\ConfigProvider
  • Autarky\Config\FileStore
  • Autarky\Config\LoaderFactory
  • Autarky\Config\Loaders\CachingYamlFileLoader
  • Autarky\Config\Loaders\PhpFileLoader
  • Autarky\Config\Loaders\YamlFileLoader
  • Autarky\Console\Application
  • Autarky\Console\Command
  • Autarky\Console\RouteDispatchCommand
  • Autarky\Console\RouteListCommand
  • Autarky\Container\Container
  • Autarky\Container\ContainerProvider
  • Autarky\Container\Factory\AbstractArgument
  • Autarky\Container\Factory\ClassArgument
  • Autarky\Container\Factory\Definition
  • Autarky\Container\Factory\Factory
  • Autarky\Container\Factory\ScalarArgument
  • Autarky\Container\Proxy\AbstractProxy
  • Autarky\Container\Proxy\ProxyProvider
  • Autarky\Database\ConnectionManager
  • Autarky\Database\DatabaseProvider
  • Autarky\Errors\ErrorHandlerManager
  • Autarky\Errors\ErrorHandlerProvider
  • Autarky\Errors\StubErrorHandler
  • Autarky\Events\EventDispatcher
  • Autarky\Events\EventDispatcherProvider
  • Autarky\Files\LockingFilesystem
  • Autarky\Files\PathResolver
  • Autarky\Http\CookieMiddleware
  • Autarky\Http\CookieProvider
  • Autarky\Http\CookieQueue
  • Autarky\Http\SessionMiddleware
  • Autarky\Http\SessionProvider
  • Autarky\Logging\ChannelManager
  • Autarky\Logging\DefaultLogConfigurator
  • Autarky\Logging\LoggingErrorHandler
  • Autarky\Logging\LoggingProvider
  • Autarky\Provider
  • Autarky\Providers\AbstractDependantProvider
  • Autarky\Providers\AbstractProvider
  • Autarky\Routing\Configuration
  • Autarky\Routing\Controller
  • Autarky\Routing\DefaultRouteConfigurator
  • Autarky\Routing\Events\AbstractRouteEvent
  • Autarky\Routing\Events\AfterEvent
  • Autarky\Routing\Events\BeforeEvent
  • Autarky\Routing\Events\RouteMatchedEvent
  • Autarky\Routing\Route
  • Autarky\Routing\RoutePathGenerator
  • Autarky\Routing\Router
  • Autarky\Routing\RoutingProvider
  • Autarky\Routing\UrlGenerator
  • Autarky\Testing\TestCase
  • Autarky\Testing\WebTestCase
  • Autarky\TwigTemplating\Extensions\PartialExtension
  • Autarky\TwigTemplating\Extensions\SessionExtension
  • Autarky\TwigTemplating\Extensions\UrlGenerationExtension
  • Autarky\TwigTemplating\Template
  • Autarky\TwigTemplating\TemplateContext
  • Autarky\TwigTemplating\TemplateEvent
  • Autarky\TwigTemplating\TemplatingEngine
  • Autarky\TwigTemplating\TwigEnvironment
  • Autarky\TwigTemplating\TwigTemplate
  • Autarky\TwigTemplating\TwigTemplatingProvider
  • Autarky\Utils\ArrayUtil

Interfaces

  • Autarky\Config\ConfigInterface
  • Autarky\Config\LoaderInterface
  • Autarky\ConfiguratorInterface
  • Autarky\Container\CallableInvokerInterface
  • Autarky\Container\ClassResolverInterface
  • Autarky\Container\ContainerAwareInterface
  • Autarky\Container\ContainerInterface
  • Autarky\Container\Factory\ArgumentInterface
  • Autarky\Container\Factory\FactoryInterface
  • Autarky\Database\ConnectionFactoryInterface
  • Autarky\Errors\ErrorHandlerInterface
  • Autarky\Errors\ErrorHandlerManagerInterface
  • Autarky\Events\EventDispatcherAwareInterface
  • Autarky\Providers\ConsoleProviderInterface
  • Autarky\Providers\DependantProviderInterface
  • Autarky\Providers\ProviderInterface
  • Autarky\Routing\InvokerInterface
  • Autarky\Routing\RoutePathGeneratorInterface
  • Autarky\Routing\RouterInterface

Traits

  • Autarky\Container\ContainerAwareTrait
  • Autarky\Events\EventDispatcherAwareTrait
  • Autarky\Routing\ControllerTrait

Exceptions

  • Autarky\Config\LoadException
  • Autarky\Container\Exception\ContainerException
  • Autarky\Container\Exception\NotInstantiableException
  • Autarky\Container\Exception\ResolvingException
  • Autarky\Container\Exception\ResolvingInternalException
  • Autarky\Container\Exception\UnresolvableArgumentException
  • Autarky\Database\CannotConnectException
  • Autarky\Files\IOException
  • Autarky\Providers\ProviderException
  • Overview
  • Namespace
  • Class
  1: <?php
  2: /**
  3:  * This file is part of the Autarky package.
  4:  *
  5:  * (c) Andreas Lutro <anlutro@gmail.com>
  6:  *
  7:  * For the full copyright and license information, please view the LICENSE
  8:  * file that was distributed with this source code.
  9:  */
 10: 
 11: namespace Autarky\Files;
 12: 
 13: /**
 14:  * Class that resolves possible paths based on various factors.
 15:  */
 16: class PathResolver
 17: {
 18:     /**
 19:      * Main paths.
 20:      *
 21:      * @var string[]
 22:      */
 23:     protected $paths;
 24: 
 25:     /**
 26:      * External paths mounted onto locations on the main path.
 27:      *
 28:      * @var string[][]
 29:      */
 30:     protected $mounts;
 31: 
 32:     /**
 33:      * Constructor
 34:      *
 35:      * @param string|array $pathOrPaths
 36:      */
 37:     public function __construct($pathOrPaths = [])
 38:     {
 39:         $this->paths = (array) $pathOrPaths;
 40:     }
 41: 
 42:     /**
 43:      * Add a main path.
 44:      *
 45:      * @param string $path
 46:      */
 47:     public function addPath($path)
 48:     {
 49:         $this->paths[] = $path;
 50:     }
 51: 
 52:     /**
 53:      * Mount a path onto a location.
 54:      *
 55:      * @param  string $location
 56:      * @param  string $path
 57:      */
 58:     public function mount($location, $path)
 59:     {
 60:         $this->mounts[$location][] = $path;
 61:     }
 62: 
 63:     /**
 64:      * Resolve possible paths for a relative path.
 65:      *
 66:      * @param  string $path
 67:      *
 68:      * @return array
 69:      */
 70:     public function resolve($path)
 71:     {
 72:         $paths = [];
 73: 
 74:         foreach ($this->paths as $configuredPath) {
 75:             $paths[] = $configuredPath.'/'.$path;
 76:         }
 77: 
 78:         $parts = explode('/', $path);
 79: 
 80:         // this doesn't change behaviour but will save some performance
 81:         if (count($parts) == 1) {
 82:             return $paths;
 83:         }
 84: 
 85:         $current = '';
 86:         $mountPaths = [];
 87:         foreach ($parts as $part) {
 88:             if ($current) {
 89:                 $current .= '/'.$part;
 90:             } else {
 91:                 $current = $part;
 92:             }
 93: 
 94:             if (isset($this->mounts[$current])) {
 95:                 foreach ($this->mounts[$current] as $mount) {
 96:                     // relative to mount directory
 97:                     $relativePath = str_replace($current, '', $path);
 98:                     $mountPaths[] = $mount.$relativePath;
 99:                 }
100:             }
101:         }
102: 
103:         return array_merge($mountPaths, $paths);
104:     }
105: 
106:     /**
107:      * Based on a set of basenames (filename without extension) and a set of
108:      * possible extensions, find the files that exist.
109:      *
110:      * @param  string|string[] $basenameOrNames
111:      * @param  string|string[] $extensionOrExtensions
112:      *
113:      * @return string[]
114:      */
115:     public function locate($basenameOrNames, $extensionOrExtensions)
116:     {
117:         $basenames = (array) $basenameOrNames;
118:         $extensions = (array) $extensionOrExtensions;
119: 
120:         $located = [];
121: 
122:         foreach ($basenames as $basename) {
123:             foreach ($extensions as $ext) {
124:                 $path = $basename.$ext;
125:                 if (file_exists($path)) {
126:                     $located[] = $path;
127:                 }
128:             }
129:         }
130: 
131:         return $located;
132:     }
133: }
134: 
Autarky Framework API documentation generated by ApiGen