エラー:Non-static method Illuminate\Http\Request::input() should not be called staticallyの解決法


Illuminate\Http\Requestクラスと、Requestファサードを同時に使う

コントローラを作成して、Request $requestのようにRequestクラスを利用して、ビュー側から送った値を取り出せます。

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PostController extends Controller
{
    public function index(Request $request)
    {
        //Requestクラスを利用
        $result = $request->post;

        return view('home', compact('result'));
    }
}

しかし、ここでRequestファサードも同時に使いたいときはどうすればよいでしょうか。
単純に下のようにしてみます。

public function index(Request $request)
    {
        $result = $request->post;

     //Requestファサードを利用
        $name = Request::input('name');

        return view('home', compact('result', 'name'));
    }

しかし、これを実行すると、エラーが出てしまいます。

 Non-static method Illuminate\Http\Request::input() should not be called statically

これは、

use Illuminate\Http\Request;

で、Requestクラスを呼んでいるのに、Request::input()という、Staticで使っちゃダメですよってことを言っているわけです。

そこで、下のコードを加えてやると、無事にRequestファサードとして使えるようになるんですが、

use Request;

次は、

Cannot use Request as Request because the name is already in use

というエラーが出てしまいます。
これは、Requestという名前がすでに使われているので、同じ名前は使用できませんという意味です。

解決方法

というわけで、解決方法ですが、Requestファサードの名前をPostRequestに変更して、

use Illuminate\Http\Request;
use Request as PostRequest;
public function index(Request $request)
    {
        $result = $request->post;

     //Requestファサードは、PostRequestに変更
        $name = PostRequest::input('name');

        return view('home', compact('result', 'name'));
    }

とすれば、うまく動きます。