Ben otomatik ortamında oluşturulan bir HTTPRequest alabilir miyim? Eğer var gibi diğer bir deyişle, şu anda öyle görünüyor ...
$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'']);
Biz de yöntemini ayarlamak gerekir - saçma bir angarya, $ _SERVER ['REQUEST_METHOD'] bir dize ve HttpRequest beri :: setMethod CONTANTS serisi * HTTP_METH_ bir int alır. Yani kendi haritalama kurmak zorunda.
Ben HttpRequest gibi istiyorum, ama şu anda kullanmak için hantal görünüyor. Ben bir şey eksik umuyoruz.
Edit:
Fikir test temiz yapmaktır. $ _COOKIE Ve arkadaşlar superglobalstır. Bunu nasıl test?
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);
}
Bu örnekte $ _COOKIE - - ama her superglobal değil sadece kullanmak ne durumunu kontrol etmek gerekir. There are about a dozen. Bu HttpRequest tüm bu şeyler sarmak için bir sürü temiz olacaktır.
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);
}
Sonra benim gerçek server.php ben arıyorum varsayımsal statik yöntemini kullanırsınız.
$request = HttpRequest::generateRequestFromEnvironment($_COOKIE, $_POST, ...);
unset($_COOKIE, $_POST, ...);
$response = receiveRequest($request);
$response->send();