Laravelでサブドメイン対応（さくらレンタルサーバ）

やりたいこと

main.hoge.hoge　→　routes/main.phpでルーティング
api.hoge.hoge　→　routes/api.phpでルーティング
test.hoge.hoge →　routes/test.phpでルーティング


##①テスト環境と本番環境でドメインを分けるためにconfig設定

configフォルダ内にmyapp.php作成
\Config::get('myapp.domain.main')でアクセスできる

```config/myapp.php
<?php
return [
    'domain' => [
        'main' => 'main.hoge.hoge',
        'api' => 'api.hoge.hoge',
        'test' => 'test.hoge.hoge',
    ]
];
```
コンフィグファイルのキャッシュクリアをしないと反映されない。

```
$ php artisan config:cache
```

##②ルーティング設定


```/app/Providers/RouteServiceProvider.php

class RouteServiceProvider extends ServiceProvider
{

    public function map()
    {
        $this->mapApiRoutes();

        //$this->mapWebRoutes();
        $this->mapMainRoutes();
        $this->mapTestRoutes();
    }

    protected function mapMainRoutes()
    {
        Route::domain(\Config::get('myapp.domain.main'))
             ->middleware('web')
             ->namespace($this->namespace)
             ->group(base_path('routes/main.php'));
    }
    protected function mapTestRoutes()
    {
        Route::domain(\Config::get('myapp.domain.test'))
             ->middleware('web')
             ->namespace($this->namespace)
             ->group(base_path('routes/test.php'));
    }
    protected function mapApiRoutes()
    {
        Route::domain(\Config::get('api.domain.test'))
             ->middleware('api')
             ->namespace($this->namespace)
             ->group(base_path('routes/api.php'));
    }
```
routes/main.php,routes/test.phpを作ってルーティングさせる。

おわり。

#CROS対応
サブドメインで分けるとaxiosからの通信がクロスドメインで引っかかるので設定
※バージョン指定しないとエラーになります。

```
$ composer require barryvdh/laravel-cors:^0.11
```
続きは下記参照
[Laravelでクロスオリジン(CORS)に対応する為のメモです](https://www.nogson.blog/entry/2019/05/05/154237)

※crosの設定を上に持ってこないと一部ヘッダが付与されない場合がある？

```
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            'cros',
            'throttle:60,1',
            'bindings',
            
        ],
    ];

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'cros' => \Barryvdh\Cors\HandleCors::class,
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    ];
```


#セッション共有
.envにSESSION_DOMAIN設定すればサブドメイン間でセッション共有可能

'''.enb
SESSION_DRIVER=file
SESSION_LIFETIME=120
SESSION_DOMAIN='.hoge.hoge'
'''