for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2016 ublaboo <[email protected]>
* @author Pavel Janda <[email protected]>
* @package Ublaboo
*/
namespace Ublaboo\ApiRouter\DI;
use Nette\Application\IRouter;
use Nette\Application\Routers\RouteList;
use Ublaboo\ApiRouter\Exception\ApiRouteWrongRouterException;
class ApiRoutesResolver
{
* Place REST API routes at the beginnig of all routes
public function prepandRoutes(IRouter $router, array $routes): void
if (empty($routes)) {
return;
}
if (!($router instanceof \Traversable) || !($router instanceof \ArrayAccess)) {
throw new ApiRouteWrongRouterException(sprintf(
'ApiRoutesResolver can not add ApiRoutes to your router. Use for example %s instead',
RouteList::class
));
$user_routes = $this->findAndDestroyUserRoutes($router);
* Add ApiRoutes first
foreach ($routes as $route) {
$router[] = $route;
* User routes on second place
foreach ($user_routes as $route) {
public function findAndDestroyUserRoutes(IRouter $router): array
$keys = [];
$return = [];
foreach ($router as $key => $route) {
$router
object<Nette\Application\IRouter>
$return[] = $route;
$keys[] = $key;
foreach (array_reverse($keys) as $key) {
unset($router[$key]);
return $return;