drupal :: request()vs $ request_stack-> getCurrentRequest() -- 8 领域 drupal 相关 的问题

Drupal::request() vs $request_stack->getCurrentRequest()


11
vote

问题

中文

这些似乎返回相同的东西:

Drupal::request()

$request_stack->getCurrentRequest()

这是获取当前请求的首选方法,为什么?是这些弃用之一吗?任何其他优点/缺点?

谢谢!

英文原文

These seem to return the same thing:

\Drupal::request()

$request_stack->getCurrentRequest()

Which is the preferred way to get the current request and why? Is one of these to be deprecated? Any other advantages/disadvantages?

Thanks!

  
   
   

回答列表

16
 
vote
vote
最佳答案
 

如何获取当前请求对象:

程序

在程序代码中获取静态包装器 Drupal

的请求
  $request = Drupal::request();   

服务

在服务中获取从注入的请求堆栈的请求:

  $request = $this->requestStack->getCurrentRequest();   

controller

在一个控制器中,您可以通过包括键入的请求参数来从路由参数堆栈中提取请求。 UserController

的示例
  use SymfonyComponentHttpFoundationRequest;    public function resetPass(Request $request, $uid, $timestamp, $hash) {               // use $request   }   

没有必要在路由定义中定义路由参数。请求始终可用。

形式

在表单方法中获取 getRequest()

的请求
    public function submitForm(array &$form, FormStateInterface $form_state) {     $request = $this->getRequest();     ...   }   

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

 

How to get the current request object:

Procedural

In procedural code get the request from the static wrapper \Drupal:

$request = \Drupal::request(); 

Service

In a service get the request from the injected request stack:

$request = $this->requestStack->getCurrentRequest(); 

Controller

In a controller you can pull the request from the route argument stack by including a typed request parameter. An example from UserController:

use Symfony\Component\HttpFoundation\Request;    public function resetPass(Request $request, $uid, $timestamp, $hash) {               // use $request   } 

It's not necessary to define the route parameter in the route definition. The request is always available.

Form

In a form method get the request from getRequest():

  public function submitForm(array &$form, FormStateInterface $form_state) {     $request = $this->getRequest();     ...   } 

Don't use the injected requestStack property directly, because it is not available for all Form API callbacks.

 
 
         
         

相关问题

1  在Cron运行期间将段落字段设置为null时出错  ( Error while set a paragraph field to null during cron run ) 
我正在使用drupal 8,我已经实现了 hook_cron ,将节点字段设置为null。这是我的代码: if ($lesson->field_lesson_ended_at->value < $current_time && $session_id && count($paragraphs) > 0) { ...

2  链接字段从foo.cgi的查询字符串从foo.cgi?123456到foo.cgi?0 =  ( Link field sanitizes query string from foo cgi123456 to foo cgi0 ) 
在我的drupal 8站点上,我有一个自定义内容类型,其中包含一个字段链接字段。当我创建一个节点并将以下外部URL添加为链接字段的值之一: http://www.isfdb.org/cgi-bin/title.cgi?1580 呈现页面包含此Mangled查询字符串: http://www.isfdb....

1  创建模块:表单配置类无效?  ( Creating a module form config class invalid ) 
我目前有一个工作模块,将ical链接解析为事件。这部分是工作。我现在正在尝试的是为我的模块创建一个配置页,允许我将链接输入到此ical文件。 我遵循多个指南,似乎似乎在同一位置结束: InvalidArgumentException: Class "Drupalgoogle_calendarFormGoogle...

1  在要需要的实体表单上设置字段  ( Setting a field on an entity form to be required ) 
我在内容实体上有一个多值实体参考字段,我使用延伸延伸FormBase的ContententityForm的自定义表单类来显示,该类别扩展了EntityForm。 我想设置要需要的字段:使用此表单时,必须选择至少一个实体以引用。然而,我不想使这个实体级别约束,因为在所有情况下都不是绝对需要。 在表单中,更改钩子(以及我...

0  安全模型和菜单访问  ( Security model and menu access ) 
drupal 8.6.1 我有一些我想隐藏一些用户的菜单:一个带有关于站点管理员的文档的管理菜单;带有贡献者文档的贡献者菜单。等等。 似乎Drupal更喜欢每个菜单输入以链接到某事物。我有这些菜单指向 route:<nolink> ,并根据需要挂起的内容,以实现 https://www.drupal.org/pr...

7  缓存:“Drush Cr”与管理员工具栏“冲洗所有缓存”  ( Cache drush cr versus admin toolbar flush all caches ) 
醉汉的Cr会让所有的高速缓存都不会做什么? 委托块缓存? 我疯了试图设置一个自定义块的枝条模板,最终弄清楚我的代码没有出错,但刷新所有高速缓存都没有足够的并且润滑Cr会做这项工作。 https://www.drupal.org/node/2640110 编辑:可能会有我的本地开发设置的偏见吗? $sett...

1  块的动态重量  ( Dynamic weight for blocks ) 
我想改变侧边栏中的块权重,所以块位置是每个请求的更改。 有没有办法来做? ...

6  如何使用导出视图显示为内容引用提供嵌套的JSON数组?  ( How do i deliver a nested json array for content reference with export view disp ) 
我创建了一个产品内容类型,内容参考文章(一个产品到许多文章)。然后我添加了字段"内容:ID" 内容:标题"和" (Field_Article:内容)内容:标题"到新的REST导出视图。 "(field_article:content)内容:标题" 来自Field_article引用的关系"内容" 我在高级添加。 ...

6  当添加或更新的某些包的节点时,如何在块上清除缓存?  ( How do you clear cache on a block when node of certain bundle added or updated ) 
如果要在更新任何节点时清除渲染数组上的缓存,则可以添加为cache_tag,"node_list" : '#cache' => [ 'tags' => ['node_list'] ], 但是当仅添加或更新某个捆绑的节点时,没有办法执行此操作。 如果您有一个块,例如,当添加或更新带有捆绑"文章...

6  为什么不“苏打所有人”的工作?  ( Why doesnt drush cc all work ) 
我安装醉酒,但我猜,大多数命令都不工作。我尝试了 drush cc all 并得到以下输出: 命令缓存清除需要一个更高的引导级别来运行 - 您将需要从更常用的Drupal环境中的调用侦听来运行此命令。 无法执行DRUSH命令'CC所有'。 找不到一个Drupal安装目录 drush status 输出...

3  为什么会有多语言网站有时会说“save(这个翻译)”和其他时候说“保存(所有翻译)”?  ( Why would a multilingual site sometimes say save this translation and other ) 
我们有一个多语言drupal 8站点支持17种不同的语言和更多的这些语言的本地化版本。 我一直注意到有时我编辑一个节点时它会说"save(这个翻译)" 但是其他时候它会说"保存(所有翻译)" 。 是什么触发它有时以不同的方式行动?我们是否配置了我们的翻译/多语言设置? 我们在做什么我相信我们希望他们彼此独立保存。 ...

1  邮件主题和身体使用MailManager保持空  ( Mail subject and body remain empty using mailmanager ) 
我已经摆弄了在Drupal 8中的自定义模块中发送邮件。 邮件被发送,但主题和身体是空的。 这是几天的问题,我无法让它工作。代码和var_dump在下面。我只是找不到这个问题。也许有人可以! hook_mail : <?php /** * Implements hook_mail(). */ functi...

2  显示注释作者电子邮件.html.twig  ( Show comment author e mail in comment html twig ) 
匿名用户发布评论时可以留下他们的电子邮件,但是如何在Comminy.html.twig中将此电子邮件显示为纯文本值? ...

0  如何自定义购物车?  ( How to customize the shopping cart ) 
这是一个真正的拼图,如果我禁用显示模式的图像字段,它仍然显示在购物车中。 有人可以向我解释如何自定义购物车? 我不明白。 "预告片" 显示模式不存在,并且视图中未列出其他显示模式。为什么? ...

1  主题形式。形状元素  ( Theming forms form element ) 
请,帮助。是否可能为form-compent.html.twig实现不同的模板? for表单"用户形式" 一个模板,以及其他形式的第二模板。 ...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.