lunr-8.x-1.0/src/Plugin/views/style/LunrSearchIndexJson.php
src/Plugin/views/style/LunrSearchIndexJson.php
<?php
namespace Drupal\lunr\Plugin\views\style;
use Drupal\Core\Cache\Cache;
use Drupal\Core\Cache\CacheableDependencyInterface;
use Drupal\views\Plugin\views\style\StylePluginBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Serializer\SerializerInterface;
/**
* The style plugin for serialized output formats.
*
* This class is largely based on the core REST module.
*
* @ingroup views_style_plugins
*
* @ViewsStyle(
* id = "lunr_search_index_json",
* title = @Translation("Lunr search index JSON"),
* help = @Translation("Serializes views row data to JSON."),
* display_types = {"lunr_search_index"}
* )
*/
class LunrSearchIndexJson extends StylePluginBase implements CacheableDependencyInterface {
/**
* {@inheritdoc}
*/
protected $usesRowPlugin = TRUE;
/**
* {@inheritdoc}
*/
protected $usesGrouping = FALSE;
/**
* The serializer which serializes the views result.
*
* @var \Symfony\Component\Serializer\Serializer
*/
protected $serializer;
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static(
$configuration,
$plugin_id,
$plugin_definition,
$container->get('serializer')
);
}
/**
* Constructs a Plugin object.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, SerializerInterface $serializer) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->serializer = $serializer;
}
/**
* {@inheritdoc}
*/
public function render() {
$rows = [];
foreach ($this->view->result as $row_index => $row) {
$this->view->row_index = $row_index;
$rows[] = $this->view->rowPlugin->render($row);
}
unset($this->view->row_index);
return $this->serializer->serialize($rows, 'json');
}
/**
* {@inheritdoc}
*/
public function getCacheContexts() {
return [];
}
/**
* {@inheritdoc}
*/
public function getCacheMaxAge() {
return Cache::PERMANENT;
}
/**
* {@inheritdoc}
*/
public function getCacheTags() {
return [];
}
/**
* {@inheritdoc}
*/
public function calculateDependencies() {
$dependencies = parent::calculateDependencies();
$dependencies['module'][] = 'serialization';
return $dependencies;
}
}
