diff --git a/.env b/.env index 1e10ffc..2dbeb30 100644 --- a/.env +++ b/.env @@ -17,3 +17,7 @@ APP_ENV=dev APP_SECRET=c38de86853448126a1e57bd9dbe6760e ###< symfony/framework-bundle ### + +DATABASE_HOSTNAME=localhost +DATABASE_USER=user +DATABASE_PASSWORD=password \ No newline at end of file diff --git a/composer.json b/composer.json index 2f09f0e..e9d700c 100644 --- a/composer.json +++ b/composer.json @@ -1,62 +1,63 @@ { - "type": "project", - "license": "proprietary", - "minimum-stability": "stable", - "prefer-stable": true, - "require": { - "php": ">=7.2.5", - "ext-ctype": "*", - "ext-iconv": "*", - "symfony/console": "5.3.*", - "symfony/dotenv": "5.3.*", - "symfony/flex": "^1.3.1", - "symfony/framework-bundle": "5.3.*", - "symfony/runtime": "5.3.*", - "symfony/yaml": "5.3.*" + "type": "project", + "license": "proprietary", + "minimum-stability": "stable", + "prefer-stable": true, + "require": { + "php": ">=8.0", + "ext-ctype": "*", + "ext-iconv": "*", + "symfony/console": "5.3.*", + "symfony/dotenv": "5.3.*", + "symfony/flex": "^1.3.1", + "symfony/framework-bundle": "5.3.*", + "symfony/runtime": "5.3.*", + "symfony/yaml": "5.3.*", + "ext-mysqli": "*" + }, + "require-dev": { + }, + "config": { + "optimize-autoloader": true, + "preferred-install": { + "*": "dist" }, - "require-dev": { - }, - "config": { - "optimize-autoloader": true, - "preferred-install": { - "*": "dist" - }, - "sort-packages": true - }, - "autoload": { - "psr-4": { - "App\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "App\\Tests\\": "tests/" - } - }, - "replace": { - "symfony/polyfill-ctype": "*", - "symfony/polyfill-iconv": "*", - "symfony/polyfill-php72": "*" - }, - "scripts": { - "auto-scripts": { - "cache:clear": "symfony-cmd", - "assets:install %PUBLIC_DIR%": "symfony-cmd" - }, - "post-install-cmd": [ - "@auto-scripts" - ], - "post-update-cmd": [ - "@auto-scripts" - ] - }, - "conflict": { - "symfony/symfony": "*" - }, - "extra": { - "symfony": { - "allow-contrib": false, - "require": "5.3.*" - } + "sort-packages": true + }, + "autoload": { + "psr-4": { + "App\\": "src/" } + }, + "autoload-dev": { + "psr-4": { + "App\\Tests\\": "tests/" + } + }, + "replace": { + "symfony/polyfill-ctype": "*", + "symfony/polyfill-iconv": "*", + "symfony/polyfill-php72": "*" + }, + "scripts": { + "auto-scripts": { + "cache:clear": "symfony-cmd", + "assets:install %PUBLIC_DIR%": "symfony-cmd" + }, + "post-install-cmd": [ + "@auto-scripts" + ], + "post-update-cmd": [ + "@auto-scripts" + ] + }, + "conflict": { + "symfony/symfony": "*" + }, + "extra": { + "symfony": { + "allow-contrib": false, + "require": "5.3.*" + } + } } diff --git a/composer.lock b/composer.lock index 9aee828..d697b0b 100644 --- a/composer.lock +++ b/composer.lock @@ -2684,6 +2684,8 @@ "ext-ctype": "*", "ext-iconv": "*" }, - "platform-dev": [], + "platform-dev": { + "php": "*" + }, "plugin-api-version": "2.1.0" } diff --git a/config/services.yaml b/config/services.yaml index ef07b76..77c960f 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -23,3 +23,9 @@ services: # add more service definitions when explicit configuration is needed # please note that last definitions always *replace* previous ones + + App\Service\MysqliConnection: + arguments: + $hostname: '%env(string:DATABASE_HOSTNAME)%' + $user: '%env(string:DATABASE_USER)%' + $password: '%env(DATABASE_PASSWORD)%' \ No newline at end of file diff --git a/src/Console/ListDatabasesCommand.php b/src/Console/ListDatabasesCommand.php new file mode 100644 index 0000000..d705485 --- /dev/null +++ b/src/Console/ListDatabasesCommand.php @@ -0,0 +1,38 @@ +db->listDatabases(); + + $output->writeln('List of databases:'); + foreach ($dbs as $db) { + $output->writeln(sprintf(' -%s', $db)); + } + + return Command::SUCCESS; + } +} \ No newline at end of file diff --git a/src/Service/DatabaseManager.php b/src/Service/DatabaseManager.php new file mode 100644 index 0000000..13ff537 --- /dev/null +++ b/src/Service/DatabaseManager.php @@ -0,0 +1,28 @@ +conn = $this->service->getConnection(); + } + + public function listDatabases(): array + { + $dbs = []; + $results = $this->conn->query('SHOW DATABASES'); + while ($result = $results->fetch_object()) { + $dbs[] = $result->Database; + } + + return $dbs; + } +} \ No newline at end of file diff --git a/src/Service/MysqliConnection.php b/src/Service/MysqliConnection.php new file mode 100644 index 0000000..fc0189b --- /dev/null +++ b/src/Service/MysqliConnection.php @@ -0,0 +1,23 @@ +connection = new mysqli($hostname, $user, $password); + if ($this->connection->connect_error) { + throw new \Exception("Connection failed: " . $this->connection->connect_error); + } + } + + public function getConnection(): mysqli + { + return $this->connection; + } +} \ No newline at end of file