リダイレクト

手動で、または<Link>要素を介して非GETのInertiaリクエストを行う場合は、常に適切な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レスポンスコード

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

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

外部リダイレクト

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

return Inertia::location($url);

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