add data from work folder

This commit is contained in:
lubiana 2022-03-29 20:35:06 +02:00 committed by Andre Lubian
parent 97579d6d91
commit 48c9c9467d
218 changed files with 16123 additions and 1233 deletions

View file

@ -0,0 +1,20 @@
<?php
declare(strict_types=1);
namespace Lubian\NoFramework\Action;
use Laminas\Diactoros\Response;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
final class Another implements RequestHandlerInterface
{
public function handle(ServerRequestInterface $request): ResponseInterface
{
$response = (new Response())->withStatus(200);
$response->getBody()->write('This works too!');
return $response;
}
}

View file

@ -0,0 +1,21 @@
<?php
declare(strict_types=1);
namespace Lubian\NoFramework\Action;
use Laminas\Diactoros\Response;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
final class Hello implements RequestHandlerInterface
{
public function handle(ServerRequestInterface $request): ResponseInterface
{
$name = $request->getAttribute('name', 'Stranger');
$response = (new Response())->withStatus(200);
$response->getBody()->write('Hello ' . $name . '!');
return $response;
}
}

View file

@ -0,0 +1,20 @@
<?php
declare(strict_types=1);
namespace Lubian\NoFramework\Action;
use Laminas\Diactoros\Response;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
final class InternalServerError implements RequestHandlerInterface
{
public function handle(ServerRequestInterface $request): ResponseInterface
{
$response = (new Response())->withStatus(500);
$response->getBody()->write('Internal Server Error.');
return $response;
}
}

View file

@ -0,0 +1,20 @@
<?php
declare(strict_types=1);
namespace Lubian\NoFramework\Action;
use Laminas\Diactoros\Response;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
final class NotAllowed implements RequestHandlerInterface
{
public function handle(ServerRequestInterface $request): ResponseInterface
{
$response = (new Response())->withStatus(405);
$response->getBody()->write('Method Not Allowed');
return $response;
}
}

View file

@ -0,0 +1,20 @@
<?php
declare(strict_types=1);
namespace Lubian\NoFramework\Action;
use Laminas\Diactoros\Response;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
final class NotFound implements RequestHandlerInterface
{
public function handle(ServerRequestInterface $request): ResponseInterface
{
$response = (new Response())->withStatus(404);
$response->getBody()->write('Page not found');
return $response;
}
}

View file

@ -0,0 +1,102 @@
<?php
declare(strict_types=1);
namespace Lubian\NoFramework;
use const E_ALL;
use Exception;
use FastRoute\Dispatcher;
use Laminas\Diactoros\Response;
use Laminas\Diactoros\ServerRequestFactory;
use Lubian\NoFramework\Action\InternalServerError;
use Lubian\NoFramework\Action\NotAllowed;
use Lubian\NoFramework\Action\NotFound;
use Lubian\NoFramework\Exception\InternalServerErrorException;
use Lubian\NoFramework\Exception\NotAllowedException;
use Lubian\NoFramework\Exception\NotFoundException;
use Psr\Http\Server\RequestHandlerInterface;
use Throwable;
use Whoops\Handler\PrettyPageHandler;
use Whoops\Run;
use function error_log;
use function error_reporting;
use function FastRoute\simpleDispatcher;
use function getenv;
use function header;
use function sprintf;
require __DIR__ . '/../vendor/autoload.php';
$environment = getenv('ENVIRONMENT') ?: 'dev';
error_reporting(E_ALL);
$whoops = new Run();
if ($environment == 'dev') {
$whoops->pushHandler(new PrettyPageHandler());
} else {
$whoops->pushHandler(function (Throwable $e): void {
error_log("Error: " . $e->getMessage(), $e->getCode());
echo 'An Error happened';
});
}
$whoops->register();
$request = ServerRequestFactory::fromGlobals();
$response = new Response();
$routeDefinitionCallback = require __DIR__ . '/../config/routes.php';
$dispatcher = simpleDispatcher($routeDefinitionCallback);
$routeInfo = $dispatcher->dispatch(
$request->getMethod(),
$request->getUri()->getPath(),
);
try {
switch ($routeInfo[0]) {
case Dispatcher::METHOD_NOT_ALLOWED:
throw new NotAllowedException();
case Dispatcher::FOUND:
/** @var RequestHandlerInterface $handler */
$handler = new $routeInfo[1][0]();
$method = $routeInfo[1][1];
if (!$handler instanceof RequestHandlerInterface) {
throw new InternalServerErrorException();
}
foreach ($routeInfo[2] as $attributeName => $attributeValue) {
$request = $request->withAttribute($attributeName, $attributeValue);
}
$response = $handler->$method($request);
break;
case Dispatcher::NOT_FOUND:
default:
throw new NotFoundException();
}
} catch (NotAllowedException) {
$response = (new NotAllowed())->handle($request);
} catch (NotFoundException) {
$response = (new NotFound())->handle($request);
} catch (Exception) {
$response = (new InternalServerError())->handle($request);
}
/** @var string $name */
foreach ($response->getHeaders() as $name => $values) {
$first = strtolower($name) !== 'set-cookie';
foreach ($values as $value) {
$header = sprintf('%s: %s', $name, $value);
header($header, $first);
$first = false;
}
}
$statusLine = sprintf(
'HTTP/%s %s %s',
$response->getProtocolVersion(),
$response->getStatusCode(),
$response->getReasonPhrase()
);
header($statusLine, true, $response->getStatusCode());
echo $response->getBody();

View file

@ -0,0 +1,11 @@
<?php
declare(strict_types=1);
namespace Lubian\NoFramework\Exception;
use Exception;
final class InternalServerErrorException extends Exception
{
}

View file

@ -0,0 +1,11 @@
<?php
declare(strict_types=1);
namespace Lubian\NoFramework\Exception;
use Exception;
final class NotAllowedException extends Exception
{
}

View file

@ -0,0 +1,11 @@
<?php
declare(strict_types=1);
namespace Lubian\NoFramework\Exception;
use Exception;
final class NotFoundException extends Exception
{
}