~thirdplace/components

thirdplace components
remove cache and do tweaks

refs

main
browse  log 

clone

read-only
https://git.sr.ht/~thirdplace/components
read/write
git@git.sr.ht:~thirdplace/components

You can also use your local clone with git send-email.

#Thirdplace Components

This is a collection of components for creating web applications.

  • Dependency container
  • Router
  • Request, Response and 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.

#How-to

#Reference