mezon / common-application
Common application for basic purposes
1.1.5
2022-06-27 15:12 UTC
Requires
- php: >=7.2.0
- mezon/application: 3.0.*
- mezon/html-template: >=1.1.10 <1.2.0
Requires (Dev)
- infection/infection: ^0.21.5
- mezon/utils: 1.0.*
- mezon/view: 1.2.*
- phpunit/phpunit: ^8.5
- vimeo/psalm: ^4.2
README
## Common application class
### Intro
This class provides simple application routine with more complex rendering and error handling.
### Extended routes processing
In [Application](https://github.com/alexdodonov/mezon-application) class routes may return only strings. But CommonApplication class allows you to return arrays of string which will be placed in the template placeholders.
Simple example:
```PHP
class ExampleApplication extends CommonApplication
{
/**
* Constructor.
*/
function __construct( $template )
{
parent::__construct( $template );
}
function actionSimplePage()
{
return [
'title' => 'Route title' ,
'main' => 'Route main'
];
}
}
```
Here route's handler generates two parts of the page /simple-page/ - 'title' and 'main'. These two part will be inserted into {title} and {main} placeholders respectively.
More complex example:
```PHP
class ExampleApplication extends CommonApplication
{
/**
* Constructor.
*/
function __construct($template)
{
parent::__construct($template);
}
function actionSimplePage()
{
return [
'title' => 'Route title' ,
'main' => new View('Generated main content')
];
}
}
```
Here we pass instance of the class View (or any class derived from View) to the application page compilator. It will call View::render method which must return compiled html content.
### Routes config
You can also keep al routes in configs. You can use json configs:
```JS
[
{
"route": "/route1/",
"callback": "route1",
"method": "GET"
},
{
"route": "/route2/",
"callback": "route2",
"method": ["GET","POST"]
}
]
```
This data must be stored in the './conf/' dir of your project. Or load configs explicitly as shown below (using method loadRoutesFromConfig).
And we also need these methods in the application class.
```PHP
class ExampleApplication extends CommonApplication
{
/**
* Constructor.
*/
function __construct($template)
{
parent::__construct($template);
// loading config on custom path
$this->loadRoutesFromConfig('./my-routes.json');
}
function route1()
{
return [
// here result
];
}
function route2()
{
return [
// here result
];
}
}
```
Note that you can load multiple configs with one call of the method loadRoutesFromConfigs
```PHP
function __construct($template)
{
parent::__construct($template);
$this->loadRoutesFromConfigs(['./conf/my/routes.json', './conf/my-routes.php']);
}
```
Or the same:
```PHP
function __construct($template)
{
parent::__construct($template);
$this->loadRoutesFromDirectory('./conf');
}
```