получить язык на форме alter

Я пытаюсь получить выбранный язык для указанного узла (я имею в виду в форме редактирования) в форме alter со следующим фрагментом в MODULENAME.module

use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\HttpFoundation\Request;

function MODULENAME_form_alter(array &$form, FormStateInterface $form_state, $form_id) {
    if ($form_id == 'node_trends_edit_form') {
        kint($form);
        kint($form_state->getValue('langcode'));
        kint($form_state->getValues());
    }
}

НО результаты для kint($form_state->getValue('langcode')); kint($form_state->getValues()); являются NULL.

как я могу выбрать язык для узла на form_alter

4 голоса | спросил zhilevan 17 SatEurope/Moscow2016-12-17T13:09:55+03:00Europe/Moscow12bEurope/MoscowSat, 17 Dec 2016 13:09:55 +0300 2016, 13:09:55

2 ответа


4

Согласно этот вопрос , сначала попробуйте получить $node = $form_state->getFormObject()->getEntity();, затем получить langcode с             $langcode = $node->langcode->value;

<?php

use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\HttpFoundation\Request;

function MODULENAME_form_alter(array &$form, FormStateInterface $form_state, $form_id) {
    if ($form_id == 'node_trends_edit_form') {
        $node = $form_state->getFormObject()->getEntity();
        $langcode = $node->langcode->value;
        kint($langcode);

    }
}

он ВОЗВРАТ РЕДАКТИРОВАНИЕ УЗЛА LANGCODE => en, ar, tr, fr и т. д.

ответил zhilevan 17 SatEurope/Moscow2016-12-17T14:01:58+03:00Europe/Moscow12bEurope/MoscowSat, 17 Dec 2016 14:01:58 +0300 2016, 14:01:58
5

Код для получения языка сущности присутствует в language_form_alter() , который вы можете взять в качестве примера для написания кода.

  $form_object = $form_state->getFormObject();
  if ($form_object instanceof ContentEntityFormInterface && $form_object->getEntity()->getEntityType()->hasKey('langcode')) {
    /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
    $entity = $form_object->getEntity();
    $entity_type = $entity->getEntityType();
    $langcode_key = $entity_type->getKey('langcode');

    // Your code goes here.

  }

Если вы уверены, что форма редактирования предназначена для объекта контента (например, узла), вы можете удалить часть, проверяющую, что $form_object является объектом объекта контента. Я бы оставил его, но это мои личные предпочтения.

ответил kiamlaluno 17 SatEurope/Moscow2016-12-17T13:43:27+03:00Europe/Moscow12bEurope/MoscowSat, 17 Dec 2016 13:43:27 +0300 2016, 13:43:27

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132