【Laravel8】サブディレクトリで動作させるためにコントローラー類のパスを変えた記録

Laravelではアプリケーションのディレクトリ内にappやpublicが一緒に入っています。

サブディレクトリでLaravelのアプリを動かしたいけど、public以下以外のapp等は公開ディレクトリに置きたくない!

という状況になり、数カ所パスの書き換えや処理の追加をしました。

パスのイメージ

以下のような構成になるイメージで説明を書いています。


┝public(ドキュメントルート)/XXX/index.php
┝ZZZ/app等

実際に書き換えた内容

public/index.php

以下のように目に付くパスを変更します。

require DIR.’/../storage/framework/maintenance.php’;

require DIR.’/../../XXX/storage/framework/maintenance.php’;

bootstrap/app.php

// 中略$app->singleton(    Illuminate\Contracts\Debug\ExceptionHandler::class,    App\Exceptions\Handler::class);// ドキュメントルート変更(追加分)$app->bind('path.public', function () {    return base_path().'/../public/XXX';});// 中略return $app;

public_path()メソッドで取得できる内容を変えるため、上記の追加分を足しています。

webpack.mix.js

npm run devを実行してpublic内にapp.cssとapp.jsが出力されます。

そのままだとwebpack.mix.jsがあるディレクトリに作成されてしまいます。

これをpublic/XXX/js/app/js、public/XXX/js/app/css以下に出力されるようにします。

mix.setPublicPath('../public/XXX/');mix.js('resources/js/app.js', 'js');mix.css('resources/css/app.css', 'css');

対応は以上です。

僕のほうでは小さなシステムしか作っていませんが、上記の対応で動作しています。

Good Luck!

コメント