diff --git a/4-http.md b/4-http.md index 576a977..4b79d02 100644 --- a/4-http.md +++ b/4-http.md @@ -1,4 +1,4 @@ -[<< previous](3-error-handler.md) +[<< previous](3-error-handler.md) | [next >>](5-router.md) ### HTTP @@ -6,7 +6,7 @@ PHP already has a few things built in to make working with HTTP easier. For exam These are good if you just want to get a quick and dirty script runnin. But if you want to write clean, maintanable, [SOLID](http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29) code, then you will want a class with a nice object oriented interface that you can use in your application. -Once again, you don't have to reinvent the wheel and just install a package. I decided to write my own [HTTP component](https://github.com/PatrickLouys/http). +Once again, you don't have to reinvent the wheel and just install a package. I decided to write my own [HTTP component](https://github.com/PatrickLouys/http) because I did not like the existing components, but you don't have to do the same. Some alternatives: [Symfony HttpFoundation](https://github.com/symfony/HttpFoundation), [Nette HTTP Component](https://github.com/nette/http), [Aura Http](https://github.com/auraphp/Aura.Http), [sabre/http](https://github.com/fruux/sabre-http) @@ -22,5 +22,43 @@ Again, edit the `composer.json` to add the new component and then run `composer }, ``` +Now you can add the following below your error handler code in your `Bootstrap.php` (and don't forget to remove the exception): -to be continued... \ No newline at end of file +``` +$request = new \Http\HttpRequest($_GET, $_POST, $_COOKIE, $_FILES, $_SERVER); +$response = new \Http\HttpResponse; +``` + +This sets up the `Request` and `Response` objects that you can use in your other classes to get request data and send a response back to the browser. + +To actually send something back, you will also need to add the following snippet at the end of your `Bootstrap.php` file: + +``` +foreach ($response->getHeaders() as $header) { + header($header); +} + +echo $response->getContent(); +``` + +This will send the response data to the browser. If you don't do this, nothing happens as the `Response` object only stores data. This is handled differently by most other HTTP components where the classes send data back to the browser as a side-effect, so keep that in mind if you use another component. + +Right now it is just sending an empty response back to the browser with the status code `200`, so to change that add the following code between the code snippets from above: + +``` +$content = '