Rolavelで独自のリクエストオブジェクトをロールバックする


拡張または変更するには複数の方法がありますRequest ラーラベルのオブジェクト.あなたの方法を見せたいのですが、私の意見では最もきれいなものです.

マクロ
あなたはすでに約macro メソッド.これは、新しい方法を導入する最も明白な方法ですRequest オブジェクトには若干の欠点があります.
Request::macro('project', function () {
    return $this->user();
});
この解決策は簡単ですが、いくつかの欠陥があります.
既存のメソッドをオーバーライドまたは変更できません.
これらの新しい方法がどこから来ているかは、明らかでありません.
NO NO IDE自動補完.

カスタムリクエストオブジェクト
自分で作るのが好きですRequest オブジェクト.
<?php

namespace App\Http;

use Illuminate\Http\Request as LaravelRequest;

class Request extends LaravelRequest
{
    /**
     * Get the team making the request.
     *
     * @param  string|null  $guard
     * @return mixed
     */
    public function team($guard = null)
    {
        return $this->user($guard);
    }
}
それはシンプルでクリーンで簡単です.“マクロ”を介して新しいメソッドを導入するよりもはるかに良い.
さて、この新しいカスタムクラスをベースとしてララベルを教える必要があります.
単にhandle メソッドでApp\Http\Kernel クラスを使用するクラスRequest オブジェクト.
<?php

namespace App\Http;

use App\Http\Request;
use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    // ...

    /**
     * Handle an incoming HTTP request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function handle($request)
    {
        return parent::handle(
            Request::createFrom($request)
        );
    }
}
... そして最後にApp\Http\Request コンテナーは常に同じインスタンスを返します.
$this->app->alias('request', Request::class);

ハッピーコーディング!