リダイレクト
非 GET の Inertia リクエストを手動で、または <Link> 要素経由で行う場合は、常に適切な Inertia のリダイレクトレスポンスを返すようにしてください。
たとえば、コントローラで新しいユーザーを作成する場合、「store」エンドポイントは、ユーザーの「index」ページのような標準の GET エンドポイントへリダイレクトを返す必要があります。Inertia はこのリダイレクトを自動的に追従し、それに応じてページを更新します。
class UsersController extends Controller
{
public function index()
{
return Inertia::render('Users/Index', [
'users' => User::all(),
]);
}
public function store(Request $request)
{
User::create(
$request->validate([
'name' => ['required', 'max:50'],
'email' => ['required', 'max:50', 'email'],
])
);
return to_route('users.index');
}
}303 レスポンスコード
PUT、PATCH、または DELETE リクエストの後にリダイレクトする場合は、303 レスポンスコードを使用する必要があります。そうしないと、後続のリクエストが GET リクエストとして扱われません。303 リダイレクトは 302 リダイレクトと非常に似ていますが、フォローアップのリクエストが明示的に GET リクエストへ変更されます。
公式のサーバーサイドアダプターのいずれかを使用している場合、すべてのリダイレクトは自動的に 303 リダイレクトへ変換されます。
外部リダイレクト
Inertia リクエストを処理している最中に、外部の Web サイトや、アプリ内の別の非 Inertia エンドポイントへリダイレクトする必要がある場合があります。これは、Inertia::location() メソッドを使用して、サーバーサイドで開始される window.location の遷移を行うことで実現できます。
return Inertia::location($url);Inertia::location() メソッドは 409 Conflict レスポンスを生成し、遷移先の URL を X-Inertia-Location ヘッダーに含めます。このレスポンスがクライアントサイドで受信されると、Inertia は自動的に window.location = url の遷移を実行します。