Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Update documentation and examples to use new response factory methods
  • Loading branch information
clue committed Feb 3, 2022
commit a49404c6e61dc01623844d887e3533e6a98c3542
140 changes: 39 additions & 101 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,11 +112,7 @@ This is an HTTP server which responds with `Hello World!` to every request.
require __DIR__ . '/vendor/autoload.php';

$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) {
return new React\Http\Message\Response(
React\Http\Message\Response::STATUS_OK,
array(
'Content-Type' => 'text/plain'
),
return React\Http\Message\Response::plaintext(
"Hello World!\n"
);
});
Expand Down Expand Up @@ -738,11 +734,7 @@ object and expects a [response](#server-response) object in return:

```php
$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) {
return new React\Http\Message\Response(
React\Http\Message\Response::STATUS_OK,
array(
'Content-Type' => 'text/plain'
),
return React\Http\Message\Response::plaintext(
"Hello World!\n"
);
});
Expand Down Expand Up @@ -953,14 +945,10 @@ and will be passed to the callback function like this.

```php
$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) {
$body = "The method of the request is: " . $request->getMethod();
$body .= "The requested path is: " . $request->getUri()->getPath();
$body = "The method of the request is: " . $request->getMethod() . "\n";
$body .= "The requested path is: " . $request->getUri()->getPath() . "\n";

return new React\Http\Message\Response(
React\Http\Message\Response::STATUS_OK,
array(
'Content-Type' => 'text/plain'
),
return React\Http\Message\Response::plaintext(
$body
);
});
Expand Down Expand Up @@ -996,13 +984,9 @@ The following parameters are currently available:

```php
$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) {
$body = "Your IP is: " . $request->getServerParams()['REMOTE_ADDR'];
$body = "Your IP is: " . $request->getServerParams()['REMOTE_ADDR'] . "\n";

return new React\Http\Message\Response(
React\Http\Message\Response::STATUS_OK,
array(
'Content-Type' => 'text/plain'
),
return React\Http\Message\Response::plaintext(
$body
);
});
Expand Down Expand Up @@ -1030,11 +1014,7 @@ $http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterf
$body = 'The value of "foo" is: ' . htmlspecialchars($queryParams['foo']);
}

return new React\Http\Message\Response(
React\Http\Message\Response::STATUS_OK,
array(
'Content-Type' => 'text/html'
),
return React\Http\Message\Response::html(
$body
);
});
Expand Down Expand Up @@ -1077,9 +1057,7 @@ request headers (commonly used for `POST` requests for HTML form submission data
$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) {
$name = $request->getParsedBody()['name'] ?? 'anonymous';

return new React\Http\Message\Response(
React\Http\Message\Response::STATUS_OK,
array(),
return React\Http\Message\Response::plaintext(
"Hello $name!\n"
);
});
Expand All @@ -1102,10 +1080,8 @@ $http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterf
$data = json_decode((string)$request->getBody());
$name = $data->name ?? 'anonymous';

return new React\Http\Message\Response(
React\Http\Message\Response::STATUS_OK,
array('Content-Type' => 'application/json'),
json_encode(['message' => "Hello $name!"])
return React\Http\Message\Response::json(
['message' => "Hello $name!"]
);
});
```
Expand All @@ -1125,9 +1101,7 @@ $http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterf
$files = $request->getUploadedFiles();
$name = isset($files['avatar']) ? $files['avatar']->getClientFilename() : 'nothing';

return new React\Http\Message\Response(
React\Http\Message\Response::STATUS_OK,
array(),
return React\Http\Message\Response::plaintext(
"Uploaded $name\n"
);
});
Expand Down Expand Up @@ -1208,24 +1182,16 @@ $http = new React\Http\HttpServer(
});

