Çevreden bir HTTPRequest oluşturun

2 Cevap php

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();

2 Cevap

Bu garip bir kullanım durumda gibi görünüyor bana - Eğer bir HttpRequest için ... kendiniz oluşturmak istiyorsunuz? Eğer geçirildi tam parametrelerini kullanma? Neden?

Normal durumda arzu "otomatik kurulum" tür oldukça yararsız olduğu için başka bir ev sahibi, bir başka kaynak talep içindir. Eğer gerçekten bu durum gerekiyorsa, kolayca yeniden bir fonksiyon bu sarmak için önemsiz görünüyor?

Deftere kadarıyla, ben size senaryoyu tetikleyen istek hakkında tüm bilgiler için bir kap olarak HttpRequest kullanarak düşünüyorum.

Bu, bunun için ne değildir - bu komut dosyası içinde other hizmetlerine HTTP isteklerini yapmak için. Örneğin, olabilir request data from the Flickr API