Tindak lanjuti pertanyaan ini tetapi saya tidak memiliki reputasi yang cukup untuk meminta klarifikasi dalam komentar.
Saya porting modul kontribusi ke Drupal 8. Kode yang disarankan pada CR dan posting yang disebutkan di atas tidak berfungsi:
$node = $form_state->getFormObject()->getEntity();
Tidak ada yang dimuat ke variabel $ node.
IDE PHPStorm saya memberikan peringatan untuk getEntity (): Metode 'getEntity' tidak ditemukan di kelas Drupal \ Core \ Form \ FormInterface less ... Metode yang dirujuk tidak ditemukan di kelas subjek.
Juga tidak menghadirkan metode ini untuk penyelesaian kode.
Dalam penggunaannya saya referensi:
use Drupal\Core\Entity;
use Drupal\Core\Entity\EntityInterface;
use Drupal\node\Entity\Node;
use Drupal\Core\Render\Element;
Meskipun jawaban yang benar telah dipilih, saya merasa perlu menjelaskan beberapa hal:
getFormObject()
ini hanya tersedia pada bentuk tipeEntityForm
.hook_form_node_form_alter()
, Anda tahu bahwa formulir selalu merupakan bentuk simpul, jadi Anda aman memanggilgetEntity()
objek formulir.hook_form_alter()
pengait umum , Anda mungkin ingin memeriksa yang benar$form_id
atau memeriksa apakah objek bentuk sebenarnya aNodeForm
atau aEntityForm
. Ini akan mencegah kesalahan PHP jika formulir itu bukan bentuk entitas / simpul.$form_object
Anda sedang berurusan dengan aNodeForm
atau aEntityForm
. Ini akan membuatnya menunjukkan petunjuk yang lebih tepat.sumber
Agar IDE Anda tahu apa jenis variabelnya dan apa yang tersedia untuknya, Anda perlu mengetikkan petunjuk variabel Anda.
Petunjuk tipe adalah tipe variabel yang ditambahkan sebelum nama variabel parameter (dalam contoh di bawah
array
danFormStateInterFace
).Contoh:
Untuk mengirim kait, Anda harus menggunakan
Drupal\Core\Form\FormStateInterface
tipe ... karena itu di bagian atas file pastikan Anda menggunakan kelas ituuse Drupal\Core\Form\FormStateInterface;
.Standar pengkodean Drupal menyatakan bahwa Anda harus mengetikkan pemeran serta menjelaskan jenis dalam docblock. Upaya ekstra membantu di masa depan. ;)
sumber