luthier/framework

Versatile PHP micro-framework for build APIs and websites quickly

0.1.1 2019-02-14 17:30 UTC

This package is auto-updated.

Last update: 2022-01-15 00:06:40 UTC


README

68747470733a2f2f696e67656e69612e6d652f696d616765732f6c7574686965722d6672616d65776f726b2f6c6f676f2e706e67

WARNING: Under development!

Luthier Framework is a versatile PHP micro-framework for build APIs and small websites quickly. When we say "micro" we mean REALLY micro: in fact, only Composer and a single .php file is required to start.

Features

  • Based on the Symfony components
  • Easy to learn and extend
  • Powerful and flexible router with middleware support
  • CSRF protection
  • JSON and XML response helpers
  • Validator with translated error messages
  • Dependency Injection container
  • Command Line Interface command creation
  • Built-in plain PHP template engine with Twig and Blade integration

Requirements

  • PHP >= 7.1.8
  • Composer

Installation

Get Luthier Framework with composer:

composer require luthier/framework 

Usage

Basic example:

<?php 
# your_app/index.php 
 
require 'vendor/autoload.php'; 
 
$app = new Luthier\Framework(); 
 
$app->get('/', function(){ 
    $this->response->write("Hello world!"); 
}); 
 
$app->group('api', function(){ 
 
    $this->get('/', function(){ 
        json_response(['message' => 'Welcome to Luthier Framework!']); 
    }); 
    $this->get('about', function(){ 
        json_response(['version' => Luthier\Framework::VERSION]); 
    }); 
 
}); 
 
$app->run(); 

Defining routes:

$app->get('foo/', function(){ 
    // Default template engine (will search for /foo.php file) 
    view('foo'); 
}); 
 
$app->post('bar/', function(){ 
    view('bar'); 
}); 
 
$app->match(['get','post'], 'baz/', function(){ 
    view('baz'); 
}); 

Router parameters:

$app->get('hello/{name}', function($name){ 
    $this->response->write("Hello $name!"); 
}); 
 
// Optional parameters 
 
$app->get('about/{category?}', function($category = 'animals'){ 
    $this->response->write("Category: category"); 
}); 
 
// Regex parameters 
 
$app->get('website/{((en|es|fr)):lang}', function($lang){ 
    $this->response->write($lang); 
}); 

Route middleware:

// Global middleware: 
 
$app->middleware(function($request, $response, $next){ 
    $response->write('Global <br>'); 
    $next($request, $response); 
}); 
 
// Global middleware (but not assigned to any route yet) 
 
$app->middleware('test', function($request, $response, $next){ 
    $response->write('Before route<br>'); 
    $next($request, $response); 
    $response->write('After route <br>'); 
}); 
 
$this->get('/', function(){ 
    $this->response->write('Route <br>') 
})->middleware('test'); // <- assign the 'test' middleware to this route 
 

Documentation

Coming soon!

Related projects

  • Luthier CI: Improved routing, middleware support, authentication tools and more for CodeIgniter 3 framework
  • SimpleDocs: Dynamic documentation library for PHP which uses Markdown files

Donate

If you love our work, consider support us on Patreon