環境から自動的に作成された HttpRequest を取得できますか? 言い換えれば、今、あなたがしなければならないようです...
$request = new HttpRequest;
$request->setCookies($_COOKIE);
$request->setHeaders(apache_request_headers());
$request->setPostFields($_POST);
$request->setQueryData($_GET);
$request->setRawPostData(file_get_contents('php://input'));
$request->setUrl($_SERVER['REQUEST_URI'']);
$_SERVER['REQUEST_METHOD'] は文字列であり、HttpRequest::setMethod は HTTP_METH_* シリーズの内容で int を取るため、メソッドを設定する必要もあります。したがって、独自のマッピングを設定する必要があります。
HttpRequest を使いたいのですが、今のところ使いづらそうです。何かが足りないことを願っています。
編集:
アイデアは、テストをよりクリーンにすることです。$_COOKIE とその友達はスーパーグローバルです。それをどのようにテストしますか?
function receiveRequest() {
$code = 'that touches superglobals like' . $_COOKIE['example'];
$response = new HttpResponse;
$response->setStatus(200);
return $response;
}
function testServer() {
$oldCookie = $_COOKIE;
$oldPost = $_POST;
// etc...
$_COOKIE = array('example' => 'stuff');
$_POST = array();
// etc...
$response = receiveRequest();
$_COOKIE = $oldCookie;
$_POST = $oldPost;
// etc...
assert($response->getStatus() === 200);
}
使用するもの (この例では $_COOKIE) だけでなく、すべてのスーパーグローバルの状態を制御する必要があります。 約十数あります。 これらすべてを HttpRequest にまとめると、はるかにクリーンになります。
function receiveRequest(HttpRequest $request) {
$code = 'is purely a function of arguments like' . $request->getCookie('example');
$response = new HttpResponse;
$response->setStatus(200);
return $response;
}
function testServer() {
$request = new HttpRequest;
$request->setCookie('example' => 'stuff');
$response = receiveRequest($request);
assert($response->getStatus() === 200);
}
次に、実際の server.php は、探している仮想の静的メソッドを使用します。
$request = HttpRequest::generateRequestFromEnvironment($_COOKIE, $_POST, ...);
unset($_COOKIE, $_POST, ...);
$response = receiveRequest($request);
$response->send();