手動で、または<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');
}
}
PUT
、PATCH
、または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
訪問を実行します。