Answers:
如果检查更改记录,则应找到以下内容:drupal_set_title()和drupal_get_title()已删除。
您必须阅读所有信息的变更通知,但这是一个起点:
drupal_get_title()
由于现在可以通过各种方式设置路线上的标题(参见上文),因此drupal_get_title()已被删除。在其位置,您应该调用title_resolver服务。
Drupal 7
<?php $title = drupal_get_title(); ?>
Drupal 8
<?php $request = \Drupal::request(); if ($route = $request->attributes->get(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT)) { $title = \Drupal::service('title_resolver')->getTitle($request, $route); } ?>
按照batch_test.module
(D8.4),以下内容应该可以正常工作:
$request = \Drupal::request();
$route_match = \Drupal::routeMatch();
$title = \Drupal::service('title_resolver')->getTitle($request, $route_match->getRouteObject());
有关更多信息,请参见public function TitleResolver::getTitle
。
该问题已接受的响应已过期:请参阅请求参数,路由名称和路由对象应通过RouteMatch访问。
您应该使用current_route_match服务检索当前路由,然后读取或修改其参数。这包装了任何Symfony等魔术。
在过程代码中,您将使用与以下代码相似的代码。
$route = \Drupal::routeMatch()->getCurrentRouteMatch()->getRouteObject();
$title = $route->getDefault('_title');
在面向对象的代码中,应使用依赖项注入并注入服务。
$route->getDefault('_title');
只有一个,该$route->getDefault('_title_callback');
怎么办?
Drupal 8
$request = \Drupal::request();
// Assuming the Request is $request.
if ($request->attributes->has('_title')) {
return $request->attributes->get('_title');
}
->get('_MAGIC')
不幸的是,该方法似乎已被弃用,并且大部分已从D8中删除:drupal.org/node/2124749