Skip to content

Commit 9f1be5e

Browse files
Hotfix/livewire route binding (#20)
* Get route prefix instead of the first segment * Fix tests for nullable locale * Fix tests * Fix route locale binding for livewire routes * Fix styling * If routename is null, do nothing * Require fixed patch version of laravel-locale-collection --------- Co-authored-by: Sander Van Damme <[email protected]> Co-authored-by: Sander Van Damme <[email protected]> Co-authored-by: jyrkidn <[email protected]>
1 parent b3b0b7e commit 9f1be5e

File tree

4 files changed

+24
-10
lines changed

4 files changed

+24
-10
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"license": "MIT",
1111
"require": {
1212
"php": "^8.2",
13-
"codedor/laravel-locale-collection": "^1.2",
13+
"codedor/laravel-locale-collection": "^1.2.1",
1414
"illuminate/contracts": "^10.0|^11.0|^12.0",
1515
"spatie/laravel-package-tools": "^1.12"
1616
},

src/Http/Middleware/SetLocale.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
use Closure;
66
use Codedor\LocaleCollection\Facades\LocaleCollection;
7+
use Codedor\LocaleCollection\Locale;
78
use Illuminate\Http\Request;
9+
use Illuminate\Support\Str;
810

911
class SetLocale
1012
{
@@ -20,19 +22,19 @@ public function handle(Request $request, Closure $next)
2022
return $next($request);
2123
}
2224

23-
$locale = $request->segment(1);
25+
$locale = Str::after($request->route()?->getPrefix(), '/');
2426

2527
if (is_livewire_route($request)) {
2628
$snapshot = json_decode($request->json('components.0.snapshot', ''), true);
29+
$locale = $snapshot['memo']['locale'] ?? null;
2730

28-
if (isset($snapshot['memo']['locale'])) {
29-
$locale = $snapshot['memo']['locale'];
30-
} else {
31-
$locale = null;
31+
if ($locale) {
32+
$locale = LocaleCollection::firstWhere(fn (Locale $l) => $l->locale() === $locale)
33+
?->urlLocale();
3234
}
3335
}
3436

35-
if (! $locale) {
37+
if (is_null($locale)) {
3638
return $next($request);
3739
}
3840

src/TranslateRoute.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ public static function getAllForNameOrCurrent(?string $routeName = null, array $
3939
$routeName = request()->route()?->getName();
4040

4141
$locale = LocaleCollection::firstLocale(app()->getLocale());
42-
if (Str::startsWith($routeName, $locale->routePrefix() . '.')) {
42+
43+
if ($routeName && Str::startsWith($routeName, $locale->routePrefix() . '.')) {
4344
$routeName = (string) Str::of($routeName)->after($locale->routePrefix() . '.');
4445
}
4546
}

tests/Feature/SetLocaleTest.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use Codedor\LocaleCollection\Locale;
55
use Codedor\TranslatableRoutes\Http\Middleware\SetLocale;
66
use Illuminate\Http\Request as HttpRequest;
7+
use Illuminate\Support\Facades\Route;
78
use Symfony\Component\HttpFoundation\Request;
89
use Symfony\Component\HttpFoundation\Response;
910

@@ -14,7 +15,13 @@
1415
});
1516

1617
it('sets the correct locale', function () {
17-
createRequestAndHandleMiddleware('/en');
18+
LocaleCollection::registerRoutes(function () {
19+
Route::get('', function () {
20+
return translated_routes();
21+
})->name('home');
22+
});
23+
24+
createRequestAndHandleMiddleware('/en', true);
1825

1926
expect(LocaleCollection::getCurrent())
2027
->locale()->toBe('en-GB');
@@ -34,10 +41,14 @@
3441
->toBeNull();
3542
});
3643

37-
function createRequestAndHandleMiddleware($url)
44+
function createRequestAndHandleMiddleware(string $url, bool $setRouteResolver = false)
3845
{
3946
$request = Request::create($url);
4047
$request = HttpRequest::createFromBase($request);
4148

49+
if ($setRouteResolver) {
50+
$request->setRouteResolver(fn () => Route::getRoutes()->match($request));
51+
}
52+
4253
return (new SetLocale)->handle($request, fn () => new Response);
4354
}

0 commit comments

Comments
 (0)