Skip to content

Commit 8d9a9e0

Browse files
authored
Inject Request instead of using the facade (#91)
1 parent c697bf1 commit 8d9a9e0

File tree

7 files changed

+165
-34
lines changed

7 files changed

+165
-34
lines changed

src/LocalizedUrlGenerator.php

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,22 @@
44

55
use CodeZero\LocalizedRoutes\Facades\LocaleConfig;
66
use CodeZero\UrlBuilder\UrlBuilder;
7+
use Illuminate\Http\Request;
78
use Illuminate\Support\Facades\URL;
89
use Illuminate\Support\Collection;
910
use Illuminate\Support\Facades\App;
10-
use Illuminate\Support\Facades\Route;
11-
use Illuminate\Support\Facades\Request;
1211
use Illuminate\Contracts\Routing\UrlRoutable;
1312
use Symfony\Component\Routing\Exception\RouteNotFoundException;
1413

1514
class LocalizedUrlGenerator
1615
{
16+
/**
17+
* The current Request.
18+
*
19+
* @var \Illuminate\Http\Request
20+
*/
21+
protected $request;
22+
1723
/**
1824
* The current Route.
1925
*
@@ -23,10 +29,13 @@ class LocalizedUrlGenerator
2329

2430
/**
2531
* Create a new LocalizedUrlGenerator instance.
32+
*
33+
* @param \Illuminate\Http\Request $request
2634
*/
27-
public function __construct()
35+
public function __construct(Request $request)
2836
{
29-
$this->route = Route::current();
37+
$this->request = $request;
38+
$this->route = $request->route();
3039
}
3140

3241
/**
@@ -41,7 +50,7 @@ public function __construct()
4150
*/
4251
public function generateFromRequest(string $locale = null, $parameters = null, bool $absolute = true, bool $keepQuery = true): string
4352
{
44-
$urlBuilder = UrlBuilder::make(Request::fullUrl());
53+
$urlBuilder = UrlBuilder::make($this->request->fullUrl());
4554
$requestQueryString = $urlBuilder->getQuery();
4655

4756
$currentDomain = $urlBuilder->getHost();

src/Macros/Route/HasLocalizedMacro.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace CodeZero\LocalizedRoutes\Macros\Route;
44

5+
use CodeZero\LocalizedRoutes\RouteHelper;
56
use Illuminate\Support\Facades\App;
67
use Illuminate\Support\Facades\Route;
78

@@ -14,10 +15,8 @@ class HasLocalizedMacro
1415
*/
1516
public static function register()
1617
{
17-
Route::macro('hasLocalized', function ($name, $locale = null) {
18-
$locale = $locale ?: App::getLocale();
19-
20-
return $this->routes->hasNamedRoute("{$locale}.{$name}");
18+
Route::macro('hasLocalized', function (string $name, ?string $locale = null) {
19+
return App::make(RouteHelper::class)->hasLocalized($name, $locale);
2120
});
2221
}
2322
}

src/Macros/Route/IsFallbackMacro.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace CodeZero\LocalizedRoutes\Macros\Route;
44

5+
use CodeZero\LocalizedRoutes\RouteHelper;
6+
use Illuminate\Support\Facades\App;
57
use Illuminate\Support\Facades\Route;
68

79
class IsFallbackMacro
@@ -14,7 +16,7 @@ class IsFallbackMacro
1416
public static function register()
1517
{
1618
Route::macro('isFallback', function () {
17-
return Route::current() && Route::current()->isFallback;
19+
return App::make(RouteHelper::class)->isFallback();
1820
});
1921
}
2022
}

src/Macros/Route/IsLocalizedMacro.php

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
namespace CodeZero\LocalizedRoutes\Macros\Route;
44

5-
use CodeZero\LocalizedRoutes\Facades\LocaleConfig;
6-
use Illuminate\Support\Collection;
5+
use CodeZero\LocalizedRoutes\RouteHelper;
6+
use Illuminate\Support\Facades\App;
77
use Illuminate\Support\Facades\Route;
88

99
class IsLocalizedMacro
@@ -16,23 +16,7 @@ class IsLocalizedMacro
1616
public static function register()
1717
{
1818
Route::macro('isLocalized', function ($patterns = null, $locales = '*') {
19-
if ($patterns === null) {
20-
$routeAction = LocaleConfig::getRouteAction();
21-
$route = Route::current();
22-
23-
return $route && $route->getAction($routeAction) !== null;
24-
}
25-
26-
$locales = Collection::make($locales);
27-
$names = Collection::make();
28-
29-
Collection::make($patterns)->each(function ($name) use ($locales, $names) {
30-
$locales->each(function ($locale) use ($name, $names) {
31-
$names->push($locale . '.' . $name);
32-
});
33-
});
34-
35-
return Route::is($names->all());
19+
return App::make(RouteHelper::class)->isLocalized($patterns, $locales);
3620
});
3721
}
3822
}

src/Middleware/Detectors/RouteActionDetector.php

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,28 @@
22

33
namespace CodeZero\LocalizedRoutes\Middleware\Detectors;
44

5+
use Illuminate\Http\Request;
56
use Illuminate\Support\Facades\Config;
6-
use Illuminate\Support\Facades\Request;
77

88
class RouteActionDetector implements Detector
99
{
10+
/**
11+
* The current Route.
12+
*
13+
* @var \Illuminate\Routing\Route
14+
*/
15+
protected $route;
16+
17+
/**
18+
* Create a new RouteActionDetector instance.
19+
*
20+
* @param \Illuminate\Http\Request $request
21+
*/
22+
public function __construct(Request $request)
23+
{
24+
$this->route = $request->route();
25+
}
26+
1027
/**
1128
* Detect the locale.
1229
*
@@ -16,6 +33,6 @@ public function detect()
1633
{
1734
$action = Config::get('localized-routes.route_action');
1835

19-
return Request::route()->getAction($action);
36+
return $this->route->getAction($action);
2037
}
2138
}

src/Middleware/Detectors/UrlDetector.php

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,35 @@
33
namespace CodeZero\LocalizedRoutes\Middleware\Detectors;
44

55
use CodeZero\LocalizedRoutes\Facades\LocaleConfig;
6-
use Illuminate\Support\Facades\Request;
6+
use Illuminate\Http\Request;
77

88
class UrlDetector implements Detector
99
{
10+
/**
11+
* The current Request.
12+
*
13+
* @var \Illuminate\Http\Request
14+
*/
15+
protected $request;
16+
17+
/**
18+
* Create a new UrlDetector instance.
19+
*
20+
* @param \Illuminate\Http\Request $request
21+
*/
22+
public function __construct(Request $request)
23+
{
24+
$this->request = $request;
25+
}
26+
1027
/**
1128
* Detect the locale.
1229
*
1330
* @return string|array|null
1431
*/
1532
public function detect()
1633
{
17-
$slug = Request::segment(1);
34+
$slug = $this->request->segment(1);
1835

1936
// If supported locales is a simple array like ['en', 'nl']
2037
// just return the slug and let the calling code check if it is supported.
@@ -25,7 +42,7 @@ public function detect()
2542
// Find the locale that belongs to the custom domain or slug.
2643
// Return the original slug as fallback.
2744
// The calling code should validate and handle it.
28-
$domain = Request::getHttpHost();
45+
$domain = $this->request->getHttpHost();
2946
$locale = LocaleConfig::findLocaleByDomain($domain) ?? LocaleConfig::findLocaleBySlug($slug) ?? $slug;
3047

3148
return $locale;

src/RouteHelper.php

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
<?php
2+
3+
namespace CodeZero\LocalizedRoutes;
4+
5+
use CodeZero\LocalizedRoutes\Facades\LocaleConfig;
6+
use Illuminate\Http\Request;
7+
use Illuminate\Support\Collection;
8+
use Illuminate\Support\Facades\App;
9+
use Illuminate\Support\Facades\Route;
10+
11+
class RouteHelper
12+
{
13+
/**
14+
* The current Route.
15+
*
16+
* @var \Illuminate\Routing\Route
17+
*/
18+
protected $route;
19+
20+
/**
21+
* Create a new RouteHelper instance.
22+
*
23+
* @param \Illuminate\Http\Request $request
24+
*/
25+
public function __construct(Request $request)
26+
{
27+
$this->route = $request->route();
28+
}
29+
30+
/**
31+
* Check if the current route is a fallback route.
32+
*
33+
* @return bool
34+
*/
35+
public function isFallback(): bool
36+
{
37+
return $this->route && $this->route->isFallback;
38+
}
39+
40+
/**
41+
* Check if the current route is localized.
42+
*
43+
* @param string|array $patterns
44+
* @param string|array $locales
45+
*
46+
* @return bool
47+
*/
48+
public function isLocalized($patterns = null, $locales = '*'): bool
49+
{
50+
return $patterns === null
51+
? $this->isCurrentRouteLocalized()
52+
: $this->isCurrentRouteLocalizedWithNamePattern($patterns, $locales);
53+
}
54+
55+
/**
56+
* Check if a localized route exists.
57+
*
58+
* @param string $name
59+
* @param string|null $locale
60+
*
61+
* @return bool
62+
*/
63+
public function hasLocalized(string $name, ?string $locale = null): bool
64+
{
65+
$locale = $locale ?: App::getLocale();
66+
67+
return Route::has("{$locale}.{$name}");
68+
}
69+
70+
/**
71+
* Check if the current route is localized.
72+
*
73+
* @return bool
74+
*/
75+
protected function isCurrentRouteLocalized(): bool
76+
{
77+
$routeAction = LocaleConfig::getRouteAction();
78+
79+
return $this->route && $this->route->getAction($routeAction) !== null;
80+
}
81+
82+
/**
83+
* Check if the current route is localized and has a specific name.
84+
*
85+
* @param string|array $patterns
86+
* @param string|array $locales
87+
*
88+
* @return bool
89+
*/
90+
protected function isCurrentRouteLocalizedWithNamePattern($patterns = null, $locales = '*'): bool
91+
{
92+
$locales = Collection::make($locales);
93+
$names = Collection::make();
94+
95+
Collection::make($patterns)->each(function ($name) use ($locales, $names) {
96+
$locales->each(function ($locale) use ($name, $names) {
97+
$names->push($locale . '.' . $name);
98+
});
99+
});
100+
101+
return Route::is($names->all());
102+
}
103+
}

0 commit comments

Comments
 (0)