2015-01-03 7 views
4

Я пытаюсь запустить простое веб-приложение через веб-сервер ReactPHP, но я не могу понять, где получить данные POST из HTML-формы. Сервер определяется как:React PHP получить данные POST

include 'vendor/autoload.php'; 

register_shutdown_function(function() { 
    echo implode(PHP_EOL, error_get_last()), PHP_EOL; 
}); 

$loop = React\EventLoop\Factory::create(); 
$socket = new React\Socket\Server($loop); 
$http = new React\Http\Server($socket); 
$http->on('request', function(React\Http\Request $request, React\Http\Response $response) { 
    print_r($request); 
    $response->writeHead(200, array('Content-type' => 'text/html')); 
    $response->end('<form method="POST"><input type="text" name="text"><input type="submit" name="submit" value="Submit"></form>'); 
}); 
$socket->listen(9000); 
$loop->run(); 

Когда я отправляю некоторую строку, используя форму HTML, то $request объект, при печати на консоли выглядит следующим образом:

React\Http\Request Object 
(
    [readable:React\Http\Request:private] => 1 
    [method:React\Http\Request:private] => POST 
    [path:React\Http\Request:private] =>/
    [query:React\Http\Request:private] => Array 
     (
     ) 

    [httpVersion:React\Http\Request:private] => 1.1 
    [headers:React\Http\Request:private] => Array 
     (
      [User-Agent] => Opera/9.80 (X11; Linux i686) Presto/2.12.388 Version/12.16 
      [Host] => localhost:9000 
      [Accept] => text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 
      [Accept-Language] => it,en;q=0.9 
      [Accept-Encoding] => gzip, deflate 
      [Referer] => http://localhost:9000/ 
      [Connection] => Keep-Alive 
      [Content-Length] => 24 
      [Content-Type] => application/x-www-form-urlencoded 
     ) 

    [listeners:protected] => Array 
     (
     ) 

) 

Здесь я не могу найти данных в любом месте. Я думал, что он должен быть расположен в свойстве query, но он пуст.

Когда я делаю запросы GET, данные, переданные в строке запроса, можно найти внутри свойства query объекта $request.

Итак, где я могу найти данные, переданные с помощью POST-запросов?

+0

Я подозреваю, что это для более старой версии ReactPHP - 'Реагировать \ сокет \ Server' берет цикл во втором параметре ctor, а не в первом. Я считаю, что 0.7.x действует на момент написания. – halfer

+0

Для текущей версии ReactPHP код для получения необработанного тела POST [в подпроекте README] (https://github.com/reactphp/http). Это можно разделить на отдельные поля, если это обычные данные о значении ключа. – halfer

ответ

2

Повторяю последнее редактирование на мой вопрос здесь, поэтому этот вопрос можно пометить как ответ.

Nevermind, нашел ответ here. В принципе, похоже, что React PHP не поддерживает простой способ читать данные POST. Что мы можем сделать, хотя, чтобы прочитать данные, как только он приходит, наблюдая событие data из $request объекта:

$request->on('data', function($data) { 
    // Here $data contains our POST data. 
    // The $request needs to be manually ended, though. 
}); 
+1

[link] (https://github.com/reactphp/http/pull/13) Вы можете следовать этому запросу и узнать, почему это так. –

+0

@ArunPoudel спасибо! – swahnee

Смежные вопросы