From 01d0138f43c02e4317482f1f4e3c1e3611001009 Mon Sep 17 00:00:00 2001 From: Robert Date: Tue, 23 Jun 2026 20:39:39 -0400 Subject: [PATCH] isConsole check for 404Page, Fixed CLI Args for get... Made BuildSQL. --- src/Framework/Database/BuildSQL.php | 88 +++++++++++++++++++++++++++++ src/Framework/Http/App/App.php | 4 ++ src/Framework/Http/HttpFactory.php | 36 ++++++++++-- 3 files changed, 123 insertions(+), 5 deletions(-) create mode 100644 src/Framework/Database/BuildSQL.php diff --git a/src/Framework/Database/BuildSQL.php b/src/Framework/Database/BuildSQL.php new file mode 100644 index 0000000..049fd79 --- /dev/null +++ b/src/Framework/Database/BuildSQL.php @@ -0,0 +1,88 @@ +prepare($sql); + $stmt->execute([$table]); + + $columns = []; + $primary = []; + + while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $line = '`' . $row['COLUMN_NAME'] . '` ' . $row['COLUMN_TYPE']; + + if ($row['IS_NULLABLE'] === 'NO') { + $line .= ' NOT NULL'; + } + + if ($row['COLUMN_DEFAULT'] !== null) { + $default = $row['COLUMN_DEFAULT']; + + if (strtoupper($default) === 'CURRENT_TIMESTAMP') { + $line .= ' DEFAULT CURRENT_TIMESTAMP'; + } else { + $line .= ' DEFAULT ' . $pdo->quote($default); + } + } + + if (!empty($row['EXTRA'])) { + $line .= ' ' . strtoupper($row['EXTRA']); + } + + if (!empty($row['COLUMN_COMMENT'])) { + $line .= ' COMMENT ' . $pdo->quote($row['COLUMN_COMMENT']); + } + + $columns[] = $line; + + if ($row['COLUMN_KEY'] === 'PRI') { + $primary[] = '`' . $row['COLUMN_NAME'] . '`'; + } + } + + if (!empty($primary)) { + $columns[] = 'PRIMARY KEY (' . implode(', ', $primary) . ')'; + } + + return "CREATE TABLE IF NOT EXISTS `{$table}` (\n " + . implode(",\n ", $columns) + . "\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"; + } + +} diff --git a/src/Framework/Http/App/App.php b/src/Framework/Http/App/App.php index 115ebbb..f5e2b49 100644 --- a/src/Framework/Http/App/App.php +++ b/src/Framework/Http/App/App.php @@ -198,6 +198,10 @@ class App implements MiddlewareAwareInterface private function local404(): ResponseInterface { + if (Console::isConsole()) { + return (new HttpFactory())->createResponse(404, [], "404-Page NOT Found!"); + } + $view = new View(); $view->addView("OnError/404Page"); $myView = $view->fetch($this); diff --git a/src/Framework/Http/HttpFactory.php b/src/Framework/Http/HttpFactory.php index b126017..356b404 100644 --- a/src/Framework/Http/HttpFactory.php +++ b/src/Framework/Http/HttpFactory.php @@ -28,7 +28,10 @@ final class HttpFactory ); } - + /** + * CLI: $ ./main.php GET /Folder/File/Method id=123 name=john + * + */ public function createCliRequest(): ServerRequestInterface { global $argv; @@ -40,6 +43,29 @@ final class HttpFactory if ($path === $method) { $method = 'GET'; } + + $queryParams = []; + $args = array_slice($argv, 3); + + // Support both key=value and --key=value formats + foreach ($args as $arg) { + if (strpos($arg, '=') !== false) { + // Remove leading -- if present + $arg = ltrim($arg, '-'); + list($key, $value) = explode('=', $arg, 2); + $queryParams[$key] = $value; + } + } + + // Parse query string from path + if (strpos($path, '?') !== false) { + $pathParts = explode('?', $path, 2); + $path = $pathParts[0]; + parse_str($pathParts[1], $queryStringParams); + $queryParams = array_merge($queryParams, $queryStringParams); + } + + $_GET = $queryParams; return new Request( $method, @@ -50,10 +76,10 @@ final class HttpFactory ], Stream::fromString(file_get_contents('php://input')), $_SERVER, - queryParams: $_GET ?? [], - parsedBody: $_POST ?? null, - cookies: $_COOKIE ?? [], - uploadedFiles: $_FILES ?? [], + queryParams: $queryParams, + parsedBody: null, + cookies: [], + uploadedFiles: [], attributes: [], protocol: $this->detectProtocol() );