这些似乎也是一样的东西:
\Drupal::request()
$request_stack->getCurrentRequest()
获得当前请求的首选方法是哪一种?为什么?其中之一会被否决吗?还有其他优点/缺点吗?
谢谢!
发布于 2018-10-11 06:32:16
如何获取当前请求对象:
程序
在过程代码中,从静态包装器\Drupal获取请求:
$request = \Drupal::request();服务
在服务中,从注入参数@request_stack获取当前请求:
module_name/module_name.services.yml文件:
services:
custom.service:
class: Drupal\module_name\Service\CustomService
arguments:
- '@request_stack'module_name/src/Service/CustomService.php文件:
use Symfony\Component\HttpFoundation\RequestStack;
/** @var \Symfony\Component\HttpFoundation\RequestStack */
protected $requestStack;
class customService
{
public function __construct(RequestStack $requestStack) {
$this->requestStack = $requestStack;
}
public function doSomething() {
// use $this->requestStack->getCurrentRequest()
}
}控制器
在控制器中,可以通过包含一个类型化请求参数从路由参数堆栈中提取请求。UserController的一个例子:
use Symfony\Component\HttpFoundation\Request;
public function resetPass(Request $request, $uid, $timestamp, $hash) {
// use $request
}没有必要在路由定义中定义路由参数。请求总是可用的。
<#>表格
在表单方法中,从getRequest()获取请求:
public function submitForm(array &$form, FormStateInterface $form_state) {
$request = $this->getRequest();
...
}不要直接使用注入的requestStack属性,因为它并不适用于所有的表单API回调。
https://drupal.stackexchange.com/questions/270725
复制相似问题