Lipid is an objects designed microframework for PHP web apps.
Create app directory:
$ mkdir testapp
$ composer require agorlov/lipidLipid is installed, start with example app, run:
$ vendor/bin/lipidstrap
3 files will be created:
index.php- it's your app, it consists of actions-objects for each page or request;src/ActIndex.php- it's example action for main page;tpl/index.twig- it's example index page template.
And start your app:
$ php -S localhost:8000 index.php
Finaly open browser: http://localhost:8000
Enjoy Result and start creating your app pages.
ActIndex.php
<?phpclass ActIndex implements Action
{
publicfunctionhandle(Response$resp): Response
{
return$resp->withBody(
"Hello, World 2!<br>" . '<a href="/login">login</a>'
);
}
}If we need database or GET params, put it in constructor:
In this example $_GET['test'] -> with $this->GET array
<?phpclass ActIndex implements Action
{
private$rqGet;
publicfunction__construct(array$GET = null)
{
$this->rqGet = $GET ?? $_GET;
}
publicfunctionhandle(Response$resp): Response
{
$test = $this->GET['test'] ?? 'nothing';
return$resp->withBody(
"Hello, World 2!<br>" . '<a href="/login">login</a>' .
'$_GET[test]=' . htmlentities($test)
);
}
}GET request, POST request, Database, Config, Environment, Session:
<?phppublicfunction__construct(
array$GET = null, AppPDO$db = null, Config$config = null, Request$env = null,
Session$sess = null,
Tpl$tpl// or anything you need for your Action
) {
$this->POST = $GET ?? $_POST;
$this->GET = $GET ?? $_GET;
$this->db = $db ?? newAppPDO;
$this->config = $config ?? newCfgFile;
$this->env = $env ?? newRqENV;
$this->tpl = $tpl ?? new AppTpl
}- True OOP:
- each object is representation of domain term
- no static,
- small objects,
- without extends,
- wide use of decorators,
- strict CI/CD piplene: unit tests, PSR2 checker,
- immutable
- inspired by @yegor256 Elegant Objects
Micro-format, like lipid is.
From
Lipid frameworkto Lipid as process (including design principles, rules, ci/cd)
Clone repository
$ composer install$ composer dump-autoload$ composer exampleopen browser: http://localhost:8000/
look at the source code: example/ directory.
Put some changes, create branch for issue:
$ git checkout -b 'Issue123'
Check and fix PSR2
$ composer phpcsand$composer phpcs-fixCheck by unit tests:
$ composer tests
- commit, push and create PR.
git commit -m 'Thats was done closes #123' -a
git push --set-upstream origin Issue123
@todo #75 setup and add phpmd to merge checks
To disable some nasty rule, add comment:
- run phpmd:
$ composer phpmd-xml - look at rule name
- add string
@SuppressWarnings("rule name")to phpdoc block of method or class
/**
* Class Title
*
* ..
* @SuppressWarnings("ElseExpression")
* ..
*/