web-dev-qa-db-ja.com

drupal HTTP POSTデータ

HTTP POST/GETデータをdrupalに送信するにはどうすればよいですか?

例:私はHTMLフォームを持っています:

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

titleのデータをdrupalの回答モジュール(または任意のモジュール)に取得するにはどうすればよいですか?

私はこれを行うdrupal方法を探しています(Drupalは比較的新しく、実際にどのように機能するか)

サービスモジュールとは何か関係がありますか?

7
tom91136

DrupalのフォームAPIには [〜#〜] csrf [〜#〜] 保護が組み込まれているため、外部ドメインからフォームを送信しても機能しません。 CSRFの無効化を検討するか(非常に悪い考え)、または提案したように、サービスモジュールを使用できます。

サービスモジュールとサイト上のフォームの間には1対1のマッピングはなく、モジュールは外部クライアントから消費される特定のタスクのリソースを実装します。デフォルトでは、ノード、ユーザー、分類用語、そしておそらく他のものを取得します。たとえば、新しいnode/user/termを追加できますが、フォームを送信するのではなく、認証後にxml/json/etcリクエストをサーバーに送信します。

データの取得はほとんど同じ方法で機能します。サービスを使用してそれを行うか、独自の認証を管理できる/必要ない場合は、indrockの回答で適切な方法を確認してください。

サービスは非常に拡張可能であるため、answersモジュールがリソースを実装していなくても、answers(またはその他の)モジュールからAPI関数をラップする独自のサービスを追加するのは非常に簡単です。

サービスのドキュメント から始めるとよいでしょう。

6
Clive

最初にDrupalでこのパラメーターを取得するためにページ(URL)を作成する必要があります。これは 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>"
}

これにより、URLのサイトにページが作成されます 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の回答に従って、開発/教育目的でのみ使用することをお勧めします。これはセキュリティに影響を与える可能性があります。

6
AjitS