public function UltimenuController::load in Ultimenu 8.2
Loads and renders a region via AJAX.
Parameters
\Symfony\Component\HttpFoundation\Request $request: The current request object.
Return value
array Return the requested region based on the given region parameters.
Throws
\Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException
\Symfony\Component\HttpKernel\Exception\NotFoundHttpException
See also
http://symfony.com/doc/current/routing.html#required-and-optional-placeh...
1 string reference to 'UltimenuController::load'
File
- src/
Controller/ UltimenuController.php, line 102
Class
- UltimenuController
- Provides controller for Ultimenu region route.
Namespace
Drupal\ultimenu\ControllerCode
public function load(Request $request) {
$mlid = $request->query
->get('mlid');
$sub = $request->query
->get('sub');
if (isset($mlid) && ($regions = $this->ultimenuManager
->getSetting('regions'))) {
// Creates the menu link instance.
$link = $this->menuLinkManager
->createInstance($mlid);
if (!$link || !$link
->isEnabled()) {
throw new NotFoundHttpException();
}
// Creates Ultimenu region response.
$response = new AjaxResponse();
$rid = $this->ultimenuManager
->getTool()
->getRegionKey($link);
// Only proceeds if we have a valid/ enabled region.
if (!empty($regions[$rid])) {
$menu_name = $link
->getMenuName();
$plugin_id = 'ultimenu_block:ultimenu-' . $menu_name;
$block = $this->ultimenuManager
->getEntityTypeManager()
->getStorage('block')
->loadByProperties([
'plugin' => $plugin_id,
]);
$block = reset($block);
$config = $block
->get('settings');
$config['current_path'] = $this
->getCurrentPath($request);
$config['has_submenu'] = $sub;
$config['menu_name'] = $menu_name;
$config['mlid'] = $mlid;
$config['title'] = $this->ultimenuManager
->getTool()
->getTitle($link);
// Creates render context.
$context = new RenderContext();
// Builds the flyout.
$render = $this->ultimenuManager
->getRenderer()
->executeInRenderContext($context, function () use ($rid, $config) {
return $this->ultimenuManager
->buildFlyout($rid, $config);
});
// Prevents empty render from screwing up the response. Hence the
// region is provided, but none of the blocks is given:
// The render array has not yet been rendered, hence not all
// attachments have been collected yet.
if ($render) {
// Add metadata.
if (!$context
->isEmpty()) {
$bubbleable_metadata = $context
->pop();
BubbleableMetadata::createFromRenderArray($render)
->merge($bubbleable_metadata)
->applyTo($render);
}
$response
->addCommand(new UltimenuHtmlCommand('[data-ultiajax-region="' . $rid . '"]', $render, NULL, 'region'));
}
return $response;
}
throw new AccessDeniedHttpException();
}
throw new NotFoundHttpException();
}