PHP
laravel

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も調整するか、使って無ければコメントアウト