Skip to content

Commit a586863

Browse files
committed
Move resource ownership into utopia-php/di
1 parent d2db9f3 commit a586863

6 files changed

Lines changed: 135 additions & 145 deletions

File tree

README.md

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
Utopia HTTP is a PHP MVC based framework with minimal must-have features for professional, simple, advanced and secure web development. This library is maintained by the [Appwrite team](https://appwrite.io).
1010

11-
Utopia HTTP is dependency-free. Any extra features, such as authentication or caching are available as standalone models in order to keep the framework core clean, light, and easy to learn.
11+
Utopia HTTP keeps routing and request lifecycle concerns separate from resource wiring by relying on the standalone Utopia DI package for dependency injection.
1212

1313
## Getting Started
1414

@@ -23,11 +23,14 @@ Init your first application in `src/server.php`:
2323
```php
2424
require_once __DIR__.'/../vendor/autoload.php';
2525

26+
use Utopia\DI\Container;
2627
use Utopia\Http\Http;
2728
use Utopia\Http\Request;
2829
use Utopia\Http\Response;
2930
use Utopia\Http\Adapter\FPM\Server;
3031

32+
$container = new Container();
33+
3134
Http::get('/hello-world') // Define Route
3235
->inject('request')
3336
->inject('response')
@@ -43,7 +46,7 @@ Http::get('/hello-world') // Define Route
4346

4447
Http::setMode(Http::MODE_TYPE_PRODUCTION);
4548

46-
$http = new Http(new Server(), 'America/New_York');
49+
$http = new Http(new Server(), 'America/New_York', $container);
4750
$http->start();
4851
```
4952

@@ -66,10 +69,13 @@ The library supports server adapters to be able to run on any PHP setup. You cou
6669
#### Use PHP FPM server
6770

6871
```php
72+
use Utopia\DI\Container;
6973
use Utopia\Http\Http;
7074
use Utopia\Http\Response;
7175
use Utopia\Http\Adapter\FPM\Server;
7276

77+
$container = new Container();
78+
7379
Http::get('/')
7480
->inject('response')
7581
->action(
@@ -78,7 +84,7 @@ Http::get('/')
7884
}
7985
);
8086

81-
$http = new Http(new Server(), 'America/New_York');
87+
$http = new Http(new Server(), 'America/New_York', $container);
8288
$http->start();
8389
```
8490

@@ -87,11 +93,14 @@ $http->start();
8793
#### Using Swoole server
8894

8995
```php
96+
use Utopia\DI\Container;
9097
use Utopia\Http\Http;
9198
use Utopia\Http\Request;
9299
use Utopia\Http\Response;
93100
use Utopia\Http\Adapter\Swoole\Server;
94101

102+
$container = new Container();
103+
95104
Http::get('/')
96105
->inject('request')
97106
->inject('response')
@@ -101,7 +110,7 @@ Http::get('/')
101110
}
102111
);
103112

104-
$http = new Http(new Server('0.0.0.0', '80'), 'America/New_York');
113+
$http = new Http(new Server('0.0.0.0', '80'), 'America/New_York', $container);
105114
$http->start();
106115
```
107116

@@ -210,17 +219,19 @@ Groups are designed to be actions that run during the lifecycle of requests to e
210219

211220
Resources allow you to prepare dependencies for requests such as database connection or the user who sent the request. A new instance of a resource is created for every request.
212221

213-
Define a resource:
222+
Define a resource on the DI container:
214223

215224
```php
216-
Http::setResource('timing', function() {
225+
$container->setResource('timing', function() {
217226
return \microtime(true);
218227
});
219228
```
220229

221230
Inject resource into endpoint action:
222231

223232
```php
233+
$http = new Http(new Server(), 'America/New_York', $container);
234+
224235
Http::get('/')
225236
->inject('timing')
226237
->inject('response')
@@ -248,7 +259,7 @@ To learn more about architecture and features for this library, check out more i
248259

249260
## System Requirements
250261

251-
Utopia HTTP requires PHP 8.1 or later. We recommend using the latest PHP version whenever possible.
262+
Utopia HTTP requires PHP 8.2 or later. We recommend using the latest PHP version whenever possible.
252263

253264
## More from Utopia
254265

docs/Getting-Starting-Guide.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ Http::get('/')
3333
$http->on('request', function (SwooleRequest $swooleRequest, SwooleResponse $swooleResponse) {
3434
$request = new Request($swooleRequest);
3535
$response = new Response($swooleResponse);
36-
$http = new Http('America/Toronto');
36+
$http = new Http($server, 'America/Toronto');
3737
$http->run($request, $response);
3838
});
3939

@@ -281,7 +281,6 @@ Http::shutdown(function($request) {
281281
# Running Locally
282282
If you have PHP and Composer installed on your device, you can run Utopia apps locally by downloading the `utopia-php/http` dependency using `composer require utopia-php/http` command.
283283

284-
> Utopia HTTP requires PHP 8.1 or later. We recommend using the latest PHP version whenever possible.
284+
> Utopia HTTP requires PHP 8.2 or later. We recommend using the latest PHP version whenever possible.
285285
286286
Wonderful! 😄 You’re all set to create a basic demo app using the Utopia HTTP. If you have any issues or questions feel free to reach out to us on our [Discord Server](https://appwrite.io/discord).
287-

src/Http/Adapter/FPM/Server.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
namespace Utopia\Http\Adapter\FPM;
44

55
use Utopia\Http\Adapter;
6-
use Utopia\Http\Http;
76

87
class Server extends Adapter
98
{
@@ -16,10 +15,10 @@ public function onRequest(callable $callback)
1615
$request = new Request();
1716
$response = new Response();
1817

19-
Http::setResource('fpmRequest', fn () => $request);
20-
Http::setResource('fpmResponse', fn () => $response);
21-
22-
call_user_func($callback, $request, $response, 'fpm');
18+
call_user_func($callback, $request, $response, 'fpm', [
19+
'fpmRequest' => $request,
20+
'fpmResponse' => $response,
21+
]);
2322
}
2423

2524
public function onStart(callable $callback)

src/Http/Adapter/Swoole/Server.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
use Swoole\Coroutine\Http\Server as SwooleServer;
88
use Swoole\Http\Request as SwooleRequest;
99
use Swoole\Http\Response as SwooleResponse;
10-
use Utopia\Http\Http;
1110

1211
use function Swoole\Coroutine\run;
1312

@@ -29,10 +28,10 @@ public function onRequest(callable $callback)
2928
$this->server->handle('/', function (SwooleRequest $request, SwooleResponse $response) use ($callback) {
3029
$context = \strval(Coroutine::getCid());
3130

32-
Http::setResource('swooleRequest', fn () => $request, [], $context);
33-
Http::setResource('swooleResponse', fn () => $response, [], $context);
34-
35-
call_user_func($callback, new Request($request), new Response($response), $context);
31+
call_user_func($callback, new Request($request), new Response($response), $context, [
32+
'swooleRequest' => $request,
33+
'swooleResponse' => $response,
34+
]);
3635
});
3736
}
3837

0 commit comments

Comments
 (0)