From b2f743810f89784fff18676a6390568ac331df6f Mon Sep 17 00:00:00 2001 From: David Zuelke Date: Thu, 23 Feb 2023 18:59:31 +0100 Subject: [PATCH 1/3] cowsay for /coolbeans --- composer.json | 3 ++- composer.lock | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++- web/index.php | 9 ++++++++ 3 files changed, 70 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 0cca148f9..68f0ca603 100644 --- a/composer.json +++ b/composer.json @@ -6,7 +6,8 @@ "slim/psr7": "^1.3.0", "monolog/monolog": "^3.0", "twig/twig": "^3.0", - "slim/twig-view": "^3.0" + "slim/twig-view": "^3.0", + "alrik11es/cowsayphp": "^1.2" }, "require-dev": { "heroku/heroku-buildpack-php": "*" diff --git a/composer.lock b/composer.lock index 85cccad59..b7e1172df 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,66 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0aa7148272c380d8d4d48317eb390443", + "content-hash": "64ddf7a335147fbd677355bc9b70c2d6", "packages": [ + { + "name": "alrik11es/cowsayphp", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/alrik11es/cowsayphp.git", + "reference": "080dc10c8f5420fef35163569293601f17124eeb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alrik11es/cowsayphp/zipball/080dc10c8f5420fef35163569293601f17124eeb", + "reference": "080dc10c8f5420fef35163569293601f17124eeb", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "require-dev": { + "phpunit/phpunit": "5.*", + "scrutinizer/ocular": "~1.1" + }, + "bin": [ + "bin/cowsayphp" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Cowsayphp\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marcos Sigueros", + "email": "alrik11es@gmail.com", + "homepage": "https://github.com/alrik11es", + "role": "Developer" + } + ], + "description": "Cowsay port in PHP", + "homepage": "https://github.com/alrik11es/cowsayphp", + "keywords": [ + "cowsay" + ], + "support": { + "issues": "https://github.com/alrik11es/cowsayphp/issues", + "source": "https://github.com/alrik11es/cowsayphp/tree/master" + }, + "time": "2016-08-25T07:53:44+00:00" + }, { "name": "fig/http-message-util", "version": "1.1.5", diff --git a/web/index.php b/web/index.php index c1a82e533..656058c1f 100755 --- a/web/index.php +++ b/web/index.php @@ -25,6 +25,10 @@ $logger->pushHandler(new StreamHandler('php://stderr'), Level::Debug); return $logger; }); +// Add Cowsay to Container +$container->set(\Cowsayphp\AnimalInterface::class, function() { + return \Cowsayphp\Farm::create(\Cowsayphp\Farm\Cow::class); +}); // Create main Slim app $app = Bridge::create($container); @@ -35,5 +39,10 @@ $logger->debug('logging output.'); return $twig->render($response, 'index.twig'); }); +$app->get('/coolbeans', function(Request $request, Response $response, LoggerInterface $logger, \Cowsayphp\AnimalInterface $animal) { + $logger->debug('letting the Cowsay library write something cool.'); + $response->getBody()->write("
".$animal->say("Cool beans")."
"); + return $response; +}); $app->run(); From 23da245b550c5463366967f112e024ebc0bbf35e Mon Sep 17 00:00:00 2001 From: David Zuelke Date: Thu, 23 Feb 2023 19:02:21 +0100 Subject: [PATCH 2/3] make Cowsay animal controllable by env var COWSAY_FARM_CLASS can be one of 'Cow', 'Dragon', 'Tux' or 'Whale' --- web/index.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/index.php b/web/index.php index 656058c1f..444b69058 100755 --- a/web/index.php +++ b/web/index.php @@ -27,7 +27,8 @@ }); // Add Cowsay to Container $container->set(\Cowsayphp\AnimalInterface::class, function() { - return \Cowsayphp\Farm::create(\Cowsayphp\Farm\Cow::class); + $class = '\\Cowsayphp\\Farm\\'.(getenv("COWSAY_FARM_CLASS")?:'Cow'); + return \Cowsayphp\Farm::create($class); }); // Create main Slim app From 244b13136cfe0b139d24260c87aa935eda4309ea Mon Sep 17 00:00:00 2001 From: David Zuelke Date: Thu, 23 Feb 2023 19:39:47 +0100 Subject: [PATCH 3/3] added database access --- views/database.twig | 14 ++++++++++++++ web/index.php | 24 ++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 views/database.twig diff --git a/views/database.twig b/views/database.twig new file mode 100644 index 000000000..dd0fb30b3 --- /dev/null +++ b/views/database.twig @@ -0,0 +1,14 @@ +{% extends "layout.html" %} + +{% block content %} +

Got these rows from the database:

+ +
    +{% for n in names %} +
  • {{ n.name }}
  • +{% else %} +
  • No entries yet!
  • +{% endfor %} +
+ +{% endblock %} diff --git a/web/index.php b/web/index.php index 444b69058..c82c53030 100755 --- a/web/index.php +++ b/web/index.php @@ -30,6 +30,18 @@ $class = '\\Cowsayphp\\Farm\\'.(getenv("COWSAY_FARM_CLASS")?:'Cow'); return \Cowsayphp\Farm::create($class); }); +// Add Database connection to Container +$container->set(PDO::class, function() { + $dburl = parse_url(getenv('DATABASE_URL') ?: throw new Exception('no DATABASE_URL')); + return new PDO(sprintf( + "pgsql:host=%s;port=%s;dbname=%s;user=%s;password=%s", + $dburl['host'], + $dburl['port'], + ltrim($dburl['path'], '/'), // URL path is the DB name, must remove leading slash + $dburl['user'], + $dburl['pass'], + )); +}); // Create main Slim app $app = Bridge::create($container); @@ -45,5 +57,17 @@ $response->getBody()->write("
".$animal->say("Cool beans")."
"); return $response; }); +$app->get('/db', function(Request $request, Response $response, LoggerInterface $logger, Twig $twig, PDO $pdo) { + $st = $pdo->prepare('SELECT name FROM test_table'); + $st->execute(); + $names = array(); + while($row = $st->fetch(PDO::FETCH_ASSOC)) { + $logger->debug('Row ' . $row['name']); + $names[] = $row; + } + return $twig->render($response, 'database.twig', [ + 'names' => $names, + ]); +}); $app->run();