Laravel5.5にて確認。
URL生成するヘルパー関数について。
* url()
* route()
など
遭遇したケース
メールを送信する機能があり、メール本文にはサイトのURLが記載される。
メールは画面の操作をトリガーにしても送信されることもあるしバッチ処理から送信されることもある。
画面操作経由で送信されたメールとバッチ処理経由で送信されたメールとで、同じ箇所で作られているはずのURLの値が異なり、原因を調査していた。
url('/login')
の出力例
- 画面経由 → http://test.example.com/login になる
- バッチ経由 → http://localhost/login になる
→URLのベース部分が異なる
URLは url()
や route()
といったヘルパー関数経由で作っていた。
画面経由の場合
URLのベース部分は $_SERVER['HTTP_HOST']
の値になる
バッチ(コンソールコマンド)経由の場合
URLのベース部分は \Config::get('app.url')
の値になる
↓
画面経由とバッチ経由との両方で使う処理でURLヘルパーを使う場合値が一定にならないので、注意するか・ヘルパーを使わないほうがよさそう。
参考
URLヘルパーがURLのベース部分を作っている箇所の処理を追っていくと Symfony\Component\HttpFoundation\Request::getHost() あたりにいきつく。
https://github.com/symfony/http-foundation/blob/master/Request.php#L1137