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'));
}
とすれば、うまく動きます。