# Http-Komponente

Die Http-Komponente ist eine objektorientierte Abstraction der HTTP-Spezifikation.

## Request-Klasse

Die Request-Klasse beinhaltet `$_GET`, `$_POST`, `$_FILES`, `$_COOKIE` (todo), und `$_SERVER`.

### Request erstellen

```php
$request = Request::createFromGlobals();
```

ist das gleiche wie

```php
$request = new Request(
    $_GET,
    $_POST,
    $_FILES,
    $_SERVER
    $_COOKIE,
);
```

createFromGlobals ist die empfohlene Methode

##### Request aus Container holen

```php
$request = $container->get('Request');
```

Im alten Bereich:

```php
$request = $this->app->Container->get('Request');
```

### Request-Parameter abrufen

* `$request->getGet()` für den Zugriff auf `$_GET`
* `$request->getPost()` für den Zugriff auf `$_POST`
* `$request->getFiles()` für den Zugriff auf `$_FILES`
* `$request->getServer()` für den Zugriff auf `$_SERVER`
* `$request->getCookie()` für den Zugriff auf `$_COOKIE` (TODO)

###### Beispiele

* `$request->getGet('value')` wie `$_GET['value']`  
* `$request->getPost('value')` wie `$_POST['value']`
* `$request->getServer('SERVER_NAME')` wie `$_SERVER['SERVER_NAME']`

#### ReadonlyParameterCollection

Die public Eigenschaften `get`, `post`, `files` und `server` liefern Instanzen der `ReadonlyParameterCollection`-Klasse.
Die Klasse bietet einige Hilfsmethoden:

* `has()` – Gibt `true` zurück wenn der Parameter gesetzt wurde
* `get()` – Gibt den Parameter zurück falls dieser gesetzt wurde; andernfalls `null`
* `all()` – Gibt alle gesetzten Parameter zurück


* `getBool()` – Wandelt den Wert zu Boolean
* `getInt()` – Wandelt den Wert zu Integer
* `getDigits()` – Wandelt den Wert zu String und entfernt alle Zeichen außer Zahlen `[0-9]`
* `getAlpha()` – Wandelt den Wert zu String und entfernt alle Zeichen außer Buchstaben `[a-z, A-Z]`
* `getAlphaNum()` – wie `getAlpha()` zusätzlich Zahlen `[a-z, A-Z, 0-9]`
* `getAlphaNumWithDashes()` – wie `getAlphaDigit()` zusätzlich Minus und Unterstrich `[a-z, A-Z, 0-9, -, _]`

##### Default-Werte

Die Getter-Methoden der `ParameterCollection` nehmen als zweiten Parameter einen Default-Wert entgegen.
Der Default-Wert wird verwendet wenn der Parameter nicht gesetzt ist.

###### Beispiele

* `$request->post->get('cmd', 'download')`  
	Gibt `'download'` zurück, falls `$_POST['cmd']'` nicht gesetzt ist.
* `$request->post->getBool('active', true)`  
  Gibt `true` zurück, falls `$_POST['active']'` nicht gesetzt ist. 

### Nützliches

Nachfolgende Beispielausgaben gehen von folgendem Request aus:

```http request
POST /wawision-19.1/www/index.php?module=welcome&action=settings HTTP/1.1

Host: 192.168.0.177
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:64.0) Gecko/20100101 Firefox/64.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-DE,de;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://192.168.0.177/wawision-19.1/www/index.php?module=welcome&action=settings
Content-Type: application/x-www-form-urlencoded
Content-Length: 101
Connection: keep-alive
Cookie: PHPSESSID=19n48qro8d9blluqveg3dm1qth
Upgrade-Insecure-Requests: 1

startseite=&defaultcolor=%23FFFFFF&chat_popup=1&callcenter_notification=1&submit_startseite=Speichern
```

#### `$request->isSecure()`

Kam der Request über eine geschützte Verbindung?

Ausgabe: `false`

#### `$request->isAjax()`

Kam der Request über XHR?

Ausgabe: `false`

#### `$request->isCli()`

Kam der Request über eine Kommandozeile?

Ausgabe: `false`

#### `$request->getMethod()`

HTTP-Verb in Grossbuchstaben.

Ausgabe: `POST`

#### `$request->getContentType()`

Der hintere Teil von Content-Type Header.

Ausgabe: `x-www-form-urlencoded`

Beispiele:
* `json` bei `application/json`
* `html` bei `text/html`

#### `$request->getAcceptableContentTypes()`

```php
array (
   0 => 'text/html',
   1 => 'application/xhtml+xml',
   2 => 'application/xml',
   3 => '*/*',
 )
```

#### `$request->getContent()`

Gibt den Request-Body zurück.

Ausgabe: `startseite=&defaultcolor=%23FFFFFF&chat_popup=1&callcenter_notification=1&submit_startseite=Speichern`

#### `$request->getFullUri()`

Nicht mehr benutzen; stattdessen getFullUrl oder getBaseUrl verwenden.

`http://192.168.0.177/wawision-19.1/www/index.php?module=welcome&action=settings`

#### `$request->getFullUrl()`

Gibt die komplette Url zurück.

Ausgabe: `http://192.168.0.177/wawision-19.1/www/index.php?module=welcome&action=settings`

#### `$request->getBaseUrl()`

Gibt die Url ohne GET parameter zurück.

Ausgabe: `http://192.168.0.177/wawision-19.1/www/index.php`

#### `$request->getUrlForPath('/mypath')`

Gibt die URL um den angegebenen Pfad erweitert zurück.
Der Pfad muss mit `/` beginnen.

Ausgabe: `http://192.168.0.177/wawision-19.1/www/mypath`

#### `$request->getBasePath()`

Gibt den Pfad zwischen URL und aktuellen SCRIPT_NAME an.

##### Beispiel1:

```php
$_SERVER[
    'REQUEST_URI' => '/www/path/?value=1',
    'SCRIPT_NAME' => '/www/path/index.php',
]
```

Ausgabe: `/`

##### Beispiel2:

URL: 'http://192.168.0.177/wawision/www/api/v1/dateien/50' => '/v1/dateien/50'

#### `$request->getRequestUri()`

Gibt die relative Url ab dem Host zurück; wie `$_SERVER['REQUEST_URI']`

Ausgabe: `/wawision-19.1/www/index.php?module=welcome&action=settings`

#### `$request->isFailsafeUri()`

Gibt `true` zurück, wenn die Failsafe-URI im Request benutzt wurde.

Beispiel Failsafe-Uri: /api/index.php?path=/v1/adressen

#### `$request->getPathInfo()`

Gibt den PathInfo-Teil der Url zurück.

Ausgabe: `''`

#### `$request->getSchemeAndHttpHost()`

Gibt HTTP Schema und Host aus.

Ausgabe: `http://localhost`