必要になって調べた、外部のサイトへ様々な状況でリダイレクトする方法のまとめ
特定のページのみ作成しており、すでにある外部ドメインへリダイレクトするときに使いました。
やりたいこと
・外部のサイトへリダイレクト(外部ドメインを指定する)
- おまけ:バリデーションでNGの場合に特定の外部サイト(外部ドメイン)へリダイレクト
外部のサイトへリダイレクト(外部ドメインを指定する)
phpだとheader関数を使用したりするかと思います
<?php
header('Location: ' . $url, true, 301);
exit;
laravelだとredirect()->away()で可能でした。
redirect()->away($url)
urlには前回の.envに書いた外部ドメインへもリダイレクトできました。
redirect()->away(config('test.key_name'));
おまけ:バリデーションエラー時に外部サイトへリダイレクト
laravelはバリデーションエラーの場合、自動的にユーザーを以前のページヘリダイレクトする仕様のようで、
・バリデーションエラー時に以前のページではなく指定のページにリダイレクトしたい
・なおかつ外部のドメインにしたい
この2つを実現したい場合、FormRequestで実装可能でした。
参考にさせていただきました
FormRequestのバリデーションエラー時のリダイレクト先をカスタマイズする
protected function getRedirectUrl()
{
return config('test.key_name');
} //バリデーションエラー時は.envで設定した外部ドメインへリダイレクトされる
また、このリダイレクトさせたいURLを.envに書いた外部ドメインにしたい場合、直接 config()
のみでリダイレクトでき、
redirect()->away(config('test.key_name'));
とすると Header may not contain more than a single header
とエラーが出てしまいました。
validateメソッドや、validatorファサードでもできるか試したのですが、FormRequest以外はエラーがでてしまいうまくできず...
もしvalidateメソッドや、validatorファサードでもできる方法を知っている方がいたら教えていただけると嬉しいです
まとめ
redirect()->away()
を使う
FormRequestを使えばエラー時にリダイレクト先を任意に指定できる