Skip to content

Commit 4da17f0

Browse files
committed
Localize URL::temporarySignedRoute()
1 parent 9ea97dc commit 4da17f0

File tree

3 files changed

+64
-3
lines changed

3 files changed

+64
-3
lines changed

README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -620,17 +620,19 @@ It will only run if the current route is localized or a fallback route.
620620

621621
## 🖋 Generate Signed Route URLs
622622

623-
Generating a localized signed route URL is just as easy as generating normal route URLs.
623+
Generating a localized signed route and temporary signed route URL is just as easy as generating normal route URLs.
624624
Pass it the route name, the necessary parameters, and you will get the URL for the current locale.
625625

626626
```php
627-
$signedUrl = URL::signedRoute('reset.password', ['user' => $id], now()->addMinutes(30));
627+
$signedUrl = URL::signedRoute('reset.password', ['user' => $id]);
628+
$signedUrl = URL::temporarySignedRoute('reset.password', now()->addMinutes(30), ['user' => $id]);
628629
```
629630

630631
You can also generate a signed route URL for a specific locale:
631632

632633
```php
633-
$signedUrl = URL::signedRoute('reset.password', ['user' => $id], now()->addMinutes(30), true, 'nl');
634+
$signedUrl = URL::signedRoute('reset.password', ['user' => $id], null, true, 'nl');
635+
$signedUrl = URL::temporarySignedRoute('reset.password', now()->addMinutes(30), ['user' => $id], true, 'nl');
634636
```
635637

636638
Check out the [Laravel docs](https://laravel.com/docs/urls#signed-urls) for more info on signed routes.

src/Illuminate/Routing/UrlGenerator.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,22 @@ public function signedRoute($name, $parameters = [], $expiration = null, $absolu
7676
return $url;
7777
}
7878

79+
/**
80+
* Create a temporary signed route URL for a named route.
81+
*
82+
* @param string $name
83+
* @param \DateTimeInterface|\DateInterval|int $expiration
84+
* @param array $parameters
85+
* @param bool $absolute
86+
* @param string|null $locale
87+
*
88+
* @return string
89+
*/
90+
public function temporarySignedRoute($name, $expiration, $parameters = [], $absolute = true, $locale = null)
91+
{
92+
return $this->signedRoute($name, $parameters, $expiration, $absolute, $locale);
93+
}
94+
7995
/**
8096
* Resolve a localized version of the route name in the given locale.
8197
*

tests/Unit/Illuminate/Routing/UrlGeneratorTest.php

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,49 @@ public function it_generates_a_signed_route_url_for_a_specific_locale()
297297
$this->get($tamperedUrl)->assertSee('Invalid Signature');
298298
}
299299

300+
/** @test */
301+
public function it_generates_a_temporary_signed_route_url_for_the_current_locale()
302+
{
303+
$this->setSupportedLocales(['en', 'nl']);
304+
$this->setAppLocale('en');
305+
306+
$callback = function () {
307+
return Request::hasValidSignature()
308+
? 'Valid Signature'
309+
: 'Expired Signature';
310+
};
311+
312+
Route::get('en/route', $callback)->name('en.route.name');
313+
314+
$validUrl = URL::temporarySignedRoute('route.name', now()->addHour());
315+
$expiredUrl = URL::temporarySignedRoute('route.name', now()->subHour());
316+
317+
$this->get($validUrl)->assertSee('Valid Signature');
318+
$this->get($expiredUrl)->assertSee('Expired Signature');
319+
}
320+
321+
/** @test */
322+
public function it_generates_a_temporary_signed_route_url_for_a_specific_locale()
323+
{
324+
$this->setSupportedLocales(['en', 'nl']);
325+
$this->setAppLocale('en');
326+
327+
$callback = function () {
328+
return Request::hasValidSignature()
329+
? 'Valid Signature'
330+
: 'Expired Signature';
331+
};
332+
333+
Route::get('en/route', $callback)->name('en.route.name');
334+
Route::get('nl/route', $callback)->name('nl.route.name');
335+
336+
$validUrl = URL::temporarySignedRoute('route.name', now()->addHour(), [], true, 'nl');
337+
$expiredUrl = URL::temporarySignedRoute('route.name', now()->subHour(), [], true, 'nl');
338+
339+
$this->get($validUrl)->assertSee('Valid Signature');
340+
$this->get($expiredUrl)->assertSee('Expired Signature');
341+
}
342+
300343
/** @test */
301344
public function it_allows_routes_to_be_cached()
302345
{

0 commit comments

Comments
 (0)