Ответьте на этот вопрос, но у меня недостаточно репутации, чтобы попросить пояснения в комментарии.
Я портирую предоставленный модуль на Drupal 8. Sugested код на вышеупомянутом CR и пост не работает:
$node = $form_state->getFormObject()->getEntity();
Ничего не загружается в переменную $ node.
Моя среда разработки PHPStorm выдает предупреждение для getEntity (): метод 'getEntity' не найден в классе Drupal \ Core \ Form \ FormInterface less ... Ссылочный метод не найден в предметном классе.
Также не представлен этот метод для завершения кода.
В причине использования я ссылаюсь:
use Drupal\Core\Entity;
use Drupal\Core\Entity\EntityInterface;
use Drupal\node\Entity\Node;
use Drupal\Core\Render\Element;
Хотя правильный ответ был выбран, я чувствую, что есть необходимость объяснить некоторые вещи:
getFormObject()
доступен только на формах типаEntityForm
.hook_form_node_form_alter()
, вы знаете, что форма всегда является формой узла, поэтому вы можете безопасно вызыватьgetEntity()
объект формы.hook_form_alter()
хук, вы можете проверить правильность$form_id
или проверить, является ли объект формы на самом делеNodeForm
илиEntityForm
. Это предотвратит ошибки PHP, если форма не является формой сущности / узла.$form_object
вы имеете дело с aNodeForm
или aEntityForm
. Это заставит его показывать более подходящие подсказки.источник
Чтобы ваша IDE знала, что это за тип переменной и что ей доступно, вам нужно ввести подсказку для ваших переменных.
Подсказка типа - это тип переменной, добавляемый перед именем переменной параметра (в приведенном ниже примере
array
иFormStateInterFace
).Пример:
Для перехвата отправки вы должны использовать
Drupal\Core\Form\FormStateInterface
тип ... поэтому в верхней части файла убедитесь, что вы используете этот классuse Drupal\Core\Form\FormStateInterface;
.Стандарты кодирования Drupal гласят, что вы должны набирать приведение и объяснять тип в блоке документации. Дополнительные усилия помогают в будущем. ;)
источник