données drupal HTTP POST

7

Comment envoyer des données HTTP POST / GET à Drupal?

par exemple: j'ai un formulaire html:

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

comment puis-je obtenir les titledonnées de dans le module de réponses de drupal? (ou n'importe quel module?)

Je cherche la façon drupale de le faire (je suis relativement nouveau sur Drupal et comment cela fonctionne vraiment)

At-il quelque chose à voir avec le module Services?

tom91136
la source
je ne cherche pas vraiment à créer des formulaires, mais envoyer des données à un formulaire dans drupal (un formulaire de module de question)
tom91136
Ok, je pensais que sinon, consultez la réponse de Clives.
GoodSp33d

Réponses:

6

L'API de formulaire de Drupal dispose d'une protection CSRF intégrée, donc l'envoi d'un formulaire à partir d'un domaine externe ne fonctionnera pas. Vous pouvez soit envisager de désactiver le CSRF (très mauvaise idée), soit, comme vous le suggérez, utiliser le module Services.

Il n'y a pas de mappage un à un entre le module de services et les formulaires sur le site, mais les modules implémentent des ressources pour certaines tâches à consommer à partir d'un client externe. Vous obtenez le nœud, l'utilisateur, le terme de taxonomie et probablement d'autres par défaut. Vous pouvez donc (par exemple) ajouter un nouveau nœud / utilisateur / terme, mais vous le faites en envoyant des requêtes xml / json / etc au serveur après vous être authentifié, et non en soumettant un formulaire en tant que tel.

Obtenir des données fonctionne de la même manière. Vous pouvez utiliser les Services pour cela, ou si vous pouvez gérer / n'avez pas besoin de votre propre authentification, voir la réponse d'indrock pour une bonne méthode.

Les services sont très extensibles, donc même si le module de réponses n'implémente pas de ressources, il est assez facile d'ajouter les vôtres qui encapsulent les fonctions API du module de réponses (ou de tout autre).

La documentation des services serait probablement un bon point de départ.

Clive
la source
6

Vous devrez d'abord créer une page (URL) dans Drupal pour obtenir ces paramètres. Vous pouvez le faire en implémentant hook_menu(), dans votre module personnalisé. Référez - vous ceci pour créer votre module personnalisé .

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

Cela va créer une page sur votre site à l'url http://mydrupalsite.com/get_details

Maintenant, à partir de votre HTML, appelez comme

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

REMARQUE: selon la réponse de @ clive, je vous suggère de l'utiliser uniquement à des fins de développement / pédagogique. Cela pourrait avoir des implications sur la sécurité.

AjitS
la source
1
print_r IMPRIMERA les paramètres donnés sur votre site. Si vous voulez que Drupal ajoute le reste de la page (barres latérales, css, etc.), utilisez quelque chose comme ceci: pastebin.com/TC1FfPY7
AyeshK
@AyeshK Belle suggestion! Je viens d'imprimer la valeur juste pour montrer que les valeurs sont accessibles à l'intérieur de la fonction :)
AjitS