HtmlEntityFormController.php 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace Drupal\Core\Entity;
  3. use Drupal\Core\Controller\FormController;
  4. use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait;
  5. use Drupal\Core\Form\FormBuilderInterface;
  6. use Drupal\Core\Routing\RouteMatchInterface;
  7. use Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface;
  8. /**
  9. * Wrapping controller for entity forms that serve as the main page body.
  10. */
  11. class HtmlEntityFormController extends FormController {
  12. use DeprecatedServicePropertyTrait;
  13. /**
  14. * {@inheritdoc}
  15. */
  16. protected $deprecatedProperties = ['entityManager' => 'entity.manager'];
  17. /**
  18. * The entity type manager service.
  19. *
  20. * @var \Drupal\Core\Entity\EntityTypeManagerInterface
  21. */
  22. protected $entityTypeManager;
  23. /**
  24. * Constructs a new \Drupal\Core\Routing\Enhancer\FormEnhancer object.
  25. *
  26. * @param \Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface $argument_resolver
  27. * The argument resolver.
  28. * @param \Drupal\Core\Form\FormBuilderInterface $form_builder
  29. * The form builder.
  30. * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
  31. * The entity type manager service.
  32. */
  33. public function __construct(ArgumentResolverInterface $argument_resolver, FormBuilderInterface $form_builder, EntityTypeManagerInterface $entity_type_manager) {
  34. parent::__construct($argument_resolver, $form_builder);
  35. if ($entity_type_manager instanceof EntityManagerInterface) {
  36. @trigger_error('Passing the entity.manager service to HtmlEntityFormController::__construct() is deprecated in Drupal 8.7.0 and will be removed before Drupal 9.0.0. Pass the new dependencies instead. See https://www.drupal.org/node/2549139.', E_USER_DEPRECATED);
  37. $this->entityTypeManager = \Drupal::entityTypeManager();
  38. }
  39. else {
  40. $this->entityTypeManager = $entity_type_manager;
  41. }
  42. }
  43. /**
  44. * {@inheritdoc}
  45. */
  46. protected function getFormArgument(RouteMatchInterface $route_match) {
  47. return $route_match->getRouteObject()->getDefault('_entity_form');
  48. }
  49. /**
  50. * {@inheritdoc}
  51. *
  52. * Instead of a class name or service ID, $form_arg will be a string
  53. * representing the entity and operation being performed.
  54. * Consider the following route:
  55. * @code
  56. * path: '/foo/{node}/bar'
  57. * defaults:
  58. * _entity_form: 'node.edit'
  59. * @endcode
  60. * This means that the edit form for the node entity will used.
  61. * If the entity type has a default form, only the name of the
  62. * entity {param} needs to be passed:
  63. * @code
  64. * path: '/foo/{node}/baz'
  65. * defaults:
  66. * _entity_form: 'node'
  67. * @endcode
  68. */
  69. protected function getFormObject(RouteMatchInterface $route_match, $form_arg) {
  70. // If no operation is provided, use 'default'.
  71. $form_arg .= '.default';
  72. list ($entity_type_id, $operation) = explode('.', $form_arg);
  73. $form_object = $this->entityTypeManager->getFormObject($entity_type_id, $operation);
  74. // Allow the entity form to determine the entity object from a given route
  75. // match.
  76. $entity = $form_object->getEntityFromRouteMatch($route_match, $entity_type_id);
  77. $form_object->setEntity($entity);
  78. return $form_object;
  79. }
  80. }