$_POST e hook_menu

2 contenuti / 0 new
Ultimo contenuto
$_POST e hook_menu

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

Drupal Version:

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