Skip to content
/ lipid Public

Lipid is an objects designed microframework for PHP web apps

Notifications You must be signed in to change notification settings

agorlov/lipid

Folders and files

NameName
Last commit message
Last commit date

Latest commit

8513a88 · Feb 10, 2023
Sep 13, 2019
Feb 10, 2023
Jun 3, 2019
May 31, 2019
May 29, 2019
Aug 29, 2019
Sep 13, 2019
May 20, 2020
Sep 22, 2021
Sep 13, 2019
May 31, 2019
Jun 3, 2019

Repository files navigation

Lipid

Hits-of-Code Maintainability codecov

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

  1. 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
  1. Micro-format, like lipid is.

  2. From Lipid framework to Lipid as process (including design principles, rules, ci/cd)

Library development cycle

  1. Clone repository

  2. $ composer install

  3. $ composer dump-autoload

  4. $ composer example

  5. open browser: http://localhost:8000/

  6. look at the source code: example/ directory.

  7. Put some changes, create branch for issue:

$ git checkout -b 'Issue123'
  1. Check and fix PSR2 $ composer phpcs and $composer phpcs-fix

  2. Check by unit tests:

$ composer tests
  1. 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:

  1. run phpmd: $ composer phpmd-xml
  2. look at rule name
  3. add string @SuppressWarnings("rule name") to phpdoc block of method or class
/**
 * Class Title
 *
 * ..
 * @SuppressWarnings("ElseExpression")
 * ..
 */