如何将$request添加到构造方法中?



我在此类的构造方法中定义了请求。

/**
* @var Request
*/
protected $request;
public function __construct(Request $request)
{
$this->request = $request;
}

现在,当我尝试在这样的某个函数中检索帖子数据时:

public function postListsAction()
{
dd($this->request->get("title"));
}

我收到以下错误:

无法自动连线服务"App\Controller\ListController":方法"__construct(("的参数"$request"引用类"Symfony\Component\HttpFoundation\Request",但不存在此类服务。

如何解决此问题?

正如错误消息所述,您尝试注入的请求类未声明为服务。请改用 RequestStack:

namespace AppNewsletter;
use SymfonyComponentHttpFoundationRequestStack;
class NewsletterManager
{
protected $requestStack;
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}
public function anyMethod()
{
$request = $this->requestStack->getCurrentRequest();
// ... do something with the request
}
}

问候

我认为问题是您正在尝试将请求作为服务注入构造函数。你能试试以下方法吗

use SymfonyComponentHttpFoundationRequest;

public function postListsAction(Request $request)
{
dd($request->get("title"));
// .....
}

Symfony文档:https://symfony.com/doc/4.3/controller.html#the-request-object-as-a-controller-argument

可注入服务类称为RequestStack您可以通过调用getCurrentRequest来访问当前请求

例如

namespace AppManagers;
use SymfonyComponentHttpFoundationRequestStack;
class SomeManager
{
protected $requestStack;
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}
public function serviceMethod()
{
$request = $this->requestStack->getCurrentRequest();
}
}

当您调用该控制器并且您不传递任何发布数据(我的意思是任何请求对象(时,构造函数会自动调用。因此,您需要在接收帖子数据的函数上传递$request对象。

public function postListsAction(Request $request)
{
dd($request->title);
}
  • laravel:6.6.0
  • 菲律宾语:7.2.10

我的演示:

路由器:

Route::get('/test','TestTestController@index');
protected $request;
public function __construct(Request $request)
{
$this->request = $request;
}
public function index()
{
dd($this->request->get("name"));
}

它正在工作!

最新更新