Raw.php
Same filename in other branches
Namespace
Drupal\views\Plugin\views\argument_defaultFile
-
core/
modules/ views/ src/ Plugin/ views/ argument_default/ Raw.php
View source
<?php
namespace Drupal\views\Plugin\views\argument_default;
use Drupal\Core\Cache\Cache;
use Drupal\Core\Cache\CacheableDependencyInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Path\CurrentPathStack;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\path_alias\AliasManagerInterface;
use Drupal\views\Attribute\ViewsArgumentDefault;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Default argument plugin to use the raw value from the URL.
*
* @ingroup views_argument_default_plugins
*/
class Raw extends ArgumentDefaultPluginBase implements CacheableDependencyInterface {
/**
* The alias manager.
*
* @var \Drupal\path_alias\AliasManagerInterface
*/
protected $aliasManager;
/**
* The current path.
*
* @var \Drupal\Core\Path\CurrentPathStack
*/
protected $currentPath;
/**
* Constructs a Raw object.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin ID for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param \Drupal\path_alias\AliasManagerInterface $alias_manager
* The alias manager.
* @param \Drupal\Core\Path\CurrentPathStack $current_path
* The current path.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, AliasManagerInterface $alias_manager, CurrentPathStack $current_path) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->aliasManager = $alias_manager;
$this->currentPath = $current_path;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container->get('path_alias.manager'), $container->get('path.current'));
}
/**
* {@inheritdoc}
*/
protected function defineOptions() {
$options = parent::defineOptions();
$options['index'] = [
'default' => '',
];
$options['use_alias'] = [
'default' => FALSE,
];
return $options;
}
/**
* {@inheritdoc}
*/
public function buildOptionsForm(&$form, FormStateInterface $form_state) {
parent::buildOptionsForm($form, $form_state);
$form['index'] = [
'#type' => 'select',
'#title' => $this->t('Path component'),
'#default_value' => $this->options['index'],
// range(1, 10) returns an array with:
// - keys that count from 0 to match PHP array keys from explode().
// - values that count from 1 for display to humans.
'#options' => range(1, 10),
'#description' => $this->t('The numbering starts from 1, e.g. on the page admin/structure/types, the 3rd path component is "types".'),
];
$form['use_alias'] = [
'#type' => 'checkbox',
'#title' => $this->t('Use path alias'),
'#default_value' => $this->options['use_alias'],
'#description' => $this->t('Use path alias instead of internal path.'),
];
}
/**
* {@inheritdoc}
*/
public function getArgument() {
// Don't trim the leading slash since getAliasByPath() requires it.
$path = rtrim($this->currentPath
->getPath($this->view
->getRequest()), '/');
if ($this->options['use_alias']) {
$path = $this->aliasManager
->getAliasByPath($path);
}
$args = explode('/', $path);
// Drop the empty first element created by the leading slash since the path
// component index doesn't take it into account.
array_shift($args);
if (isset($args[$this->options['index']])) {
return $args[$this->options['index']];
}
}
/**
* {@inheritdoc}
*/
public function getCacheMaxAge() {
return Cache::PERMANENT;
}
/**
* {@inheritdoc}
*/
public function getCacheContexts() {
return [
'url',
];
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
Raw | Default argument plugin to use the raw value from the URL. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.