$body->on('end', function () use ($resolve, &$bytes){
$resolve(new React\Http\Message\Response(
React\Http\Message\Response::STATUS_OK,
array(
'Content-Type' => 'text/plain'
),
$resolve(React\Http\Message\Response::plaintext(
"Received $bytes bytes\n"
));
});

// an error occures e.g. on invalid chunked encoded data or an unexpected 'end' event
$body->on('error', function (Exception $e) use ($resolve, &$bytes) {
$resolve(new React\Http\Message\Response(
React\Http\Message\Response::STATUS_BAD_REQUEST,
array(
'Content-Type' => 'text/plain'
),
$resolve(React\Http\Message\Response::plaintext(
"Encountered error after $bytes bytes: {$e->getMessage()}\n"
));
)->withStatus(React\Http\Message\Response::STATUS_BAD_REQUEST));
});
});
}
Expand Down Expand Up @@ -1272,23 +1238,15 @@ $http = new React\Http\HttpServer(
function (Psr\Http\Message\ServerRequestInterface $request) {
$size = $request->getBody()->getSize();
if ($size === null) {
$body = 'The request does not contain an explicit length.';
$body .= 'This example does not accept chunked transfer encoding.';

return new React\Http\Message\Response(
React\Http\Message\Response::STATUS_LENGTH_REQUIRED,
array(
'Content-Type' => 'text/plain'
),
$body = "The request does not contain an explicit length. ";
$body .= "This example does not accept chunked transfer encoding.\n";

return React\Http\Message\Response::plaintext(
$body
);
)->withStatus(React\Http\Message\Response::STATUS_LENGTH_REQUIRED);
}

return new React\Http\Message\Response(
React\Http\Message\Response::STATUS_OK,
array(
'Content-Type' => 'text/plain'
),
return React\Http\Message\Response::plaintext(
"Request body size: " . $size . " bytes\n"
);
}
Expand Down Expand Up @@ -1344,25 +1302,16 @@ $http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterf
$key = 'react\php';

if (isset($request->getCookieParams()[$key])) {
$body = "Your cookie value is: " . $request->getCookieParams()[$key];
$body = "Your cookie value is: " . $request->getCookieParams()[$key] . "\n";

return new React\Http\Message\Response(
React\Http\Message\Response::STATUS_OK,
array(
'Content-Type' => 'text/plain'
),
return React\Http\Message\Response::plaintext(
$body
);
}

return new React\Http\Message\Response(
React\Http\Message\Response::STATUS_OK,
array(
'Content-Type' => 'text/plain',
'Set-Cookie' => urlencode($key) . '=' . urlencode('test;more')
),
"Your cookie has been set."
);
return React\Http\Message\Response::plaintext(
"Your cookie has been set.\n"
)->withHeader('Set-Cookie', urlencode($key) . '=' . urlencode('test;more'));
});
```

Expand Down Expand Up @@ -1413,11 +1362,7 @@ In its most simple form, you can use it like this:

```php
$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) {
return new React\Http\Message\Response(
React\Http\Message\Response::STATUS_OK,
array(
'Content-Type' => 'text/plain'
),
return React\Http\Message\Response::plaintext(
"Hello World!\n"
);
});
Expand All @@ -1441,18 +1386,17 @@ This example shows how such a long-term action could look like:

```php
$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) {
return new Promise(function ($resolve, $reject) {
$promise = new Promise(function ($resolve, $reject) {
Loop::addTimer(1.5, function() use ($resolve) {
$response = new React\Http\Message\Response(
React\Http\Message\Response::STATUS_OK,
array(
'Content-Type' => 'text/plain'
),
"Hello world"
);
$resolve($response);
$resolve();
});
});

return $promise->then(function () {
return React\Http\Message\Response::plaintext(
"Hello World!"
);
});
});
```

Expand Down Expand Up @@ -1571,11 +1515,7 @@ a `string` response body like this:

