https://github.com/phore/phore-micro-app
Micro Web Framework
https://github.com/phore/phore-micro-app
Last synced: 5 months ago
JSON representation
Micro Web Framework
- Host: GitHub
- URL: https://github.com/phore/phore-micro-app
- Owner: phore
- License: mit
- Created: 2018-06-11T13:19:09.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2021-02-28T18:41:43.000Z (over 5 years ago)
- Last Synced: 2025-10-02T17:54:23.894Z (9 months ago)
- Language: PHP
- Homepage: https://infracamp.org/project/phore/
- Size: 143 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Minimalistic Microservice Framework
This documentation is written along the guidelines of educational grade documentation discussed in the
[infracamp](https://github.com/infracamp/infracamp/blob/master/DOCUMENTATION_GUIDE.md) project. Please ask and
document issues.
## Goals
- Minimal Footprint
- No external dependencies
- Clear and small stack trace
- Fluent Api
- Role-Based Authentication
Quicklinks
- Assets
- Authentication
- Session
- OAuth
- Firewall ACL
## Naming conventions
Classes for micro-app and libraries are **not** prefixed with `phore_` for convenience.
(It's not framework for framework stuff)
## Quickstart
```index.php:```
```php
$app = new App();
$app->router
->onGet("/", // Define a Action for HTTP-GET-Requests to /
function() {
return "Hello world"; // Important: Return true if output was already sent.
}
);
$app->serve(); // Run the App
```
## Installation
We suggest using [composer](http://getcomposer.com):
```
composer require phore/micro-app
```
## [Routing](docs/router/routing.md) *([Example](docs/router/routing-example.php))*
Define routes (Path) and connect them to controller functions:
- Execute the function if the browser hits `http://domain.xy/hello/world`:
```php
$app->router->onGet("/hello/world", function() {
echo "Hello World";
return true;
});
```
- Define Parameters (Prefix `:`) and optional parameters (`?`) in Routes:
```php
$app->router->onGet("/api/create/:userId/:userName?", function(RouteParams $routeParams) {
echo "Hello {$routeParams->get("userId")} - {$routeParams->get("userName", 'Default Username')}";
return true;
});
```
*`$routeParams`* is automaticly generated by Dependency injection.
- Delegate a request to a separate class: [see Example](doc/router/routing-delegate-example.php)
```php
$app->router->delegate("/admin/*", AdminController::class);
```
- Add a controller Class:
```php
class ActionCtrl {
const ROUTE = "/v1/some/route"
public function on_get(){}
}
$app->addCtrl(ActionCtrl::class);
```
Parameters at controller function are generated by Dependency Injection
and may contain any service defined in DiContainer.
Request specific parameters are:
| Parameter Name | ClassName | Description |
|----------------|------------------|-------------------------------|
| `$request` | `Request` | The full request object |
| `$post` | `Post` | Post data |
| `$get` | `Get` | Get data (Query Params) |
| `$body` | `Body` | Body object |
| `$files` | `Files` ||
||
| `$route` | `Route` | The current route object |
| `$params` | `Params` | Container with QueryParameters|
| `$routeParams` | `RouteParams` | Container with parameters |
| `$GET` | `QueryParams` | Query parameters |
| `$POST` | `QueryParams` | Parameters send by HTTP-POST |
## Dependency Injection
The app-class is a dependency injection container. You can register
values or services using the `define()` method.
- Define a value to property `version`:
```php
$app->define("version", new DiValue("1.0.1"));
echo $app->version;
```
- Define a factory to property `configFile`:
```php
$app->define("configFile", new DiService(function() {
return file_get_contents("config-file.json")
});
echo $app->configFile;
```
## Error Handling
The system has build-in functions for error-handling:
- Activate `json` error/exception handling:
```
$app->setOnExceptionHandler(new JsonExceptionHandler());
```
## API Usage: Default Result Handler
Instead of formating the Result your own, the framework uses a
result-handler to format results returned by `return` in controller.
```
$app->setDefaultResultHandler(new JsonResultHandler());
```
in the controller you can then just return the data:
```php
$app->get("/", function() {
return ["data"=>"someData"];
}
```