-
Notifications
You must be signed in to change notification settings - Fork 21
Expand file tree
/
Copy pathRouterServiceProvider.php
More file actions
82 lines (64 loc) · 2.34 KB
/
RouterServiceProvider.php
File metadata and controls
82 lines (64 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
namespace Rareloop\Lumberjack\Providers;
use Psr\Http\Message\RequestInterface;
use Rareloop\Lumberjack\Contracts\MiddlewareAliases;
use Rareloop\Lumberjack\Http\MiddlewareAliasStore;
use Rareloop\Lumberjack\Http\MiddlewareResolver;
use Rareloop\Lumberjack\Http\Router;
use Rareloop\Lumberjack\Http\ServerRequest;
use Rareloop\Router\MiddlewareResolver as MiddlewareResolverInterface;
use Laminas\Diactoros\ServerRequestFactory;
class RouterServiceProvider extends ServiceProvider
{
public function register()
{
$store = new MiddlewareAliasStore;
$resolver = new MiddlewareResolver($this->app, $store);
$router = new Router($this->app, $resolver);
$router->setBasePath($this->getBasePathFromWPConfig());
$this->app->bind('router', $router);
$this->app->bind(Router::class, $router);
$this->app->bind('middleware-alias-store', $store);
$this->app->bind(MiddlewareAliases::class, $store);
$this->app->bind('middleware-resolver', $resolver);
$this->app->bind(MiddlewareResolverInterface::class, $resolver);
}
public function boot()
{
add_action('wp_loaded', function () {
$request = ServerRequest::fromRequest(ServerRequestFactory::fromGlobals(
$_SERVER,
$_GET,
$_POST,
$_COOKIE,
$_FILES
));
$this->processRequest($request);
});
}
private function getBasePathFromWPConfig()
{
// Infer the base path from the site's URL
$siteUrl = get_bloginfo('url');
$siteUrlParts = explode('/', rtrim($siteUrl, ' //'));
$siteUrlParts = array_slice($siteUrlParts, 3);
$basePath = implode('/', $siteUrlParts);
if (!$basePath) {
$basePath = '/';
} else {
$basePath = '/' . $basePath . '/';
}
return $basePath;
}
public function processRequest(RequestInterface $request)
{
$this->app->bind('request', $request);
$response = $this->app->get('router')->match($request);
$response = apply_filters('lumberjack_router_response', $response, $request);
if ($response->getStatusCode() === 404) {
return;
}
$this->app->requestHasBeenHandled();
$this->app->shutdown($response);
}
}