Skip to content

Commit b8b5e7d

Browse files
Merge pull request #55 from PHPFastCGI/issue-47
Added documentation for PSR17
2 parents 3c2f5fb + 23deac7 commit b8b5e7d

File tree

1 file changed

+82
-4
lines changed

1 file changed

+82
-4
lines changed

README.md

Lines changed: 82 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,20 @@ Contributions and suggestions are welcome.
3030

3131
## Usage
3232

33-
Below is an example of a simple 'Hello, World!' FastCGI application in PHP.
33+
Below is an example of a simple 'Hello, World!' FastCGI application. There are
34+
3 examples. One with the PHPFastCGI request, one with Symfony HTTP Foundation request
35+
and one with PSR-7 Request.
36+
37+
### PHPFastCGI request
38+
39+
Using the pure PHPFastCGI is the fastest method since it does not involve any converting
40+
of requests.
41+
42+
We need a PSR-7 implementation's response object.
43+
44+
```
45+
composer require composer require zendframework/zend-diactoros
46+
```
3447

3548
```php
3649
<?php // fastCGI_app.php
@@ -43,9 +56,7 @@ use PHPFastCGI\FastCGIDaemon\Http\RequestInterface;
4356
use Zend\Diactoros\Response\HtmlResponse;
4457

4558
// A simple kernel. This is the core of your application
46-
$kernel = function (RequestInterface $request) {
47-
// $request->getServerRequest() returns PSR-7 server request object
48-
// $request->getHttpFoundationRequest() returns HTTP foundation request object
59+
$kernel = function (RequestInterface $request) {
4960
return new HtmlResponse('<h1>Hello, World!</h1>');
5061
};
5162

@@ -56,6 +67,73 @@ $application = (new ApplicationFactory)->createApplication($kernel);
5667
$application->run();
5768
```
5869

70+
### Symfony HTTP Foundation Request
71+
72+
Use this when your application is taking advantage of the Symfony echosystem.
73+
74+
```
75+
composer require symfony/http-foundation
76+
```
77+
78+
```php
79+
<?php // fastCGI_app.php
80+
81+
require_once dirname(__FILE__) . '/../vendor/autoload.php';
82+
83+
use PHPFastCGI\FastCGIDaemon\ApplicationFactory;
84+
use PHPFastCGI\FastCGIDaemon\Http\RequestInterface;
85+
use Symfony\Component\HttpFoundation\Response;
86+
87+
$kernel = function (RequestInterface $request) {
88+
$sfRequest = $request->getHttpFoundationRequest(); // returns HTTP Foundation request object
89+
90+
return new Response('<h1>Hello, World!</h1>' . $sfRequest->getUri());
91+
};
92+
93+
$application = (new ApplicationFactory)->createApplication($kernel);
94+
$application->run();
95+
```
96+
97+
### PSR-7 Request
98+
99+
Here is the same example but with PSR-7 HTTP objects. First you need to install any PSR-17 (HTTP Factory) implementation
100+
and then a PSR-17 utility library ([nyholm/psr7-server](https://github.com/nyholm/psr7-server)).
101+
102+
```
103+
composer require http-interop/http-factory-diactoros nyholm/psr7-server
104+
```
105+
106+
```php
107+
<?php // fastCGI_app.php
108+
109+
require_once dirname(__FILE__) . '/../vendor/autoload.php';
110+
111+
use Http\Factory\Diactoros;
112+
use Nyholm\Psr7Server\ServerRequestCreator;
113+
use PHPFastCGI\FastCGIDaemon\ApplicationFactory;
114+
use PHPFastCGI\FastCGIDaemon\Http\Request;
115+
use PHPFastCGI\FastCGIDaemon\Http\RequestInterface;
116+
use Zend\Diactoros\Response\HtmlResponse;
117+
118+
// Give the Request an instance of ServerRequestCreatorInterface filled with PSR-17 factories.
119+
// This is how we are independent of any PSR-7 implementation.
120+
Request::setServerRequestCreator(new ServerRequestCreator(
121+
new Diactoros\ServerRequestFactory,
122+
new Diactoros\UriFactory,
123+
new Diactoros\UploadedFileFactory,
124+
new Diactoros\StreamFactory
125+
));
126+
127+
$kernel = function (RequestInterface $request) {
128+
$psr7Request = $request->getServerRequest(); // returns PSR-7 ServerRequestInterface
129+
130+
return new HtmlResponse('<h1>Hello, World!</h1>' . $psr7Request->getRequestTarget());
131+
};
132+
133+
$application = (new ApplicationFactory)->createApplication($kernel);
134+
$application->run();
135+
```
136+
59137
## Server Configuration
60138

61139
### NGINX

0 commit comments

Comments
 (0)