mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 12:05:37 +00:00
Merge pull request #7146 from robbieaverill/pulls/4.0/middleware-docs
DOCS Fix typos and formatting in middleware documentation
This commit is contained in:
commit
79c74006fd
@ -5,30 +5,31 @@ summary: Create objects for modifying request and response objects across contro
|
||||
|
||||
HTTP Middlewares allow you to put code that will run before or after. These might be used for
|
||||
authentication, logging, caching, request processing, and many other purposes. Note this interface
|
||||
replaces the SilverStripe 3 interface, [RequestFilter](api:SilverStripe\Control\RequestFilter), which still works but is deprecated.
|
||||
replaces the SilverStripe 3 interface [RequestFilter](api:SilverStripe\Control\RequestFilter), which still works but is deprecated.
|
||||
|
||||
To create a middleware class, implement `SilverStripe\Control\HTTPMiddleware` and define the
|
||||
`process(HTTPRequest $request, callbale $delegate)` method. You can do anything you like in this
|
||||
To create a middleware class, implement `SilverStripe\Control\Middleware\HTTPMiddleware` and define the
|
||||
`process(HTTPRequest $request, callable $delegate)` method. You can do anything you like in this
|
||||
method, but to continue normal execution, you should call `$response = $delegate($request)`
|
||||
at some point in this method.
|
||||
|
||||
In addition, you should return an HTTPResponse object. In normal cases, this should be the
|
||||
$response object returned by `$delegate`, perhaps with some modification. However, sometimes you
|
||||
In addition, you should return an `HTTPResponse` object. In normal cases, this should be the
|
||||
`$response` object returned by `$delegate`, perhaps with some modification. However, sometimes you
|
||||
will deliberately return a different response, e.g. an error response or a redirection.
|
||||
|
||||
**mysite/code/CustomMiddleware.php**
|
||||
|
||||
:::php
|
||||
<?php
|
||||
```php
|
||||
<?php
|
||||
|
||||
use SilverStripe\Control\Middleware\HTTPMiddleware
|
||||
|
||||
class CustomMiddleware implements HTTPMiddleware {
|
||||
use SilverStripe\Control\Middleware\HTTPMiddleware
|
||||
use SilverStripe\Control\HTTPRequest;
|
||||
|
||||
class CustomMiddleware implements HTTPMiddleware
|
||||
{
|
||||
public $Secret = 'SECRET';
|
||||
|
||||
public function process(HTTPRequest $request, callable $delegate) {
|
||||
|
||||
public function process(HTTPRequest $request, callable $delegate)
|
||||
{
|
||||
// You can break execution by not calling $delegate.
|
||||
if ($request->getHeader('X-Special-Header') !== $this->Secret) {
|
||||
return new HTTPResponse('You missed the special header', 400);
|
||||
@ -42,35 +43,37 @@ will deliberately return a different response, e.g. an error response or a redir
|
||||
$response = $delegate($request);
|
||||
|
||||
// You can modify the response after it has been generated
|
||||
$response->addHeader('X-Middleware-Applied', 'CustomMiddleware')
|
||||
$response->addHeader('X-Middleware-Applied', 'CustomMiddleware');
|
||||
|
||||
// Don't forget to the return the response!
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Once you have created your middleware class, you must attach it to the Director config to make
|
||||
Once you have created your middleware class, you must attach it to the `Director` config to make
|
||||
use of it.
|
||||
|
||||
## Global middleware
|
||||
|
||||
By adding the service or class name to the Director::Middlewares property via injector,
|
||||
By adding the service or class name to the `Director.Middlewares` property via injector,
|
||||
array, a middleware will be executed on every request:
|
||||
|
||||
**mysite/_config/app.yml**
|
||||
|
||||
|
||||
:::yml
|
||||
---
|
||||
Name: myrequestprocessors
|
||||
After:
|
||||
```yaml
|
||||
---
|
||||
Name: myrequestprocessors
|
||||
After:
|
||||
- requestprocessors
|
||||
---
|
||||
SilverStripe\Core\Injector\Injector:
|
||||
---
|
||||
SilverStripe\Core\Injector\Injector:
|
||||
SilverStripe\Control\Director:
|
||||
properties:
|
||||
Middlewares:
|
||||
CustomMiddleware: %$CustomMiddleware
|
||||
```
|
||||
|
||||
|
||||
Because these are service names, you can configure properties into a custom service if you would
|
||||
@ -78,8 +81,8 @@ like:
|
||||
|
||||
**mysite/_config/app.yml**
|
||||
|
||||
:::yml
|
||||
SilverStripe\Core\Injector\Injector:
|
||||
```yaml
|
||||
SilverStripe\Core\Injector\Injector:
|
||||
SilverStripe\Control\Director:
|
||||
properties:
|
||||
Middlewares:
|
||||
@ -88,6 +91,7 @@ like:
|
||||
class: 'CustomMiddleware'
|
||||
properties:
|
||||
Secret: "DIFFERENT-ONE"
|
||||
```
|
||||
|
||||
## Route-specific middleware
|
||||
|
||||
@ -99,20 +103,21 @@ property. The controller which does the work should be registered under the
|
||||
|
||||
**mysite/_config/app.yml**
|
||||
|
||||
:::yml
|
||||
SilverStripe\Core\Injector\Injector:
|
||||
```yaml
|
||||
SilverStripe\Core\Injector\Injector:
|
||||
SpecialRouteMiddleware:
|
||||
class: SilverStripe\Control\Middleware\RequestHandlerMiddlewareAdapter
|
||||
properties
|
||||
properties:
|
||||
RequestHandler: %$MyController
|
||||
Middlewares:
|
||||
- %$CustomMiddleware
|
||||
- %$AnotherMiddleware
|
||||
SilverStripe\Control\Director:
|
||||
SilverStripe\Control\Director:
|
||||
rules:
|
||||
special\section:
|
||||
Controller: %$SpecialRouteMiddleware
|
||||
```
|
||||
|
||||
## API Documentation
|
||||
|
||||
* [HTTPMiddleware](api:SilverStripe\Control\HTTPMiddleware)
|
||||
* [HTTPMiddleware](api:SilverStripe\Control\Middleware\HTTPMiddleware)
|
||||
|
Loading…
x
Reference in New Issue
Block a user