thirdplace / components
thirdplace components
    dev-main
    2025-01-05 18:40 UTC
Requires
- php: >=8.2
- ext-curl: *
- ext-json: *
- ext-libxml: *
- ext-mbstring: *
- ext-pdo: *
- ext-simplexml: *
Requires (Dev)
- phpunit/phpunit: ^11
This package is auto-updated.
Last update: 2025-10-05 19:09:52 UTC
README
This is a collection of components for creating web applications.
- Dependency container
- Router
- Request,- Responseand- CurlHttpClient
- Json::encode,- Json::decode
- PHP template rendering (render_template())
- Session
- Application object
Tutorial
Install:
composer require thirdplace/components:dev-main
Example usage:
hello.html.php:
<?php
use function Thirdplace\e;
?>
Hello <?= e($name) ?>
index.php:
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use Thirdplace\Application;
use Thirdplace\Container;
use Thirdplace\Json;
use Thirdplace\Request;
use Thirdplace\Response;
use Thirdplace\Session;
use function Thirdplace\render_template;
class HelloController
{
    public function about(Request $request): Response
    {
        return new Response(render_template(__DIR__ . '/about.html.php'));
    }
    public function hello(Request $request, array $args): Response
    {
        $name = $args[0];
        return new Response(render_template(__DIR__ . '/hello.html.php', ['name' => $name]));
    }
    public function goodbye(Request $request): Response
    {
        $message = $request->attribute('message');
        $json = Json::encode(['message' => $message]);
        return new Response($json, 200, ['content-type' => 'application/json']);
    }
}
$container = new Container();
$container[HelloController::class] = function($c) {
    return new HelloController();
};
$container['session_middleware'] = function ($c) {
    return function ($request, $next) use ($c) {
        $session = $c[Session::class];
        $session->start();
        return $next($request);
    };
};
$container[Session::class] = function($c) {
    return new Session($c['session_options']);
};
$container['session_options'] = [
    'name' => 'sid',
];
$app = new Application($container);
$app->add($container['session_middleware']);
$app->addRoute('GET', '/about',       [HelloController::class, 'about']);
$app->addRoute('GET', '/hello/(\w+)', [HelloController::class, 'hello']);
$goodbyeMiddleware = function (Request $request, $next) {
    $request2 = $request->withAttribute('message', 'goodbye!!!');
    return $next($request2);
};
$app->addRoute('GET', '/goodbye',     [HelloController::class, 'goodbye'], [$goodbyeMiddleware]);
$app->run();
Explanation
The goal of this project is to create useful components for those who wants simple minimal framework code.