From 1e7fa2d8946831df689279456fcdd0d85e0c0024 Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 22 Dec 2025 16:16:03 -0500 Subject: [PATCH] db test --- .gitignore | 2 + protected/src/composer.json | 8 +++- protected/src/controllers/app/home_ctrl.php | 31 +++++++++++-- .../src/outputs/app/home/val_tests_out.php | 4 +- protected/src/services/on_database_test.php | 43 +++++++++++++++++++ protected/src/services/on_dotenv.php | 21 +++++++++ .../src/views/twig/app/val_tests.html.twig | 2 +- 7 files changed, 104 insertions(+), 7 deletions(-) create mode 100644 protected/src/services/on_database_test.php create mode 100644 protected/src/services/on_dotenv.php diff --git a/.gitignore b/.gitignore index 0bf0f12..e86842b 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ protected/logs protected/src/composer.lock *.swp *.log +env +.env diff --git a/protected/src/composer.json b/protected/src/composer.json index 1ed14b7..72441a7 100644 --- a/protected/src/composer.json +++ b/protected/src/composer.json @@ -1,9 +1,15 @@ { + "config": { + "platform": { + "php": "8.4" + } + }, "require": { "twig/twig": "^3.0", "liquid/liquid": "^1.4", "ezyang/htmlpurifier": "^4.18", "twilio/sdk": "^8.7", - "firebase/php-jwt": "^6.11" + "firebase/php-jwt": "^6.11", + "vlucas/phpdotenv": "^5.6" } } diff --git a/protected/src/controllers/app/home_ctrl.php b/protected/src/controllers/app/home_ctrl.php index e327655..908efe1 100644 --- a/protected/src/controllers/app/home_ctrl.php +++ b/protected/src/controllers/app/home_ctrl.php @@ -9,9 +9,10 @@ declare(strict_types = 1); */ namespace Project\controllers\app; -use \CodeHydrater\base_controller; -use \CodeHydrater\enums\view_type as ViewType; -use \CodeHydrater\bootstrap\use_iol as IOL; +use CodeHydrater\base_controller; +use CodeHydrater\enums\view_type as ViewType; +use CodeHydrater\bootstrap\use_iol as IOL; +use CodeHydrater\bootstrap\registry as Registry; /** * Description of home_ctrl URL Route: /FOLDER/FILE/METHOD @@ -35,6 +36,30 @@ class home_ctrl extends base_controller { return $this->response; } + public function di_test() { + Registry::get('di')->get('dotenv'); + + $dotenv = \Dotenv\Dotenv::createImmutable(CodeHydrater_PROJECT); + $dotenv->load(); + $dotenv->required(['DB_HOST', 'DB_USER', 'DB_PASSWORD'])->notEmpty(); + + $container = Registry::get('di'); + $container->set(\Database::class, function() { + return new \Database(host: $_ENV['DB_HOST'], + name: $_ENV['DB_NAME'], + user: $_ENV['DB_USER'], + password: $_ENV['DB_PASSWORD'], + ); + }); + + $repository = $container->get(\Repository::class); + + $data = $repository->getAll(); + + var_dump($data); + return $this->response; + } + public function twig() { $this->view->set('twig_data', ['name' => "John Doe"]); $content = $this->view->fetch($this, "app/test", ViewType::TWIG); diff --git a/protected/src/outputs/app/home/val_tests_out.php b/protected/src/outputs/app/home/val_tests_out.php index a925900..6672944 100644 --- a/protected/src/outputs/app/home/val_tests_out.php +++ b/protected/src/outputs/app/home/val_tests_out.php @@ -20,8 +20,8 @@ class val_tests_out { $form_builder = new Form(); $form_builder->set_escape(false); $form_builder->open(options: ['autocomplete'=>'off', 'class'=>'needs-validation was-validated']); - $form_builder->fieldset_open(['style'=>'width: 200px;']); - $form_builder->legend("News Letter"); + $form_builder->fieldset_open(['style'=>'width: 250px;', 'class'=>'border rounded-3 p-3']); + $form_builder->legend("News Letter", ['class'=>'float-none w-auto px-3']); $data = $form_builder->build_group($input); $form_builder->open_div(['class'=>$div_class]); $form_builder->submit("go", ['class'=>'btn btn-primary']); diff --git a/protected/src/services/on_database_test.php b/protected/src/services/on_database_test.php new file mode 100644 index 0000000..9fffefa --- /dev/null +++ b/protected/src/services/on_database_test.php @@ -0,0 +1,43 @@ + + * @copyright (c) 2025, Robert Strutts + * @license MIT + */ + +class Database +{ + public function __construct(private string $host, + private string $name, + private string $user, + private string $password) + { + } + + public function getConnection(): PDO + { + $dsn = "mysql:host={$this->host};dbname={$this->name}"; + + return new PDO($dsn, $this->user, $this->password); + } +} + +class Repository +{ + public function __construct(private Database $database) + { + } + + public function getAll(): array + { + $pdo = $this->database->getConnection(); + + $stmt = $pdo->query("SELECT * FROM tblproduct"); + + return $stmt->fetchAll(PDO::FETCH_ASSOC); + } +} + diff --git a/protected/src/services/on_dotenv.php b/protected/src/services/on_dotenv.php new file mode 100644 index 0000000..b02cf36 --- /dev/null +++ b/protected/src/services/on_dotenv.php @@ -0,0 +1,21 @@ + + * @copyright (c) 2025, Robert Strutts + * @license MIT + */ + +use CodeHydrater\bootstrap\registry as Reg; + +Reg::get('di')->register('dotenv', function() { + if (! Reg::get('loader')->is_loaded('Dotenv')) { + Reg::get('loader')->add_namespace("Dotenv", CodeHydrater_PROJECT. "/vendor/vlucas/phpdotenv/src"); + + Reg::get('loader')->add_namespace("PhpOption", CodeHydrater_PROJECT. "/vendor/phpoption/phpoption/src/PhpOption"); + + Reg::get('loader')->add_namespace("GrahamCampbell\\ResultType", CodeHydrater_PROJECT."/vendor/graham-campbell/result-type/src"); + } +}); \ No newline at end of file diff --git a/protected/src/views/twig/app/val_tests.html.twig b/protected/src/views/twig/app/val_tests.html.twig index d168f93..3bb89c2 100644 --- a/protected/src/views/twig/app/val_tests.html.twig +++ b/protected/src/views/twig/app/val_tests.html.twig @@ -21,5 +21,5 @@ {{ form_builder|raw }} {% endif %} - +
\ No newline at end of file