File Manager
Upload
Current Directory: /home/lartcid/public_html/journal.lartc.id
[Back]
..
[Open]
Hapus
Rename
.htaccess
[Edit]
Hapus
Rename
.well-known
[Open]
Hapus
Rename
README.md
[Edit]
Hapus
Rename
api
[Open]
Hapus
Rename
cache
[Open]
Hapus
Rename
cgi-bin
[Open]
Hapus
Rename
classes
[Open]
Hapus
Rename
config.TEMPLATE.inc.php
[Edit]
Hapus
Rename
config.inc.php
[Edit]
Hapus
Rename
controllers
[Open]
Hapus
Rename
cypress.json
[Edit]
Hapus
Rename
dbscripts
[Open]
Hapus
Rename
docs
[Open]
Hapus
Rename
error_log
[Edit]
Hapus
Rename
favicon.ico
[Edit]
Hapus
Rename
index.php
[Edit]
Hapus
Rename
js
[Open]
Hapus
Rename
lib
[Open]
Hapus
Rename
locale
[Open]
Hapus
Rename
mini.php
[Edit]
Hapus
Rename
pages
[Open]
Hapus
Rename
php.ini
[Edit]
Hapus
Rename
plugins
[Open]
Hapus
Rename
public
[Open]
Hapus
Rename
registry
[Open]
Hapus
Rename
scheduledTaskLogs
[Open]
Hapus
Rename
schemas
[Open]
Hapus
Rename
styles
[Open]
Hapus
Rename
templates
[Open]
Hapus
Rename
tools
[Open]
Hapus
Rename
Edit File
<?php /** * Slim Framework (https://slimframework.com) * * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License) */ namespace Slim; use FastRoute\Dispatcher; use FastRoute\RouteCollector; use FastRoute\RouteParser; use FastRoute\RouteParser\Std as StdParser; use InvalidArgumentException; use Psr\Container\ContainerInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\UriInterface; use RuntimeException; use Slim\Interfaces\RouteInterface; use Slim\Interfaces\RouterInterface; /** * This class organizes Slim application route objects. It is responsible * for registering route objects, assigning names to route objects, * finding routes that match the current HTTP request, and creating * URLs for a named route. */ class Router implements RouterInterface { /** * Container Interface * * @var ContainerInterface */ protected $container; /** * Parser * * @var RouteParser */ protected $routeParser; /** * Base path used in pathFor() * * @var string */ protected $basePath = ''; /** * Path to fast route cache file. Set to false to disable route caching * * @var string|False */ protected $cacheFile = false; /** * Routes * * @var Route[] */ protected $routes = []; /** * Route counter incrementer * @var int */ protected $routeCounter = 0; /** * Route groups * * @var RouteGroup[] */ protected $routeGroups = []; /** * @var Dispatcher */ protected $dispatcher; /** * @param RouteParser $parser */ public function __construct(RouteParser $parser = null) { $this->routeParser = $parser ?: new StdParser; } /** * Set the base path used in pathFor() * * @param string $basePath * * @return static * @throws InvalidArgumentException */ public function setBasePath($basePath) { if (!is_string($basePath)) { throw new InvalidArgumentException('Router basePath must be a string'); } $this->basePath = $basePath; return $this; } /** * Get the base path used in pathFor() * * @return string */ public function getBasePath() { return $this->basePath; } /** * Set path to fast route cache file. If this is false then route caching is disabled. * * @param string|false $cacheFile * * @return static * * @throws InvalidArgumentException If cacheFile is not a string or not false * @throws RuntimeException If cacheFile directory is not writable */ public function setCacheFile($cacheFile) { if (!is_string($cacheFile) && $cacheFile !== false) { throw new InvalidArgumentException('Router cache file must be a string or false'); } if ($cacheFile && file_exists($cacheFile) && !is_readable($cacheFile)) { throw new RuntimeException( sprintf('Router cache file `%s` is not readable', $cacheFile) ); } if ($cacheFile && !file_exists($cacheFile) && !is_writable(dirname($cacheFile))) { throw new RuntimeException( sprintf('Router cache file directory `%s` is not writable', dirname($cacheFile)) ); } $this->cacheFile = $cacheFile; return $this; } /** * @param ContainerInterface $container */ public function setContainer(ContainerInterface $container) { $this->container = $container; } /** * {@inheritdoc} */ public function map($methods, $pattern, $handler) { if (!is_string($pattern)) { throw new InvalidArgumentException('Route pattern must be a string'); } // Prepend parent group pattern(s) if ($this->routeGroups) { $pattern = $this->processGroups() . $pattern; } // According to RFC methods are defined in uppercase (See RFC 7231) $methods = array_map("strtoupper", $methods); /** @var Route $route */ $route = $this->createRoute($methods, $pattern, $handler); $this->routes[$route->getIdentifier()] = $route; $this->routeCounter++; return $route; } /** * {@inheritdoc} */ public function dispatch(ServerRequestInterface $request) { $uri = '/' . ltrim($request->getUri()->getPath(), '/'); return $this->createDispatcher()->dispatch( $request->getMethod(), $uri ); } /** * Create a new Route object * * @param string[] $methods Array of HTTP methods * @param string $pattern The route pattern * @param callable $callable The route callable * * @return RouteInterface */ protected function createRoute($methods, $pattern, $callable) { $route = new Route($methods, $pattern, $callable, $this->routeGroups, $this->routeCounter); if (!empty($this->container)) { $route->setContainer($this->container); } return $route; } /** * @return Dispatcher */ protected function createDispatcher() { if ($this->dispatcher) { return $this->dispatcher; } $routeDefinitionCallback = function (RouteCollector $r) { foreach ($this->getRoutes() as $route) { $r->addRoute($route->getMethods(), $route->getPattern(), $route->getIdentifier()); } }; if ($this->cacheFile) { $this->dispatcher = \FastRoute\cachedDispatcher($routeDefinitionCallback, [ 'routeParser' => $this->routeParser, 'cacheFile' => $this->cacheFile, ]); } else { $this->dispatcher = \FastRoute\simpleDispatcher($routeDefinitionCallback, [ 'routeParser' => $this->routeParser, ]); } return $this->dispatcher; } /** * @param Dispatcher $dispatcher */ public function setDispatcher(Dispatcher $dispatcher) { $this->dispatcher = $dispatcher; } /** * Get route objects * * @return Route[] */ public function getRoutes() { return $this->routes; } /** * {@inheritdoc} */ public function getNamedRoute($name) { foreach ($this->routes as $route) { if ($name == $route->getName()) { return $route; } } throw new RuntimeException('Named route does not exist for name: ' . $name); } /** * Remove named route * * @param string $name Route name * * @throws RuntimeException If named route does not exist */ public function removeNamedRoute($name) { $route = $this->getNamedRoute($name); // no exception, route exists, now remove by id unset($this->routes[$route->getIdentifier()]); } /** * Process route groups * * @return string A group pattern to prefix routes with */ protected function processGroups() { $pattern = ""; foreach ($this->routeGroups as $group) { $pattern .= $group->getPattern(); } return $pattern; } /** * {@inheritdoc} */ public function pushGroup($pattern, $callable) { $group = new RouteGroup($pattern, $callable); array_push($this->routeGroups, $group); return $group; } /** * {@inheritdoc} */ public function popGroup() { $group = array_pop($this->routeGroups); return $group instanceof RouteGroup ? $group : false; } /** * {@inheritdoc} */ public function lookupRoute($identifier) { if (!isset($this->routes[$identifier])) { throw new RuntimeException('Route not found, looks like your route cache is stale.'); } return $this->routes[$identifier]; } /** * {@inheritdoc} */ public function relativePathFor($name, array $data = [], array $queryParams = []) { $route = $this->getNamedRoute($name); $pattern = $route->getPattern(); $routeDatas = $this->routeParser->parse($pattern); // $routeDatas is an array of all possible routes that can be made. There is // one routedata for each optional parameter plus one for no optional parameters. // // The most specific is last, so we look for that first. $routeDatas = array_reverse($routeDatas); $segments = []; $segmentName = ''; foreach ($routeDatas as $routeData) { foreach ($routeData as $item) { if (is_string($item)) { // this segment is a static string $segments[] = $item; continue; } // This segment has a parameter: first element is the name if (!array_key_exists($item[0], $data)) { // we don't have a data element for this segment: cancel // testing this routeData item, so that we can try a less // specific routeData item. $segments = []; $segmentName = $item[0]; break; } $segments[] = $data[$item[0]]; } if (!empty($segments)) { // we found all the parameters for this route data, no need to check // less specific ones break; } } if (empty($segments)) { throw new InvalidArgumentException('Missing data for URL segment: ' . $segmentName); } $url = implode('', $segments); $hasQueryParams = array_filter($queryParams, function ($value) { return $value !== null; }) !== []; if ($hasQueryParams) { $url .= '?' . http_build_query($queryParams); } return $url; } /** * {@inheritdoc} */ public function pathFor($name, array $data = [], array $queryParams = []) { return $this->urlFor($name, $data, $queryParams); } /** * Build the path for a named route including the base path * * @param string $name Route name * @param array $data Named argument replacement data * @param array $queryParams Optional query string parameters * * @return string * * @throws RuntimeException If named route does not exist * @throws InvalidArgumentException If required data not provided */ public function urlFor($name, array $data = [], array $queryParams = []) { $url = $this->relativePathFor($name, $data, $queryParams); if ($this->basePath) { $url = $this->basePath . $url; } return $url; } /** * Get fully qualified URL for named route * * @param UriInterface $uri * @param string $routeName * @param array $data Named argument replacement data * @param array $queryParams Optional query string parameters * * @return string * * @throws RuntimeException If named route does not exist * @throws InvalidArgumentException If required data not provided */ public function fullUrlFor(UriInterface $uri, $routeName, array $data = [], array $queryParams = []) { $path = $this->urlFor($routeName, $data, $queryParams); $scheme = $uri->getScheme(); $authority = $uri->getAuthority(); $protocol = ($scheme ? $scheme . ':' : '') . ($authority ? '//' . $authority : ''); return $protocol . $path; } }
Simpan