```php
$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) {
return new React\Http\Message\Response(
React\Http\Message\Response::STATUS_OK,
array(
'Content-Type' => 'text/plain'
),
return React\Http\Message\Response::plaintext(
"Hello World!\n"
);
});
Expand Down Expand Up @@ -1845,11 +1785,9 @@ $http = new React\Http\HttpServer(
$resolve($next($request));
});
return $promise->then(null, function (Exception $e) {
return new React\Http\Message\Response(
React\Http\Message\Response::STATUS_INTERNAL_SERVER_ERROR,
array(),
'Internal error: ' . $e->getMessage()
);
return React\Http\Message\Response::plaintext(
'Internal error: ' . $e->getMessage() . "\n"
)->withStatus(React\Http\Message\Response::STATUS_INTERNAL_SERVER_ERROR);
});
},
function (Psr\Http\Message\ServerRequestInterface $request) {
Expand Down
13 changes: 3 additions & 10 deletions examples/51-server-hello-world.php
Original file line number Diff line number Diff line change
@@ -1,17 +1,10 @@
<?php

use Psr\Http\Message\ServerRequestInterface;
use React\Http\Message\Response;

require __DIR__ . '/../vendor/autoload.php';

$http = new React\Http\HttpServer(function (ServerRequestInterface $request) {
return new Response(
Response::STATUS_OK,
array(
'Content-Type' => 'text/plain'
),
"Hello world\n"
$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) {
return React\Http\Message\Response::plaintext(
"Hello World!\n"
);
});

Expand Down
11 changes: 2 additions & 9 deletions examples/52-server-count-visitors.php
Original file line number Diff line number Diff line change
@@ -1,17 +1,10 @@
<?php

use Psr\Http\Message\ServerRequestInterface;
use React\Http\Message\Response;

require __DIR__ . '/../vendor/autoload.php';

$counter = 0;
$http = new React\Http\HttpServer(function (ServerRequestInterface $request) use (&$counter) {
return new Response(
Response::STATUS_OK,
array(
'Content-Type' => 'text/plain'
),
$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) use (&$counter) {
return React\Http\Message\Response::plaintext(
"Welcome number " . ++$counter . "!\n"
);
});
Expand Down
13 changes: 3 additions & 10 deletions examples/53-server-whatsmyip.php
Original file line number Diff line number Diff line change
@@ -1,18 +1,11 @@
<?php

use Psr\Http\Message\ServerRequestInterface;
use React\Http\Message\Response;

require __DIR__ . '/../vendor/autoload.php';

$http = new React\Http\HttpServer(function (ServerRequestInterface $request) {
$body = "Your IP is: " . $request->getServerParams()['REMOTE_ADDR'];
$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) {
$body = "Your IP is: " . $request->getServerParams()['REMOTE_ADDR'] . "\n";

return new Response(
Response::STATUS_OK,
array(
'Content-Type' => 'text/plain'
),
return React\Http\Message\Response::plaintext(
$body
);
});
Expand Down
11 changes: 2 additions & 9 deletions examples/54-server-query-parameter.php
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
<?php

use Psr\Http\Message\ServerRequestInterface;
use React\Http\Message\Response;

require __DIR__ . '/../vendor/autoload.php';

$http = new React\Http\HttpServer(function (ServerRequestInterface $request) {
$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) {
$queryParams = $request->getQueryParams();

$body = 'The query parameter "foo" is not set. Click the following link ';
Expand All @@ -15,11 +12,7 @@
$body = 'The value of "foo" is: ' . htmlspecialchars($queryParams['foo']);
}

return new Response(
Response::STATUS_OK,
array(
'Content-Type' => 'text/html'
),
return React\Http\Message\Response::html(
$body
);
});
Expand Down
24 changes: 6 additions & 18 deletions examples/55-server-cookie-handling.php
Original file line number Diff line number Diff line change
@@ -1,33 +1,21 @@
<?php

use Psr\Http\Message\ServerRequestInterface;
use React\Http\Message\Response;

require __DIR__ . '/../vendor/autoload.php';

$http = new React\Http\HttpServer(function (ServerRequestInterface $request) {
$http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) {
$key = 'react\php';

if (isset($request->getCookieParams()[$key])) {
$body = "Your cookie value is: " . $request->getCookieParams()[$key];
$body = "Your cookie value is: " . $request->getCookieParams()[$key] . "\n";

return new Response(
Response::STATUS_OK,
array(
'Content-Type' => 'text/plain'
),
return React\Http\Message\Response::plaintext(
$body
);
}

return new Response(
Response::STATUS_OK,
array(
'Content-Type' => 'text/plain',
'Set-Cookie' => urlencode($key) . '=' . urlencode('test;more')
),
"Your cookie has been set."
);
return React\Http\Message\Response::plaintext(
"Your cookie has been set.\n"
)->withHeader('Set-Cookie', urlencode($key) . '=' . urlencode('test;more'));
});

$socket = new React\Socket\SocketServer(isset($argv[1]) ? $argv[1] : '0.0.0.0:0');
Expand Down
Loading