Skip to content

Commit 4bada6b

Browse files
committed
add documentation on adapter middleware to allow function and method as middleware
1 parent dcfb10f commit 4bada6b

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

Diff for: middlewares/index.md

+51
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,8 @@ Fano Framework provides several built-in middlewares.
309309
- `TNoCacheMiddleware`, middleware class which adds `Cache-Control` response header to prevent browser from caching response.
310310
- `TStaticFilesMiddleware`, middleware class which serves static files. For more information, read [Serving static files](/working-with-response/serve-static-files).
311311
- `TThrottleMiddleware`, middleware class which [limits rate of request](/utilities/rate-limit) to one or more routes.
312+
- `TFuncMiddleware`, adapter middleware class which allow function be used as middleware.
313+
- `TMethodMiddleware`, adapter middleware class which allow class method be used as middleware.
312314

313315
### Group several middlewares as one
314316

@@ -364,6 +366,55 @@ var helloCtrlMiddleware : IMiddleware;
364366
helloCtrlMiddleware := TRequestHandlerAsMiddleware.create(helloController);
365367
```
366368

369+
### Use function or method as a middleware
370+
371+
`TFuncMiddleware` and `TMethodMiddleware` are adapter middlewares that allows function and method of class be used as middleware. It means you can wrap a function and attach it to a route and to be executed as part of middleware chain.
372+
373+
For example, if you have following code
374+
```
375+
unit mymiddleware;
376+
377+
interface
378+
379+
uses
380+
fano;
381+
382+
function myAjax(
383+
const request : IRequest;
384+
const response : IResponse;
385+
const args : IRouteArgsReader;
386+
const next : IRequestHandler
387+
) : IResponse;
388+
389+
implementation
390+
391+
function myAjax(
392+
const request : IRequest;
393+
const response : IResponse;
394+
const args : IRouteArgsReader;
395+
const next : IRequestHandler
396+
) : IResponse;
397+
begin
398+
if (not request.isXhr()) then
399+
begin
400+
response.headers().setHeader('Status', '403 Not Ajax Request');
401+
result := response;
402+
end else
403+
begin
404+
result := next.handleRequest(request, response, args);
405+
end;
406+
end;
407+
408+
end.
409+
```
410+
You can use `myAjax()` as middleware as shown below.
411+
```
412+
router.get(
413+
'/hello/{name}',
414+
helloController
415+
).add(TFuncMiddleware.create(@myMiddleware.myAjax));
416+
417+
```
367418
## Middleware issues
368419

369420
### Middleware is not being called

0 commit comments

Comments
 (0)