Drupal HTTP POST данные


7

Как отправить данные HTTP POST / GET в drupal?

например: у меня есть HTML-форма:

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

как я могу получить titleданные в модуль ответов drupal? (или любой другой модуль?)

Я ищу друпалский способ сделать это (я относительно новичок в Drupal и как он на самом деле работает)

Это как-то связано с модулем Сервисы?


я на самом деле не ищу создание форм, но отправляю данные в форму в drupal (форма модуля вопросов)
tom91136

Хорошо, я думал иначе, проверьте ответ Клайвса.
GoodSp33d

Ответы:


6

API форм Drupal имеет встроенную защиту CSRF , поэтому отправка формы из внешнего домена не будет работать. Вы можете либо посмотреть на отключение CSRF (очень плохая идея), либо, как вы предлагаете, использовать модуль Services.

На сайте нет однозначного сопоставления между модулем служб и формами, скорее модули реализуют ресурсы для определенных задач, которые будут потребляться внешним клиентом. По умолчанию вы получаете узел, пользователя, термин таксономии и, возможно, другие. Таким образом, вы можете (например) добавить новый узел / пользователя / термин, но вы делаете это, отправляя запросы xml / json / etc на сервер после аутентификации, а не отправляя форму как таковую.

Получение данных работает во многом таким же образом. Вы можете использовать Сервисы, чтобы сделать это, или если вы можете управлять / не нуждаться в собственной аутентификации, см. Ответ Indrock для хорошего метода.

Службы очень расширяемы, поэтому, даже если модуль ответов не реализует ресурсы, довольно легко добавить свои собственные функции API из модуля ответов (или любого другого).

Документация на услуги , вероятно , будет хорошим местом для начала.


6

Сначала вам нужно создать страницу (URL) в Drupal, чтобы получить эти параметры. Вы можете сделать это, внедрив hook_menu()в свой пользовательский модуль. Обратитесь к этому, чтобы создать свой пользовательский модуль .

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

Это создаст страницу на вашем сайте по адресу http://mydrupalsite.com/get_details

Теперь из вашего HTML сделай вызов как

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

ПРИМЕЧАНИЕ. Согласно ответу @ clive, я бы предложил вам использовать его только в целях развития / обучения. Это может иметь последствия для безопасности.


1
print_r напечатает данные параметры на ваш сайт. Если вы хотите, чтобы Drupal добавил остальную часть страницы (боковые панели, CSS и т. Д.), Используйте что-то вроде этого: pastebin.com/TC1FfPY7
AyeshK

@AyeshK Хорошее предложение! Я просто напечатал значение, просто чтобы показать, что значения могут быть доступны внутри функции :)
AjitS
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.