agorlov / lipid
Object approach framework for web apps
Installs: 8 913
Dependents: 0
Suggesters: 0
Security: 0
Stars: 7
Watchers: 4
Forks: 4
Open Issues: 23
Requires
- php: >= 8.0
- twig/twig: ^2.0
Requires (Dev)
- phpmd/phpmd: ^2.6
- phpstan/phpstan: ^0.11.8
- phpunit/phpunit: ^8
- squizlabs/php_codesniffer: ^3.4
This package is auto-updated.
Last update: 2025-04-21 16:59:47 UTC
README
Lipid is an objects designed microframework for PHP web apps.
Quickstart
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.
How to create Actions (pages or api-responses)
ActIndex.php
<?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 $this->GET array
<?php class ActIndex implements Action { private $rqGet; public function __construct(array $GET = null) { $this->rqGet = $GET ?? $_GET; } public function handle(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:
<?php public function __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 ?? new AppPDO; $this->config = $config ?? new CfgFile; $this->env = $env ?? new RqENV; $this->tpl = $tpl ?? new AppTpl }
Design principles
- 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 framework
to Lipid as process (including design principles, rules, ci/cd)
Library development cycle
-
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
PHPMD
@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")
* ..
*/