首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >\Drupal::request() vs $request_堆栈->getCurrentRequest()

\Drupal::request() vs $request_堆栈->getCurrentRequest()
EN

Drupal用户
提问于 2018-10-10 21:58:29
回答 1查看 13.4K关注 0票数 17

这些似乎也是一样的东西:

\Drupal::request()

$request_stack->getCurrentRequest()

获得当前请求的首选方法是哪一种?为什么?其中之一会被否决吗?还有其他优点/缺点吗?

谢谢!

EN

回答 1

Drupal用户

回答已采纳

发布于 2018-10-11 06:32:16

如何获取当前请求对象:

程序

在过程代码中,从静态包装器\Drupal获取请求:

代码语言:javascript
复制
$request = \Drupal::request();

服务

在服务中,从注入参数@request_stack获取当前请求:

module_name/module_name.services.yml文件:

代码语言:javascript
复制
services:
  custom.service:
    class: Drupal\module_name\Service\CustomService
    arguments:
      - '@request_stack'

module_name/src/Service/CustomService.php文件:

代码语言:javascript
复制
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的一个例子:

代码语言:javascript
复制
use Symfony\Component\HttpFoundation\Request;

  public function resetPass(Request $request, $uid, $timestamp, $hash) {          
    // use $request
  }

没有必要在路由定义中定义路由参数。请求总是可用的。

<#>表格

在表单方法中,从getRequest()获取请求:

代码语言:javascript
复制
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $request = $this->getRequest();
    ...
  }

不要直接使用注入的requestStack属性,因为它并不适用于所有的表单API回调。

票数 23
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/270725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档