【Laravel 】公開フォルダを複数作る

Laravelの1つのプロジェクトに公開フォルダを複数作る方法のメモ。


Laravel公開フォルダを複数作る

Laravelの公開フォルダを分けて同じプロジェクトのリソースを共有したいので作成。


各フォルダを作成

公開フォルダを増やすに伴って各フォルダを増やします。

Lalavel
  ┣route
  ┣resources
  ┗public

今回フォルダをadmin(管理用フォルダ)、front(一般用フォルダ)として作成。

元々public、route、resourcesフォルダに入っていたファイルはそれぞれ作ったフォルダにコピーしてください。

Lalavel
  ┣route
  ┃  ┣admin
  ┃  ┗front
  ┣resources
  ┃  ┣admin
  ┃  ┗front
  ┗public
      ┣admin
      ┗front

ソース変更

publicフォルダの階層が深くなったので、その修正と公開フォルダを見分ける値を入れます。


まずは「/laravel/public/admin/index.php」の修正です。

<?php

/**
 * Laravel - A PHP Framework For Web Artisans
 *
 * @package  Laravel
 * @author   Taylor Otwell <taylor@laravel.com>
 */

define('LARAVEL_START', microtime(true));
define('ADMIN', true);

「/laravel/public/front/index.php」の場合は11行目のADMINをfalseにしてください。

もし、公開フォルダを増やす場合は定数名を適切なものにして数値などで分けることをオススメします。


require __DIR__.'/../vendor/autoload.php';    //変更前
require __DIR__.'/../../vendor/autoload.php'; //変更後

階層が深くなったので他ファイルの読み込みの先を修正します。


routeファイルの読み込みファイルを変更します。

「mapWebRoutes」、「mapApiRoutes」で各公開フォルダ用のrouteファイルを読み込み先を変更してください。/p>

    protected function mapWebRoutes()
    {
        if(ADMIN){
            Route::middleware('web')
            ->namespace($this->namespace)
            ->group(base_path('routes/admin/web.php'));
        }else{
            Route::middleware('web')
            ->namespace($this->namespace)
            ->group(base_path('routes/front/web.php'));
        }
    }

    protected function mapApiRoutes()
    {
        if(ADMIN){
            Route::prefix('api')
            ->middleware('api')
            ->namespace($this->namespace)
            ->group(base_path('routes/admin/api.php'));
        }else{
            Route::prefix('api')
            ->middleware('api')
            ->namespace($this->namespace)
            ->group(base_path('routes/front/api.php'));
        }
    }

Viewの取得先変更を行います。

ADMINの値によって取得してくれるresourcesのパスを変更してくれるようにします。/p>

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | View Storage Paths
    |--------------------------------------------------------------------------
    |
    | Most templating systems load templates from disk. Here you may specify
    | an array of paths that should be checked for your views. Of course
    | the usual Laravel view path has already been registered for you.
    |
    */

    'paths' => [
        (ADMIN?resource_path('admin/views'):resource_path('front/views')),
    ],

    /*
    |--------------------------------------------------------------------------
    | Compiled View Path
    |--------------------------------------------------------------------------
    |
    | This option determines where all the compiled Blade templates will be
    | stored for your application. Typically, this is within the storage
    | directory. However, as usual, you are free to change this value.
    |
    */

    'compiled' => realpath(storage_path('framework/views')),

];


これで完成。

あとはpublicフォルダのadmin、frontを別々のサーバーでドキュメントルートにすればいいですし、publicフォルダをドキュメントルートにした場合に、「http://localhost/public/admin」、「http://localhost/public/front」でも接続できます。


まとめ

1つのサーバーに複数プロジェクト入れたりとかリンクを貼って対応とかの方法はあったのですが、単純に公開フォルダを分けるだけのものがなかったのでざっくりとやりました。

他にいい方法があったのかも知れませんが苦肉の策と思ってお許しください。


0 件のコメント :

コメントを投稿