如何将POST请求传递给Laravel中的构造函数?

时间:2017-06-14 11:16:37

标签: php laravel constructor request

我想在Laravel中从我的控制器的构造函数中访问一个请求变量。我怎么能这样做?

这是我的路线:

Route::post('bookGetById',     ['uses' => 'v1\BookController@getBookById']);

这是我的控制器:

public function __construct(Request $request = null)
{
    parent::__construct();

    $this->bookStructure = new bookStructure($request->imageHeight);
}

但请求变量始终为null。如何将请求传递给构造函数?

2 个答案:

答案 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)

我知道您在询问如何将请求传递给类构造函数,但您可能需要重新考虑它并将其传递给控制器​​,该控制器验证请求并使用经过验证的请求变量实例化您的类。