2017 © Pedro Peláez
 

library glue

Glue is a package to quickly bootstrap packages-based applications

image

madewithlove/glue

Glue is a package to quickly bootstrap packages-based applications

  • Tuesday, December 5, 2017
  • by Anahkiasen
  • Repository
  • 2 Watchers
  • 7 Stars
  • 71 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 3 Forks
  • 2 Open issues
  • 6 Versions
  • 0 % Grown

The README.md

Glue

![Latest Version on Packagist][ico-version] Software License ![Build Status][ico-travis] Coverage Status ![Quality Score][ico-code-quality] Total Downloads, (*1)

, (*2)

What's Glue?

Glue is an adhesive substance used for sticking objects or materials together ( ͡° ͜ʖ ͡°), (*3)

Glue is also an helper package made to quickly bootstrap packages-based applications. At its core it's just a container and a quick PSR7 setup, on top of which are glued together service definitions and middlewares., (*4)

This is not a microframework (in the sense that it doesn't frame your work). If this is what you're looking for I recommend instead using Silex, Slim or whatever you want. On the contrary, Glue is as its name indicates just a bit of glue to tie existing packages and middlewares together. It doesn't assume much, it won't get in your way, it's just a way to tie stuff together., (*5)

What does it look like

To be concise, Glue turns a common setup such as the following (container + router + PSR7):, (*6)

<?php
// Create container
$container = new Container();
$container->addServiceProvider(SomeProvider::class);
$container->addServiceProvider(AnotherProvider::class);

// Create router and routes
$router = new RouteCollection($container);
$router->get('/', 'SomeController::index');

// Create PSR7 middleware handler
$builder = new RelayBuilder();
$relay = $builder->newInstance([
    SomeMiddleware::class,
    function($request, $response, $next) use ($router) {
        $next($request, $router->dispatch($request, $response));
    },
]);

// Create PSR7 stack
$request = ServerRequestFactory::fromGlobals();
$response = $relay(new Request, new Response());

(new SapiEmitter())->emit($response);

Into this:, (*7)

$app = (new Glue())
    ->setDefinitionProviders([
        new SomeDefinition(),
        new AnotherDefinition(),
        new LeagueRouteDefinition(),
    ])
    ->setMiddlewares([
        SomeMiddleware::class,
        LeagueRouteMiddleware::class,
    ]);

// Decorates a router of your choice
$app->get('/', 'SomeController::index');

$app->run();

In order to be truly flexible, Glue accepts any PSR11 compatible container, and register its services through the definition-interop standard., (*8)

As you can see Glue serves two purposes: eliminating recurring boilerplate in binding packages together, and providing definitions for common packages such as league/route. It is configurable and flexible, it won't get in your way, it's just here to help you not type the same things over and over again., (*9)

What's in the box

Glue provides several definitions out of the box: - Routing - Base routing system with league/route - PSR7 stack with zendframework/zend-diactoros - View engine with twig/twig - Facultative base controller, (*10)

  • Business, (*11)

    • Database handling with illuminate/database
    • Migrations with robmorgan/phinx
    • Command bus with league/tactician
  • Development, (*12)

    • Dotenv files with vlucas/phpdotenv
    • Logs handling with monolog/monolog
    • Debugbar with maximebf/debugbar
    • Small CLI with symfony/console
    • Filesystem with league/flysystem
    • REPL with psy/psysh

Any of these can be overidden or removed; this package doesn't enforce any structure or the use of any dependency in particular., (*13)

Why? Because I do a lot of very small web applications, for myself or public ones, and I was tired of going through the same routine for the hundreth time. Then I thought others might have the same use case and here we are., (*14)

Install

$ composer require madewithlove/glue

Usage

See the documentation for more informations., (*15)

Changelog

Please see CHANGELOG for more information what has changed recently., (*16)

Testing

$ composer test

Contributing

Please see CONTRIBUTING and CONDUCT for details., (*17)

Security

If you discover any security related issues, please email heroes@madewithlove.be instead of using the issue tracker., (*18)

Credits

License

The MIT License (MIT). Please see License File for more information., (*19)

The Versions