Ciao
ho un problema. Devo fare un progetto che prevede di fare delle POST per inviare dati che poi drupal dovrà leggere e gestire in qualche modo.
Una di queste è il login ma non c'è solo questo.
Ho costruito il mio hook_menu
$items['login'] = array(
'page callback' => 'mymodule_login',
'access arguments' => array('access content'),
'access callback' => true,
'type' => MENU_CALLBACK,
);
che punta qui
function mymodule_login() {
header('Content-type: application/json');
watchdog('mymodule', print_r($_POST, TRUE));
$result = array("result" => "ok");
echo drupal_json_output($result);
}
la POST la mando con un codice di questo tipo
<?php
define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$base_url = 'http://www.mysite.com';
$data = array(
'username' => 'admin',
'password' => 'password',
);
$data = http_build_query($data, '', '&');
$headers = array();
$options = array(
'headers' => array(
'Accept' => 'application/json',
),
'method' => 'POST',
'data' => $data
);
$response = drupal_http_request($base_url . '/login', $options);
$data = json_decode($response->data);
ma anche usando l'addon poster di Firefox. Il problema è che in qualsiasi modo $_POST mi risulta vuota. Anche se in rete ci sono esempi che dicono che non dovrebbe essere così (vedi qui e qui).
Ho quindi due domande:
1) cosa sbaglio in questa procedura?
2) esiste un modo più drupalico?
Ho usato anche services ma a parte che è molto complicato, ho il problema che devo rispettare un protocollo e quindi la url di accesso deve essere /login mentre in services come minimo sarebbe un /pagediaccesso/metodo
Grazie
Ho risolto in questo modo
In pratica avere nell'header content type "application/json" mette fuori gioco $_POST e per php bisogna usare file_get_contents("php://input")