Skip to content
This repository has been archived by the owner. It is now read-only.
🛰 RESTFul, modern and minimal framework for PHP, built on top of PSR-7 and PSR-15 components.
PHP
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
tests
.editorconfig
.gitattributes
.gitignore
.phpstorm.meta.php
.scrutinizer.yml
.travis.yml
CONTRIBUTING.md
LICENSE
README.md
composer.json
composer.lock
phpcs.xml
phpunit.xml

README.md

Philae

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

RESTFul, modern and minimal framework for PHP, built on top of PSR-7 and PSR-15 components.

This project is compliant with PSR-1, PSR-2, PSR-4, PSR-7, PSR-11 and PSR-15. If you notice compliance oversights, please send a patch via pull request.

Philae and Rosetta

Goals

  • Simple: Keep the core source code as reduced as possible.
  • Flexible: Keep dependencies as minimum as possible.
  • Predictable: Be the glue of essential modern components, following standards and with proper documentation.
  • Powerful: Well tested and robust code, suitable for any scenario and environment.

Components

Install

Via Composer

$ composer require itsjavi/philae

Via Git

$ git clone https://github.com/itsjavi/philae.git

Create a project skeleton with philae-skeleton

$ composer create-project itsjavi/philae-skeleton myproject

Usage

<?php

use Middlewares\ErrorHandlerDefault;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;

include __DIR__ . '/vendor/autoload.php';

// Initialize the app with the default dependencies and some essential middleware.
$app = new Philae\Application();
$app->addServiceProvider(new \Philae\DefaultServiceProvider());
$app->setMiddlewares(
    [
        // error handler
        (new Middlewares\ErrorHandler(ErrorHandlerDefault::class))->catchExceptions(true),
        // dispatch the request
        new Philae\Middlewares\RouteDispatcher(),
        // transform the handler response
        new Philae\Middlewares\ResponseTransformer(),
        // execute the request handler
        (new Philae\Middlewares\RequestHandler())->arguments($app->getResponse()),
    ]
);

// Define the routes
$router = $app->getRouter();

$router->get('/', function (ServerRequestInterface $req, ResponseInterface $res) {
    $res->getBody()->write('<h1>Hello, World!</h1>' . PHP_EOL);
    return $res;
});
$router->get('/{name}', function (ServerRequestInterface $req, ResponseInterface $res, array $params) {
    $res->getBody()->write('<h1>Hello, ' . $params['name'] . '!</h1>' . PHP_EOL);
    return $res;
});

$router->get('/foo', MyController::class); // Compatible also with callable objects implementing __invoke
$router->post('/foo/{id}', MyController::class . '::create'); // and with any other callable definition
$router->put('/foo/{id}', [MyController::class, 'edit']);

// Process the middlewares and send the response:
$app->execute();

Testing

$ composer test

or

$ vendor/bin/phpunit
$ vendor/bin/phpcs

Contributing

Please see CONTRIBUTING for details.

Credits

License

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

You can’t perform that action at this time.