我想在Laravel中从我的控制器的构造函数中访问一个请求变量。我怎么能这样做?
这是我的路线:
Route::post('bookGetById', ['uses' => 'v1\BookController@getBookById']);
这是我的控制器:
public function __construct(Request $request = null)
{
parent::__construct();
$this->bookStructure = new bookStructure($request->imageHeight);
}
但请求变量始终为null。如何将请求传递给构造函数?
答案 0 :(得分:0)
不知道你正在使用什么版本的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");
答案 1 :(得分:-1)
我知道您在询问如何将请求传递给类构造函数,但您可能需要重新考虑它并将其传递给控制器,该控制器验证请求并使用经过验证的请求变量实例化您的类。