MaterioDecoupledLanguageLinks.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. namespace Drupal\materio_decoupled\Controller;
  3. use Drupal\Core\Controller\ControllerBase;
  4. use Symfony\Component\DependencyInjection\ContainerInterface;
  5. use Drupal\Core\Language\LanguageManagerInterface;
  6. use Drupal\Core\Url;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\JsonResponse;
  9. /**
  10. * Class AjaxHomeController.
  11. */
  12. class MaterioDecoupledLanguageLinks extends ControllerBase {
  13. /*
  14. * @var \Drupal\Core\Entity\EntityTypeManagerInterface
  15. */
  16. protected $languageManager;
  17. /**
  18. * {@inheritdoc}
  19. */
  20. public static function create(ContainerInterface $container) {
  21. return new static(
  22. $container->get('language_manager')
  23. );
  24. }
  25. /**
  26. * Constructs a new MaterioDecoupledLanguageLinks object.
  27. *
  28. * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
  29. * The language manager.
  30. */
  31. public function __construct(LanguageManagerInterface $language_manager) {
  32. $this->languageManager = $language_manager;
  33. }
  34. /**
  35. * getPathTranslationLinks
  36. *
  37. * @return string
  38. * Return translations links given a path.
  39. */
  40. public function getPathTranslationLinks(Request $request) {
  41. $post_data = json_decode( $request->getContent(),TRUE);
  42. $path = $post_data['path'];
  43. // build the links
  44. $url_object = \Drupal::service('path.validator')->getUrlIfValid($path);
  45. $route_name = $url_object->getRouteName();
  46. $route_parameters = $url_object->getrouteParameters();
  47. $languages = $this->languageManager->getNativeLanguages();
  48. foreach ($languages as $key => $language) {
  49. $url = Url::fromRoute($route_name, $route_parameters, ["language"=>$language]);
  50. $links[$key] = [
  51. "title" => $language->get('label'),
  52. "url" => $url->toString()
  53. ];
  54. }
  55. $data = array(
  56. "links" => $links
  57. );
  58. return new JsonResponse($data);
  59. }
  60. }