Lipid is an objects designed microframework for PHP web apps.
Create app directory:
$ mkdir testapp
$ composer require agorlov/lipid
Lipid 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
class ActIndex implements Action
{
public function handle(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 RqGET object
class ActIndex implements Action
{
private $rqGet;
public function __construct(Request $rqGet = null)
{
$this->rqGet = $rqGet ?? new RqGET();
}
public function handle(Response $resp): Response
{
$test = $this->rqGet->param('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:
public function __construct(
Request $req = null,
AppPDO $db = null,
Config $config = null,
Env $env = null,
Session $sess = null,
Tpl $tpl
// or anything you need for your Action
)
{
$this->rqPOST = $req ?? new RqGET();
$this->rqGET = $req ?? new RqGET();
$this->db = $db ?? new AppPDO;
$this->config = $config ?? new CfgFile;
$this->env = $env ?? new AppEnv;
$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 piplene: unit tests, PSR2 checker,
inspired by @yegor256 Elegant Objects
-
Micro-format, like lipid is.
-
Clone repository
-
$ composer install
-
$ composer dump-autoload
-
$ composer example
-
open 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 phpcs
and$composer phpcs-fix
-
Check 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")
* ..
*/