3 namespace Drupal\entity_browser\Controllers;
5 use Drupal\Component\Utility\Xss;
6 use Drupal\Core\Controller\ControllerResolverInterface;
7 use Drupal\Core\Controller\HtmlFormController;
8 use Drupal\Core\DependencyInjection\ClassResolverInterface;
9 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
10 use Drupal\Core\Entity\EntityTypeManagerInterface;
11 use Drupal\Core\Form\FormBuilderInterface;
12 use Drupal\Core\Routing\RouteMatchInterface;
13 use Symfony\Component\DependencyInjection\ContainerInterface;
14 use Symfony\Component\HttpFoundation\Request;
17 * Standalone entity browser page.
19 class EntityBrowserFormController extends HtmlFormController implements ContainerInjectionInterface {
22 * Current route match service.
24 * @var \Drupal\Core\Routing\RouteMatchInterface
26 protected $currentRouteMatch;
29 * The browser storage.
31 * @var \Drupal\Core\Entity\EntityStorageInterface
33 protected $browserStorage;
38 * @var \Symfony\Component\HttpFoundation\Request
43 * Constructs Entity browser form controller.
45 * @param \Drupal\Core\Controller\ControllerResolverInterface $controller_resolver
46 * The controller resolver.
47 * @param \Drupal\Core\Form\FormBuilderInterface $form_builder
49 * @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver
51 * @param RouteMatchInterface $route_match
52 * Current route match service.
53 * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
54 * Entity type manager service.
55 * @param \Symfony\Component\HttpFoundation\Request $request
58 public function __construct(ControllerResolverInterface $controller_resolver, FormBuilderInterface $form_builder, ClassResolverInterface $class_resolver, RouteMatchInterface $route_match, EntityTypeManagerInterface $entity_type_manager, Request $request) {
59 parent::__construct($controller_resolver, $form_builder, $class_resolver);
60 $this->currentRouteMatch = $route_match;
61 $this->browserStorage = $entity_type_manager->getStorage('entity_browser');
62 $this->request = $request;
63 $this->formBuilder = $form_builder;
69 public static function create(ContainerInterface $container) {
71 $container->get('controller_resolver'),
72 $container->get('form_builder'),
73 $container->get('class_resolver'),
74 $container->get('current_route_match'),
75 $container->get('entity.manager'),
76 $container->get('request_stack')->getCurrentRequest()
83 protected function getFormObject(RouteMatchInterface $route_match, $form_arg) {
84 $browser = $this->loadBrowser();
85 if ($original_path = $this->request->get('original_path')) {
86 $browser->addAdditionalWidgetParameters(['path_parts' => explode('/', $original_path)]);
89 return $browser->getFormObject();
93 * Standalone entity browser title callback.
95 public function title() {
96 $browser = $this->loadBrowser();
97 return Xss::filter($browser->label());
101 * Loads entity browser object for this page.
103 * @return \Drupal\entity_browser\EntityBrowserInterface
104 * Loads the entity browser object
106 protected function loadBrowser() {
107 /** @var $route \Symfony\Component\Routing\Route */
108 $route = $this->currentRouteMatch->getRouteObject();
109 /** @var $browser \Drupal\entity_browser\EntityBrowserInterface */
110 return $this->browserStorage->load($route->getDefault('entity_browser_id'));