Posted at

LaravelをAPIサーバとしてしか使わない(ので不要なしくみを排除したい)

初版:2018.12.7


  • laravel-5.7, php-7.2


対応


  1. ルーティング調整

  2. 不要ファイル削除

  3. レスポンスをjsonに固定

  4. Auth系いらない場合


ルーティング調整



  • webルート削除



    • routes/web.phpを削除


    • app/Providers/RouteServiceProvider.phpからmapWebRoutes()の実装と呼び出しを削除


    • app/Http/Kernel.php$middlewareGroups['web']を削除




  • apiルートのprefix消す



    • app/Providers/RouteServiceProvider.phpmapApiRoutes()内、prefix('api')prefix(null)にする




不要ファイル削除



  • Controllers



    • app/Http/Controllers/Auth/* すべて削除




  • frontend系


    • package.json

    • webpack.mix.js

    • public/css/app.css

    • public/js/app.js

    • public/svg/*

    • resources/js/*

    • resources/sass/*


    • resources/views/*


      • viewsは空にして、resources/views/.gitkeepでも入れとく






  • Middleware



    • app/Http/Middleware/VerifyCsrfToken.php * Kernel.phpでのクラス名指定も削除


    • app/Http/Middleware/EncryptCookies.php * 同上削除


    • app/Http/Middleware/RedirectIfAuthenticated.php * 同上削除




レスポンスをjsonに固定

Requestクラスを上書き

<?php

/**
* always json
* - public/index.phpでRequestクラスを直接書き換え
* - 以下は入れ替わってるのを確認
* - `request()`
* - `\Illuminate\Support\Facades\Request::getFacadeRoot()`
* - DI: `function hoge(Request $req) {}`
* ほかになにか使われ方あったっけ..
*/

namespace App\Http;

class Request extends \Illuminate\Http\Request
{
/**
* override
*/

public function expectsJson()
{
return true;
}

/**
* override
*/

public function wantsJson()
{
return true;
}
}


/public/index.php

 $response = $kernel->handle(

- $request = Illuminate\Http\Request::capture()
+ $request = \App\Http\Request::capture()
);


Auth系いらない場合



  • 削除


    • app/Http/Middleware/Authenticate.php

    • app/Providers/AuthServiceProvider.php

    • config/auth.php




  • 修正



    • config/app.php でAuthServiceProviderを削除

        // App\Providers\AuthServiceProvider::class, // Removed
    



  • app/User.php をどうにかする


    • Auth系の依存をはずす


    • config/channels.phpも調整するか、使って無ければコメントアウト