如何将POST请求传递给Laravel中的构造函数?
问题描述:
我想从Laravel中的控制器的构造函数访问请求变量。我怎样才能做到这一点?如何将POST请求传递给Laravel中的构造函数?
这是我的路线:
Route::post('bookGetById', ['uses' => 'v1\[email protected]']);
,这里是我的控制器:
public function __construct(Request $request = null)
{
parent::__construct();
$this->bookStructure = new bookStructure($request->imageHeight);
}
但请求变量总是空。我如何将请求传递给构造函数?
答
我知道您在问如何将请求传递给类构造函数,但您可能需要重新考虑它并将其传递给验证请求并使用验证的请求变量实例化您的类的控制器。
+0
为什么投票?! –
+0
我没有downvote,但我标记这不是一个答案,因为它应该是一个问题的评论,而不是一个答案。 – apokryfos
答
不知道你使用的是什么版本的laravel,但我认为在5.2+控制器是在请求被绑定之前创建的。有一个变通方法:
public function __construct()
{
parent::__construct();
$this->middleware(function (Request $r, $next) {
$this->bookStructure = new bookStructure($request->imageHeight);
return $next($r);
});
}
不过我建议这样做是通过服务容器:
文件AppServiceProvider
$this->app->bind("bookstructure.withheight", function ($app) {
return new bookStructure($app->make("request")->get("imageHeight",0));
});
可以实例您bookStructure无论你通过需要它:
app()->make("bookstructure.withheight");
任何特定的原因t跟这个? –
你不会因为Laravel将请求路由到控制器方法'getBookById',而无法向构造函数注入请求。你可以尝试'['uses'=>'v1 \ BookController @__构造']'。应该工作,但似乎毫无意义 –