Skip to content

Commit 26506fb

Browse files
committed
Extract LocalizedUrl logic to LocalizedUrlGenerator class
1 parent 61ad3a6 commit 26506fb

File tree

4 files changed

+110
-19
lines changed

4 files changed

+110
-19
lines changed

src/LocalizedRoutesServiceProvider.php

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

33
namespace CodeZero\LocalizedRoutes;
44

5+
use CodeZero\LocalizedRoutes\Macros\IsLocalizedMacro;
56
use CodeZero\LocalizedRoutes\Macros\LocalizedUrlMacro;
67
use CodeZero\LocalizedRoutes\Macros\UriTranslationMacro;
78
use CodeZero\LocalizedRoutes\Macros\LocalizedRoutesMacro;
@@ -47,6 +48,7 @@ public function register()
4748
*/
4849
protected function registerMacros()
4950
{
51+
IsLocalizedMacro::register();
5052
LocalizedRoutesMacro::register();
5153
LocalizedUrlMacro::register();
5254
UriTranslationMacro::register();

src/LocalizedUrlGenerator.php

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<?php
2+
3+
namespace CodeZero\LocalizedRoutes;
4+
5+
use Illuminate\Support\Collection;
6+
use Illuminate\Support\Facades\Route;
7+
use Illuminate\Support\Facades\URL;
8+
9+
class LocalizedUrlGenerator
10+
{
11+
/**
12+
* The current Route.
13+
*
14+
* @var \Illuminate\Routing\Route
15+
*/
16+
protected $route;
17+
18+
/**
19+
* Create a new LocalizedUrlGenerator instance.
20+
*/
21+
public function __construct()
22+
{
23+
$this->route = Route::current();
24+
}
25+
26+
/**
27+
* Check if the current route is localized.
28+
*
29+
* @return bool
30+
*/
31+
public function isLocalized()
32+
{
33+
return $this->route && $this->route->getAction('localized-routes-locale');
34+
}
35+
36+
/**
37+
* Generate a localized URL for the current request.
38+
*
39+
* @param string|null $locale
40+
* @param mixed $parameters
41+
* @param bool $absolute
42+
*
43+
* @return string
44+
*/
45+
public function generateFromRequest($locale = null, $parameters = null, $absolute = true)
46+
{
47+
// Route does not exist (default 404)
48+
if ( ! $this->route) {
49+
return URL::current();
50+
}
51+
52+
return $this->generateFromRoute($locale, $parameters, $absolute);
53+
}
54+
55+
/**
56+
* Generate a localized URL using the current Route instance.
57+
*
58+
* @param string|null $locale
59+
* @param mixed $parameters
60+
* @param bool $absolute
61+
*
62+
* @return string
63+
*/
64+
protected function generateFromRoute($locale = null, $parameters = null, $absolute = true)
65+
{
66+
if ( ! $this->isLocalized()) {
67+
return URL::current();
68+
}
69+
70+
$parameters = $parameters ?: $this->route->parameters();
71+
$model = Collection::make($parameters)->first();
72+
73+
if ($model instanceof ProvidesRouteParameters) {
74+
$parameters = $model->getRouteParameters($locale);
75+
}
76+
77+
if (is_callable($parameters)) {
78+
$parameters = $parameters($locale);
79+
}
80+
81+
return route($this->route->getName(), $parameters, $absolute, $locale);
82+
}
83+
}

src/Macros/IsLocalizedMacro.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
namespace CodeZero\LocalizedRoutes\Macros;
4+
5+
use CodeZero\LocalizedRoutes\LocalizedUrlGenerator;
6+
use Illuminate\Support\Facades\App;
7+
use Illuminate\Support\Facades\Route;
8+
9+
class IsLocalizedMacro
10+
{
11+
/**
12+
* Register the macro.
13+
*
14+
* @return void
15+
*/
16+
public static function register()
17+
{
18+
Route::macro('isLocalized', function () {
19+
return App::make(LocalizedUrlGenerator::class)->isLocalized();
20+
});
21+
}
22+
}

src/Macros/LocalizedUrlMacro.php

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

33
namespace CodeZero\LocalizedRoutes\Macros;
44

5-
use CodeZero\LocalizedRoutes\ProvidesRouteParameters;
6-
use Illuminate\Support\Collection;
5+
use CodeZero\LocalizedRoutes\LocalizedUrlGenerator;
6+
use Illuminate\Support\Facades\App;
77
use Illuminate\Support\Facades\Route;
8-
use Illuminate\Support\Facades\URL;
98

109
class LocalizedUrlMacro
1110
{
@@ -17,22 +16,7 @@ class LocalizedUrlMacro
1716
public static function register()
1817
{
1918
Route::macro('localizedUrl', function ($locale = null, $parameters = null, $absolute = true) {
20-
if (( ! $route = Route::current()) || ! $route->getAction('localized-routes-locale')) {
21-
return URL::current();
22-
}
23-
24-
$parameters = $parameters ?: $route->parameters();
25-
$model = Collection::make($parameters)->first();
26-
27-
if ($model instanceof ProvidesRouteParameters) {
28-
$parameters = $model->getRouteParameters($locale);
29-
}
30-
31-
if (is_callable($parameters)) {
32-
$parameters = $parameters($locale);
33-
}
34-
35-
return route($route->getName(), $parameters, $absolute, $locale);
19+
return App::make(LocalizedUrlGenerator::class)->generateFromRequest($locale, $parameters, $absolute);
3620
});
3721
}
3822
}

0 commit comments

Comments
 (0)