public function ViewsHandlerManager::getHandler in Drupal 8
Same name and namespace in other branches
- 9 core/modules/views/src/Plugin/ViewsHandlerManager.php \Drupal\views\Plugin\ViewsHandlerManager::getHandler()
- 10 core/modules/views/src/Plugin/ViewsHandlerManager.php \Drupal\views\Plugin\ViewsHandlerManager::getHandler()
Fetches a handler from the data cache.
Parameters
array $item: An associative array representing the handler to be retrieved:
- table: The name of the table containing the handler.
- field: The name of the field the handler represents.
string|null $override: (optional) Override the actual handler object with this plugin ID. Used for aggregation when the handler is redirected to the aggregation handler.
Return value
\Drupal\views\Plugin\views\ViewsHandlerInterface An instance of a handler object. May be a broken handler instance.
File
- core/
modules/ views/ src/ Plugin/ ViewsHandlerManager.php, line 81
Class
- ViewsHandlerManager
- Plugin type manager for all views handlers.
Namespace
Drupal\views\PluginCode
public function getHandler($item, $override = NULL) {
$table = $item['table'];
$field = $item['field'];
// Get the plugin manager for this type.
$data = $table ? $this->viewsData
->get($table) : $this->viewsData
->getAll();
if (isset($data[$field][$this->handlerType])) {
$definition = $data[$field][$this->handlerType];
foreach ([
'group',
'title',
'title short',
'label',
'help',
'real field',
'real table',
'entity type',
'entity field',
] as $key) {
if (!isset($definition[$key])) {
// First check the field level.
if (!empty($data[$field][$key])) {
$definition[$key] = $data[$field][$key];
}
elseif (!empty($data['table'][$key])) {
$definition_key = $key === 'entity type' ? 'entity_type' : $key;
$definition[$definition_key] = $data['table'][$key];
}
}
}
// @todo This is crazy. Find a way to remove the override functionality.
$plugin_id = $override ?: $definition['id'];
// Try to use the overridden handler.
$handler = $this
->createInstance($plugin_id, $definition);
if ($override && method_exists($handler, 'broken') && $handler
->broken()) {
$handler = $this
->createInstance($definition['id'], $definition);
}
return $handler;
}
// Finally, use the 'broken' handler.
return $this
->createInstance('broken', [
'original_configuration' => $item,
]);
}