Laravelでパッケージサービスの開発を行っており、ベースとなるソースコードとサービス毎に対応を行うソースコードをGitのリポジトリごと分ける必要があったり、Vue.jsを使用したSPAにしたいという要望もあり、考えた結果、ベースとなるソースコードにLaravel本体を設置し、サービス毎の処理を記述するファイルをパッケージとして外部に設置するという形を取りました。
(※サービス毎の処理はあまり多くはないということなので、外部に置いて必要であれば読み込むという感じです!)
その際に、設定ファイル関連を外部のパッケージ側に設定する必要があったので、その時の対応内応として記載します。
.envの読み込み処理を確認
loadEnvironmentFromでgrep検索してみるとApplication.php内で処理されているので、このファイルを確認してみます。
# find ./ -type f |xargs grep loadEnvironmentFrom
/vendor/laravel/framework/src/Illuminate/Foundation/Application.php: public function loadEnvironmentFrom($file)
すると.envの読み込みパスを設定できる関数を発見!!
public function useEnvironmentPath($path)
{
$this->environmentPath = $path;
return $this;
}
.envの読み込みパス変更
.envを置いている外部ディレクトリのパスをuseEnvironmentPathにセットすることで対応できました!
※設定はbootstrap/app.php内の$appをセット後に記述しました。
$ vi bootstrap/app.php
$envFilePath = dirname(__DIR__).'/../package/src/';
$app->useEnvironmentPath($envFilePath);
念のためコマンド実行も確認してみましたが、問題なく読み込まれました!
php artisan migrate:refresh --seed
ちなみに、.env以外の名前のファイルを読み込みたい時は「loadEnvironmentFrom」を使用します。
$envFileName = '.envTest';
$app->loadEnvironmentFrom($envFileName);
対応方法自体は意外とシンプルでした(^^;
コメント