laravelの.envにいるAPP_URLを使いたい
作成日:2023-11-13, 更新日:2023-11-13
基本
「.env」の「APP_URL」が使われているとか使っていないとか…よくわからんのでソースを追いかけてみた
結果、使っていないっぽい
「echo url()」を実行したときにドコでホストを設定しているのか知りたかった
- 「vendor/laravel/framework/src/Illuminate/Foundation/helpers.php」の「url()」で「app(UrlGenerator::class)->to($path, $parameters, $secure);」を実行
- 「vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php」の「formatRoot()」で「$this->request->root()」を実行
- 「vendor/laravel/framework/src/Illuminate/Http/Request.php」の「root()」で「$this->getSchemeAndHttpHost()」を実行
- 「vendor/symfony/http-foundation/Request.php」の「getSchemeAndHttpHost()」で「$this->getHttpHost()」を実行
- 「vendor/symfony/http-foundation/Request.getHttpHost()」で「$this->getHost()」を実行
「.env」のAPP_URLを使う
単純に「使うだけ」なら簡単
▼「config('app.url')」で取得可能
echo config('app.url');
「url()」で「.env」の「APP_URL」を使いたい
- ServiceProviderの作成
- ServiceProviderの修正
- 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