Не удается получить содержимое "http put" в PHP - PullRequest
2 голосов
/ 01 марта 2012

framework здесь http://luracast.com/products/restler/

Я использую restler в качестве успокоительного API для своей работы, когда я использую опорную модель для сохранения в URL, он отправляет и обновляет мои данные как json, используя 'HTTP PUT'запрос метода, и я хочу получить ответ от того, что я положил ...

, если это метод запроса HTTP POST, я могу использовать

// to getting content from a POST
$post_data = json_decode(file_get_contents('php://input'), true);

, чтобы получить мой контент,но не могу получить что-либо из HTTP PUT

// can't get anything from a PUT
function putpatients($id) {
    $post_data = file_get_contents('php://input');
    $post_data = json_decode($post_data, true);
    echo $post_data['name'];
}

пустой ответ браузера

как мне вернуть мои данные как json ???

Ответы [ 3 ]

6 голосов
/ 01 марта 2012

Как я прокомментировал ваш вопрос, php://input - это поток, если вы читаете из него, он очищает его.

Я никогда раньше не использовал Restler, но, глядя на несколько примеров, приведенных в их загрузке, кажется, что отправленные данные автоматически передаются в качестве параметра вашему обработчику пут ..

В примере crud Рестлера , у класса Author есть запрос пута, подобный этому:

function put($id=NULL, $request_data=NULL) {
    return $this->dp->update($id, $this->_validate($request_data));
}

так что я предполагаю, что рестлер уже прочитал поток php://input и, следовательно, опустошил его.

Итак, ваш обработчик пут должен быть больше похож на их пример:

function putpatients($id, $request_data = NULL) {
    /* do something with the $request_data */
    var_dump($request_data);
}

Edit: На самом деле предыдущий вопрос SO от @deceze, в котором говорится о том, почему чтение дважды из php: // input не работает - для запросов PUT - объясняет, почему ваш код работал с POST запрос. В любом случае, вы должны действительно использовать средство, предоставленное Рестлером, вместо того, чтобы заново изобретать колесо отдыха.

0 голосов
/ 01 марта 2012

попробуйте использовать функцию print_r () для отображения значений переменной, например:

print_r($post_data);
0 голосов
/ 01 марта 2012

Показывает ли выбранный вами инструмент разработчика (firebug и т. Д.) Ответ?

Если это так, это может помочь, если вы поставите echo json_encode($post_data['name']); вместо вашего эха.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...