diff --git a/composer.json b/composer.json index 1c09c25..c7a2e76 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,6 @@ "require": { "slim/slim": "4.*", "slim/psr7": "^1.7", - "php-di/php-di": "^7.1", - "slim/twig-view": "^3.4" + "php-di/php-di": "^7.1" } } diff --git a/composer.lock b/composer.lock index 93a9a35..8d98dea 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "1d5fe2a473d3977745130ee120c50235", + "content-hash": "23c8694ee036d4ff156175bf8fa3ad34", "packages": [ { "name": "fig/http-message-util", @@ -867,306 +867,6 @@ ], "time": "2025-08-20T18:16:16+00:00" }, - { - "name": "slim/twig-view", - "version": "3.4.1", - "source": { - "type": "git", - "url": "https://github.com/slimphp/Twig-View.git", - "reference": "b4268d87d0e327feba5f88d32031e9123655b909" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/slimphp/Twig-View/zipball/b4268d87d0e327feba5f88d32031e9123655b909", - "reference": "b4268d87d0e327feba5f88d32031e9123655b909", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0", - "psr/http-message": "^1.1 || ^2.0", - "slim/slim": "^4.12", - "symfony/polyfill-php81": "^1.29", - "twig/twig": "^3.11" - }, - "require-dev": { - "phpspec/prophecy-phpunit": "^2.0", - "phpstan/phpstan": "^1.10.59", - "phpunit/phpunit": "^9.6 || ^10", - "psr/http-factory": "^1.0", - "squizlabs/php_codesniffer": "^3.9" - }, - "type": "library", - "autoload": { - "psr-4": { - "Slim\\Views\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Josh Lockhart", - "email": "hello@joshlockhart.com", - "homepage": "http://joshlockhart.com" - }, - { - "name": "Pierre Berube", - "email": "pierre@lgse.com", - "homepage": "http://www.lgse.com" - } - ], - "description": "Slim Framework 4 view helper built on top of the Twig 3 templating component", - "homepage": "https://www.slimframework.com", - "keywords": [ - "framework", - "slim", - "template", - "twig", - "view" - ], - "support": { - "issues": "https://github.com/slimphp/Twig-View/issues", - "source": "https://github.com/slimphp/Twig-View/tree/3.4.1" - }, - "time": "2024-09-26T05:42:02+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.6-dev" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-25T14:21:43+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.33.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.33.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", - "shasum": "" - }, - "require": { - "ext-iconv": "*", - "php": ">=7.2" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-12-23T08:48:59+00:00" - }, { "name": "symfony/polyfill-php80", "version": "v1.33.0", @@ -1250,165 +950,6 @@ } ], "time": "2025-01-02T08:10:11+00:00" - }, - { - "name": "symfony/polyfill-php81", - "version": "v1.33.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", - "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.33.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "twig/twig", - "version": "v3.21.1", - "source": { - "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/285123877d4dd97dd7c11842ac5fb7e86e60d81d", - "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d", - "shasum": "" - }, - "require": { - "php": ">=8.1.0", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3" - }, - "require-dev": { - "phpstan/phpstan": "^2.0", - "psr/container": "^1.0|^2.0", - "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" - }, - "type": "library", - "autoload": { - "files": [ - "src/Resources/core.php", - "src/Resources/debug.php", - "src/Resources/escaper.php", - "src/Resources/string_loader.php" - ], - "psr-4": { - "Twig\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Twig Team", - "role": "Contributors" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" - } - ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "https://twig.symfony.com", - "keywords": [ - "templating" - ], - "support": { - "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.21.1" - }, - "funding": [ - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/twig/twig", - "type": "tidelift" - } - ], - "time": "2025-05-03T07:21:55+00:00" } ], "packages-dev": [ diff --git a/public/index.php b/public/index.php index 0e49d46..9b2023a 100644 --- a/public/index.php +++ b/public/index.php @@ -1,38 +1,16 @@ true, - 'cookie_secure' => !empty($_SERVER['HTTPS']), - 'cookie_samesite' => 'Lax', -]); + +use Psr\Http\Message\ResponseInterface as Response; +use Psr\Http\Message\RequestInterface as Request; +use Slim\Factory\AppFactory; require __DIR__ . '/../vendor/autoload.php'; -use DI\Container; -use DigiWill\Controllers\UserController; -use Slim\Factory\AppFactory; -use Slim\Views\Twig; -use Slim\Views\TwigMiddleware; -use Tests\Fakes\FakeUserRepository; -use DigiWill\Repositories\UserRepository; -use DigiWill\MiddleWare\AuthMiddleware; +$app = AppFactory::create(); -$container = new Container([ - UserRepository::class => DI\create(FakeUserRepository::class), -]); - -$app = AppFactory::createFromContainer($container); - -$twig = Twig::create(__DIR__ . '/../templates', ['cache' => false]); - -$auth = new AuthMiddleware(); - -$app->add(TwigMiddleware::create($app, $twig)); -$app->addErrorMiddleware(true, false, false); - -$app->get('/', [UserController::class, 'home']); -$app->get('/login', [UserController::class, 'login']); -$app->get('/logout', [UserController::class, 'logout']); -$app->post('/login', [UserController::class, 'doLogin']); -$app->get('/dashboard', [UserController::class, 'dashboard'])->add($auth); +$app->get('/', function (Request $request, Response $response, $args) { + $response->getBody()->write("Hello world!"); + return $response; +}); $app->run(); diff --git a/src/Controllers/UserController.php b/src/Controllers/UserController.php deleted file mode 100644 index 440dfa7..0000000 --- a/src/Controllers/UserController.php +++ /dev/null @@ -1,73 +0,0 @@ -userRepo->find(1); - $view = Twig::fromRequest($request); - - return $view->render($response, 'home.html.twig', [ - 'name' => '', - ]); - } - - public function login(Request $request, Response $response): Response - { - $view = Twig::fromRequest($request); - - return $view->render($response, 'login.html.twig', [ - 'name' => '', - ]); - } - - public function doLogin(Request $request, Response $response): Response - { - $_SESSION['user_id'] = 1; - $_SESSION['user'] = ['id' => 1, 'email' => 'email@email.com']; - - return $response->withHeader('Location', '/dashboard')->withStatus(302); - } - - public function dashboard(Request $request, Response $response): Response - { - $view = Twig::fromRequest($request); - - return $view->render($response, 'dashboard.html.twig', [ - 'name' => '', - ]); - } - - public function logout(Request $request, Response $response): Response - { - $_SESSION = []; - if (ini_get('session.use_cookies')) { - $params = session_get_cookie_params(); - setcookie( - session_name(), - '', - time() - 42000, - $params['path'], - $params['domain'], - $params['secure'], - $params['httponly'] - ); - } - session_destroy(); - - return $response - ->withHeader('Location', '/') - ->withStatus(302); - } -} diff --git a/src/Domain/User.php b/src/Domain/User.php index 2b70d3a..6edda0b 100644 --- a/src/Domain/User.php +++ b/src/Domain/User.php @@ -4,12 +4,5 @@ namespace DigiWill\Domain; class User { - public function __construct( - private ?int $id - ) {} - public function getId(): ?int - { - return $this->id; - } } diff --git a/src/MiddleWare/AuthMiddleware.php b/src/MiddleWare/AuthMiddleware.php deleted file mode 100644 index 6310e49..0000000 --- a/src/MiddleWare/AuthMiddleware.php +++ /dev/null @@ -1,27 +0,0 @@ -handle($request); - } - - $uri = $request->getUri()->getPath(); - if ($uri !== '/login' && $uri !== '/logout') { - $_SESSION['intended'] = $uri; - } - $resp = new SlimResponse(302); - - return $resp->withHeader('Location', '/login'); - } -} diff --git a/templates/dashboard.html.twig b/templates/dashboard.html.twig deleted file mode 100644 index 94b27d6..0000000 --- a/templates/dashboard.html.twig +++ /dev/null @@ -1,10 +0,0 @@ - - - - Dashboard - - -

Dashboard

-

Only visible when logged in

- - diff --git a/templates/home.html.twig b/templates/home.html.twig deleted file mode 100644 index 41a60c5..0000000 --- a/templates/home.html.twig +++ /dev/null @@ -1,10 +0,0 @@ - - - - Welcome to Slim! - - -

Hello {{ name }}

- login - - diff --git a/templates/login.html.twig b/templates/login.html.twig deleted file mode 100644 index ea2cc8c..0000000 --- a/templates/login.html.twig +++ /dev/null @@ -1,13 +0,0 @@ - - - - Login - - -
-
-
- -
- - diff --git a/tests/Fakes/FakeUserRepository.php b/tests/Fakes/FakeUserRepository.php index 58132c6..a6fd47e 100644 --- a/tests/Fakes/FakeUserRepository.php +++ b/tests/Fakes/FakeUserRepository.php @@ -16,12 +16,10 @@ class FakeUserRepository implements UserRepository public function find(int $id): ?User { - return null; } public function findByEmail(string $email): ?User { - return null; } public function save(User $user): User