comparison core/modules/rest/src/Plugin/Deriver/EntityDeriver.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 1fec387a4317
comparison
equal deleted inserted replaced
-1:000000000000 0:4c8ae668cc8c
1 <?php
2
3 namespace Drupal\rest\Plugin\Deriver;
4
5 use Drupal\Core\Entity\EntityManagerInterface;
6 use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
7 use Symfony\Component\DependencyInjection\ContainerInterface;
8
9 /**
10 * Provides a resource plugin definition for every entity type.
11 *
12 * @see \Drupal\rest\Plugin\rest\resource\EntityResource
13 */
14 class EntityDeriver implements ContainerDeriverInterface {
15
16 /**
17 * List of derivative definitions.
18 *
19 * @var array
20 */
21 protected $derivatives;
22
23 /**
24 * The entity manager.
25 *
26 * @var \Drupal\Core\Entity\EntityManagerInterface
27 */
28 protected $entityManager;
29
30 /**
31 * Constructs an EntityDeriver object.
32 *
33 * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
34 * The entity manager.
35 */
36 public function __construct(EntityManagerInterface $entity_manager) {
37 $this->entityManager = $entity_manager;
38 }
39
40 /**
41 * {@inheritdoc}
42 */
43 public static function create(ContainerInterface $container, $base_plugin_id) {
44 return new static(
45 $container->get('entity.manager')
46 );
47 }
48
49 /**
50 * {@inheritdoc}
51 */
52 public function getDerivativeDefinition($derivative_id, $base_plugin_definition) {
53 if (!isset($this->derivatives)) {
54 $this->getDerivativeDefinitions($base_plugin_definition);
55 }
56 if (isset($this->derivatives[$derivative_id])) {
57 return $this->derivatives[$derivative_id];
58 }
59 }
60
61 /**
62 * {@inheritdoc}
63 */
64 public function getDerivativeDefinitions($base_plugin_definition) {
65 if (!isset($this->derivatives)) {
66 // Add in the default plugin configuration and the resource type.
67 foreach ($this->entityManager->getDefinitions() as $entity_type_id => $entity_type) {
68 $this->derivatives[$entity_type_id] = [
69 'id' => 'entity:' . $entity_type_id,
70 'entity_type' => $entity_type_id,
71 'serialization_class' => $entity_type->getClass(),
72 'label' => $entity_type->getLabel(),
73 ];
74
75 $default_uris = [
76 'canonical' => "/entity/$entity_type_id/" . '{' . $entity_type_id . '}',
77 'create' => "/entity/$entity_type_id",
78 ];
79
80 foreach ($default_uris as $link_relation => $default_uri) {
81 // Check if there are link templates defined for the entity type and
82 // use the path from the route instead of the default.
83 if ($link_template = $entity_type->getLinkTemplate($link_relation)) {
84 $this->derivatives[$entity_type_id]['uri_paths'][$link_relation] = $link_template;
85 }
86 else {
87 $this->derivatives[$entity_type_id]['uri_paths'][$link_relation] = $default_uri;
88 }
89 }
90
91 $this->derivatives[$entity_type_id] += $base_plugin_definition;
92 }
93 }
94 return $this->derivatives;
95 }
96
97 }