リダイレクト

非 GET の Inertia リクエストを手動で、または <Link> 要素経由で行う場合は、常に適切な Inertia のリダイレクトレスポンスを返すようにしてください。

たとえば、コントローラで新しいユーザーを作成する場合、「store」エンドポイントは、ユーザーの「index」ページのような標準の GET エンドポイントへリダイレクトを返す必要があります。Inertia はこのリダイレクトを自動的に追従し、それに応じてページを更新します。

php
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 レスポンスコード

PUTPATCH、または DELETE リクエストの後にリダイレクトする場合は、303 レスポンスコードを使用する必要があります。そうしないと、後続のリクエストが GET リクエストとして扱われません。303 リダイレクトは 302 リダイレクトと非常に似ていますが、フォローアップのリクエストが明示的に GET リクエストへ変更されます。

公式のサーバーサイドアダプターのいずれかを使用している場合、すべてのリダイレクトは自動的に 303 リダイレクトへ変換されます。

外部リダイレクト

Inertia リクエストを処理している最中に、外部の Web サイトや、アプリ内の別の非 Inertia エンドポイントへリダイレクトする必要がある場合があります。これは、Inertia::location() メソッドを使用して、サーバーサイドで開始される window.location の遷移を行うことで実現できます。

php
return Inertia::location($url);

Inertia::location() メソッドは 409 Conflict レスポンスを生成し、遷移先の URL を X-Inertia-Location ヘッダーに含めます。このレスポンスがクライアントサイドで受信されると、Inertia は自動的に window.location = url の遷移を実行します。