laravelの.envにいるAPP_URLを使いたい

作成日:2023-11-13, 更新日:2023-11-13

基本

「.env」の「APP_URL」が使われているとか使っていないとか…よくわからんのでソースを追いかけてみた
結果、使っていないっぽい

「echo url()」を実行したときにドコでホストを設定しているのか知りたかった

  1. 「vendor/laravel/framework/src/Illuminate/Foundation/helpers.php」の「url()」で「app(UrlGenerator::class)->to($path, $parameters, $secure);」を実行
  2. 「vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php」の「formatRoot()」で「$this->request->root()」を実行
  3. 「vendor/laravel/framework/src/Illuminate/Http/Request.php」の「root()」で「$this->getSchemeAndHttpHost()」を実行
  4. 「vendor/symfony/http-foundation/Request.php」の「getSchemeAndHttpHost()」で「$this->getHttpHost()」を実行
  5. 「vendor/symfony/http-foundation/Request.getHttpHost()」で「$this->getHost()」を実行

「.env」のAPP_URLを使う

単純に「使うだけ」なら簡単

▼「config('app.url')」で取得可能

echo config('app.url');

「url()」で「.env」の「APP_URL」を使いたい

  1. ServiceProviderの作成
  2. ServiceProviderの修正
  3. config/app.phpにServiceProviderを追加

ServiceProviderの作成

▼artisanコマンドで実行

> php artisan make:provider URLServiceProvider

ServiceProviderの修正

▼「app/Providers/URLServiceProvider.php」の「boot()」内

public function boot()
{
    \Illuminate\Support\Facades\URL::forceRootUrl(config('app.url'));
}

config/app.phpにServiceProviderを追加

▼「config/app.php」の「providers[]」に追加(※読込み順は関係ないらしく、最初でも最後でも好きなトコで良いらしい)

'providers' => [
    ~ 省略 ~
    App\Providers\URLServiceProvider::class,
    ~ 省略 ~
],

動かない…

適当なページにurl()とかechoして動けば成功なんだけど…動かないときはそもそも読み込まれているのかがわからん

読み込まれているのか?

▼「app/Providers/URLServiceProvider.php」の「register()」と「boot()」に追記

\Illuminate\Support\Facades\Log::info('load URLServiceProvider::' . __FUNCTION__ . '() line='.__LINE__);

boot()のほうは最初に一回だけ読み込まれるだけらしいのでリロードしただけじゃダメっぽいような気がする…設定の問題か、キャッシュの問題かはよくわからん
xampp環境だったので気軽にサーバ再起動して確認していた

キャッシュのクリア

▼config、cache、routeのキャッシュ(?)のクリア

> php artisan config:cache
> php artisan cache:clear
> php artisan route:clear

▼マルっとキャッシュのクリアっぽい

> php artisan optimize:clear