dữ liệu POST HTTP drupal


7

Làm cách nào để gửi dữ liệu HTTP POST / GET tới drupal?

ví dụ: tôi đã có một mẫu html:

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

Làm thế nào để tôi có được titledữ liệu của mô-đun câu trả lời của drupal? (hoặc bất kỳ mô-đun nào?)

Tôi đang tìm kiếm cách thức tuyệt vời để làm điều này (tôi còn khá mới với Drupal và cách nó thực sự hoạt động)

Nó có liên quan gì đến mô-đun Dịch vụ không?


Tôi không thực sự tìm cách tạo biểu mẫu, nhưng gửi dữ liệu đến một biểu mẫu trong drupal (một dạng mô-đun câu hỏi)
tom91136

Ok tôi nghĩ khác kiểm tra phản ứng Clives.
GoodSp33d

Câu trả lời:


6

API biểu mẫu của Drupal có bảo vệ CSRF được tích hợp sẵn, do đó, việc gửi biểu mẫu từ một miền bên ngoài sẽ không hoạt động. Bạn có thể xem xét việc vô hiệu hóa CSRF (ý tưởng rất tệ) hoặc như bạn đề xuất, sử dụng mô-đun Dịch vụ.

Không có ánh xạ một-một giữa mô-đun dịch vụ và biểu mẫu trên trang web, thay vào đó các mô-đun triển khai tài nguyên cho một số tác vụ nhất định sẽ được sử dụng từ máy khách bên ngoài. Bạn nhận được nút, người dùng, thuật ngữ phân loại và có thể là những người khác theo mặc định. Vì vậy, bạn có thể (ví dụ) thêm một nút / người dùng / thuật ngữ mới, nhưng bạn làm như vậy bằng cách gửi các yêu cầu xml / json / etc đến máy chủ sau khi đã xác thực, không phải bằng cách gửi biểu mẫu như vậy.

Lấy dữ liệu hoạt động theo nhiều cách giống nhau. Bạn có thể sử dụng Dịch vụ để làm điều đó hoặc nếu bạn có thể quản lý / không cần xác thực của riêng mình, hãy xem câu trả lời của indrock cho một phương pháp tốt.

Các dịch vụ rất có thể mở rộng, do đó, ngay cả khi mô-đun câu trả lời không triển khai tài nguyên, việc thêm các hàm của bạn bao quanh các hàm API từ mô-đun câu trả lời (hoặc bất kỳ thứ gì khác) là một công việc khá dễ dàng.

Các tài liệu cho các dịch vụ có thể sẽ là một nơi tốt để bắt đầu.


6

Trước tiên bạn cần tạo một trang (URL) trong Drupal để có được thông số này. Bạn có thể làm điều này bằng cách thực hiện hook_menu(), trong mô-đun tùy chỉnh của bạn. Tham khảo điều này để tạo mô-đun tùy chỉnh của bạn .

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>"
}

Điều này sẽ tạo một trang tại trang web của bạn tại url http://mydrupalsite.com/get_details

Bây giờ, từ HTML của bạn thực hiện cuộc gọi như

<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>

LƯU Ý: Theo câu trả lời của @ clive, tôi khuyên bạn chỉ nên sử dụng nó cho mục đích phát triển / giáo dục. Điều này có thể có ý nghĩa bảo mật.


1
print_r sẽ IN các tham số đã cho vào trang web của bạn. Nếu bạn muốn Drupal thêm phần còn lại của trang (sidebars, css, v.v.), hãy sử dụng một cái gì đó như thế này: pastebin.com/TC1FfPY7
AyeshK

@AyeshK Đề nghị tốt đẹp! Tôi vừa in giá trị chỉ để cho thấy rằng các giá trị có thể được truy cập bên trong hàm :)
AjitS
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.