3 namespace Drupal\language_test\Controller;
5 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
6 use Drupal\Core\Language\LanguageManagerInterface;
7 use Drupal\Core\StringTranslation\StringTranslationTrait;
9 use Drupal\language\ConfigurableLanguageInterface;
10 use Symfony\Component\DependencyInjection\ContainerInterface;
11 use Symfony\Component\HttpFoundation\Request;
12 use Symfony\Component\HttpKernel\HttpKernelInterface;
15 * Controller routines for language_test routes.
17 class LanguageTestController implements ContainerInjectionInterface {
19 use StringTranslationTrait;
22 * The HTTP kernel service.
24 * @var \Symfony\Component\HttpKernel\HttpKernelInterface
26 protected $httpKernel;
29 * The language manager service.
31 * @var \Drupal\Core\Language\LanguageManagerInterface
33 protected $languageManager;
36 * Constructs a new LanguageTestController object.
38 * @param \Symfony\Component\HttpKernel\HttpKernelInterface $httpKernel
41 public function __construct(HttpKernelInterface $httpKernel, LanguageManagerInterface $language_manager) {
42 $this->httpKernel = $httpKernel;
43 $this->languageManager = $language_manager;
49 public static function create(ContainerInterface $container) {
50 return new static($container->get('http_kernel'), $container->get('language_manager'));
54 * Route entity upcasting test helper.
56 * @param \Drupal\language\ConfigurableLanguageInterface $configurable_language
57 * The ConfigurableLanguage object from the route.
60 * Testing feedback based on (translated) entity title.
62 public function testEntity(ConfigurableLanguageInterface $configurable_language) {
63 return ['#markup' => $this->t('Loaded %label.', ['%label' => $configurable_language->label()])];
67 * Returns links to the current page with different langcodes.
69 * Using #type 'link' causes these links to be rendered with the link
72 public function typeLinkActiveClass() {
73 // We assume that 'en' and 'fr' have been configured.
74 $languages = $this->languageManager->getLanguages();
78 '#title' => t('Link to the current path with no langcode provided.'),
79 '#url' => Url::fromRoute('<current>'),
82 'id' => 'no_lang_link',
84 'set_active_class' => TRUE,
89 '#title' => t('Link to a French version of the current path.'),
90 '#url' => Url::fromRoute('<current>'),
92 'language' => $languages['fr'],
96 'set_active_class' => TRUE,
101 '#title' => t('Link to an English version of the current path.'),
102 '#url' => Url::fromRoute('<current>'),
104 'language' => $languages['en'],
108 'set_active_class' => TRUE,
115 * Uses a sub request to retrieve the 'user' page.
117 * @return \Symfony\Component\HttpFoundation\Response
118 * The kernels response to the sub request.
120 public function testSubRequest() {
121 $request = Request::createFromGlobals();
122 $server = $request->server->all();
123 if (basename($server['SCRIPT_FILENAME']) != basename($server['SCRIPT_NAME'])) {
124 // We need this for when the test is executed by run-tests.sh.
125 // @todo Remove this once run-tests.sh has been converted to use a Request
127 $server['SCRIPT_FILENAME'] = $server['SCRIPT_NAME'];
128 $base_path = ltrim($server['REQUEST_URI'], '/');
131 $base_path = $request->getBasePath();
133 $sub_request = Request::create($base_path . '/user', 'GET', $request->query->all(), $request->cookies->all(), [], $server);
134 return $this->httpKernel->handle($sub_request, HttpKernelInterface::SUB_REQUEST);