drupal data HTTP POST

7

Bagaimana cara mengirim data HTTP POST / GET ke drupal?

misalnya: Saya punya formulir html:

<form action="mydrupalcite.com" method="get">
    <input type="text" name="title" />
</form>

bagaimana cara memasukkan titledata ke dalam modul jawaban drupal? (atau modul apa saja?)

Saya mencari cara drupal untuk melakukan ini (saya relatif baru di Drupal dan bagaimana cara kerjanya)

Apakah ada hubungannya dengan modul Layanan?

tom91136
sumber
Saya tidak benar-benar mencari untuk membuat formulir, tetapi mengirimkan data ke formulir di drupal (formulir modul pertanyaan)
tom91136
Ok saya pikir kalau tidak periksa respons Clives.
GoodSp33d

Jawaban:

6

API formulir Drupal memiliki perlindungan CSRF bawaan , jadi mengirimkan formulir dari domain eksternal tidak akan berfungsi. Anda bisa melihat menonaktifkan CSRF (ide yang sangat buruk), atau seperti yang Anda sarankan, gunakan modul Layanan.

Tidak ada pemetaan satu-ke-satu antara modul layanan dan formulir di situs, melainkan modul yang mengimplementasikan sumber daya untuk tugas-tugas tertentu untuk dikonsumsi dari klien eksternal. Anda mendapatkan simpul, pengguna, istilah taksonomi, dan mungkin orang lain secara default. Jadi Anda dapat (misalnya) menambahkan node / user / term baru, tetapi Anda melakukannya dengan mengirimkan permintaan xml / json / etc ke server setelah diautentikasi, bukan dengan mengirimkan formulir seperti itu.

Mendapatkan data bekerja dengan cara yang sama. Anda dapat menggunakan Layanan untuk melakukan itu, atau jika Anda dapat mengelola / tidak memerlukan otentikasi Anda sendiri, lihat jawaban indrock untuk metode yang baik.

Layanan sangat dapat dikembangkan, sehingga meskipun modul jawaban tidak mengimplementasikan sumber daya, itu pekerjaan yang cukup mudah untuk menambahkan milik Anda yang membungkus fungsi API dari modul jawaban (atau modul lainnya).

The dokumentasi untuk jasa mungkin akan menjadi tempat yang baik untuk memulai.

Clive
sumber
6

Pertama-tama Anda harus membuat halaman (URL) di Drupal untuk mendapatkan parameter ini. Anda dapat melakukan ini dengan menerapkan hook_menu(), dalam modul khusus Anda. Lihat ini untuk membuat modul khusus Anda .

function MYMODULE_menu() {
  $items['get_details'] = array (
    'title' => '',
    'page callback' => 'MYMODULE_access_variables',
    'page arguments' => array(1),
    'access callback' => TRUE,  // this will be accessible to everyone
  );
  return $items;
}

function MYMODULE_access_variables() {
 // Here you get access to the POSTED variables using $_RESPONSE php superglobal
  echo "<pre>";
  print_r ($_RESPONSE['title']);  // will get you the value of the HTML input type having name='title'
  echo "</pre>"
}

Ini akan membuat halaman di situs Anda di url http://mydrupalsite.com/get_details

Sekarang, dari HTML Anda lakukan panggilan seperti

<form action="mydrupalcite.com/get_details" method="post">
    <input type="text" name="title" /> <!-- Note that the value of the attribute 'name' will be used the capture the value which is posted -->
</form>

CATATAN: Sesuai jawaban @ clive, saya sarankan Anda menggunakannya hanya untuk tujuan pengembangan / pendidikan. Ini mungkin memiliki implikasi keamanan.

Ajit
sumber
1
print_r akan MENCETAK parameter yang diberikan ke situs Anda. Jika Anda ingin Drupal menambahkan sisa halaman (sidebars, css, dll), gunakan sesuatu seperti ini: pastebin.com/TC1FfPY7
AyeshK
@AyeshK Saran yang bagus! Saya baru saja mencetak nilainya hanya untuk menunjukkan bahwa nilainya dapat diakses di dalam fungsi :)
AjitS