Now, a custom Response class overwritting the resolveUrl method could be resolved from the container whenever an Inertia response is returned.
Example implementation
```php
use Illuminate\Http\Request;
use Illuminate\Foundation\Application;
use Illuminate\Support\ServiceProvider;
use Inertia\Response as InertiaResponse;
final class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*/
public function boot(): void
{
$this->app->bind(InertiaResponse::class, CustomInertiaResponse::class);
}
}
final class CustomInertiaResponse extends InertiaResponse
{
public function resolveUrl(Request $request, array $props): string
{
$url = '...';
return $url;
}
}
```
This PR simply aims to make
Inertia\Response
more friendly to extension/customization by:toResponse
methodThis unlocks, for example, customizing how the
page.url
get's resolved by Inertia.In a particular case, it was necessary for me to ensure redirections keept the url fragment (
/abc#123
).Previously I had to:
Example implementation
```php inertia()) { return $next($request); } $requestedFrom = $request->headers->get('x-requested-from'); if (!$requestedFrom) { return $next($request); } $response = $next($request); if (!($response instanceof JsonResponse)) { return $response; } $parsedRequestedFrom = parse_url($requestedFrom); if (!is_array($parsedRequestedFrom)) { return $response; } if (!isset($parsedRequestedFrom['path'])) { return $response; } if (!isset($parsedRequestedFrom['fragment'])) { return $response; } $requestedFromUri = $parsedRequestedFrom['path'] . ( isset($parsedRequestedFrom['query']) ? "?{$parsedRequestedFrom['query']}" : '' ); $page = $response->getOriginalContent(); if ($requestedFromUri !== $page['url']) { return $response; } $page['url'] = "{$page['url']}#{$parsedRequestedFrom['fragment']}"; $response->setData($page); return $response; } } ```Now, a custom Response class overwritting the
resolveUrl
method could be resolved from the container whenever an Inertia response is returned.Example implementation
```php use Illuminate\Http\Request; use Illuminate\Foundation\Application; use Illuminate\Support\ServiceProvider; use Inertia\Response as InertiaResponse; final class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. */ public function boot(): void { $this->app->bind(InertiaResponse::class, CustomInertiaResponse::class); } } final class CustomInertiaResponse extends InertiaResponse { public function resolveUrl(Request $request, array $props): string { $url = '...'; return $url; } } ```