Kontynuuj to pytanie, ale nie mam wystarczającej reputacji, aby poprosić o wyjaśnienie w komentarzu.
Przesyłam moduł wnoszony do Drupala 8. Sugerowany kod na wyżej wspomnianym CR i postu nie działa:
$node = $form_state->getFormObject()->getEntity();
Nic nie jest ładowane do zmiennej $ node.
Moje PHPStorm IDE daje ostrzeżenie dla getEntity (): Nie znaleziono metody „getEntity” w klasie Drupal \ Core \ Form \ FormInterface mniej ... W klasie podmiotu nie znaleziono metody referencyjnej.
Nie przedstawia również tej metody uzupełniania kodu.
W przypadku użycia odnoszę się do:
use Drupal\Core\Entity;
use Drupal\Core\Entity\EntityInterface;
use Drupal\node\Entity\Node;
use Drupal\Core\Render\Element;
Chociaż wybrano prawidłową odpowiedź, wydaje mi się, że trzeba wyjaśnić kilka rzeczy:
getFormObject()
jest dostępna tylko na formularzach typuEntityForm
.hook_form_node_form_alter()
, wiesz, że formularz jest zawsze formularzem węzła, więc możesz bezpiecznie wywoływaćgetEntity()
obiekt formularza.hook_form_alter()
haczyk, może chcesz sprawdzić prawidłowe$form_id
lub sprawdzić, czy obiekt jest w rzeczywistości formąNodeForm
lubEntityForm
. Zapobiegnie to błędom PHP, jeśli formularz nie jest formularzem encji / węzła.$form_object
masz do czynienia z aNodeForm
lub anEntityForm
. Dzięki temu będzie wyświetlać bardziej odpowiednie wskazówki.źródło
Aby twoje IDE wiedziało, jaki jest typ zmiennej i co jest dla niego dostępne, musisz wpisać podpowiedź do zmiennych.
Wskazówka dotycząca typu to typ zmiennej dodany przed nazwą zmiennej parametru (w poniższym przykładzie
array
iFormStateInterFace
).Przykład:
Do przesyłania haków powinieneś używać
Drupal\Core\Form\FormStateInterface
typu ... dlatego na górze pliku upewnij się, że używasz tej klasyuse Drupal\Core\Form\FormStateInterface;
.Standardy kodowania Drupal mówią, że powinieneś pisać cast, a także wyjaśniać typ w docblock. Dodatkowy wysiłek pomaga w przyszłości. ;)
źródło