Basic Framework
This commit is contained in:
parent
c1fffec124
commit
4d25387a47
37
exam/.htaccess
Normal file
37
exam/.htaccess
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
RewriteEngine On
|
||||||
|
|
||||||
|
##
|
||||||
|
## You may need to uncomment the following line for some hosting environments,
|
||||||
|
## if you have installed to a subdirectory, enter the name here also.
|
||||||
|
##
|
||||||
|
RewriteBase /phpCourse/exam
|
||||||
|
|
||||||
|
##
|
||||||
|
## Black listed folders
|
||||||
|
##
|
||||||
|
RewriteRule ^app/.* index.php [L,NC]
|
||||||
|
RewriteRule ^config/.* index.php [L,NC]
|
||||||
|
RewriteRule ^vendor/.* index.php [L,NC]
|
||||||
|
RewriteRule ^routes/.* index.php [L,NC]
|
||||||
|
RewriteRule ^pages/.* index.php [L,NC]
|
||||||
|
|
||||||
|
##
|
||||||
|
## White listed folders
|
||||||
|
##
|
||||||
|
RewriteCond %{REQUEST_FILENAME} -f
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !/api/docs/.*
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !/assets/.*
|
||||||
|
RewriteRule !^index.php index.php [L,NC]
|
||||||
|
|
||||||
|
##
|
||||||
|
## Block all PHP files, except index
|
||||||
|
##
|
||||||
|
RewriteCond %{REQUEST_FILENAME} -f
|
||||||
|
RewriteCond %{REQUEST_FILENAME} \.php$
|
||||||
|
RewriteRule !^index.php index.php [L,NC]
|
||||||
|
|
||||||
|
##
|
||||||
|
## Standard routes
|
||||||
|
##
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-f
|
||||||
|
RewriteRule ^ index.php [L]
|
||||||
5
exam/api/.htaccess
Normal file
5
exam/api/.htaccess
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Order deny,allow
|
||||||
|
Deny From All
|
||||||
|
<FilesMatch "^$">
|
||||||
|
Allow From All
|
||||||
|
</FilesMatch>
|
||||||
2
exam/api/docs/.htaccess
Normal file
2
exam/api/docs/.htaccess
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Order deny,allow
|
||||||
|
Allow from All
|
||||||
1
exam/api/docs/index.html
Normal file
1
exam/api/docs/index.html
Normal file
@ -0,0 +1 @@
|
|||||||
|
DOCUMENTATION
|
||||||
4
exam/api/index.php
Normal file
4
exam/api/index.php
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?php
|
||||||
|
foreach (glob(__DIR__ . '/*/index.php') as $filename) {
|
||||||
|
require_once($filename);
|
||||||
|
}
|
||||||
15
exam/api/users/index.php
Normal file
15
exam/api/users/index.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$method = $_SERVER['REQUEST_METHOD'];
|
||||||
|
|
||||||
|
switch ($method) {
|
||||||
|
case "GET":
|
||||||
|
return get();
|
||||||
|
default:
|
||||||
|
return Response::api("$method not supported", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
function get()
|
||||||
|
{
|
||||||
|
Response::api("GET USERS");
|
||||||
|
}
|
||||||
3
exam/app/.htaccess
Normal file
3
exam/app/.htaccess
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Order deny,allow
|
||||||
|
Deny from all
|
||||||
|
Allow from 127.0.0.1
|
||||||
13
exam/app/app.php
Normal file
13
exam/app/app.php
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
ini_set("display_errors", 1);
|
||||||
|
ini_set("default_charset", "utf-8");
|
||||||
|
ini_set('session.cookie_httponly', 1);
|
||||||
|
ini_set('session.cookie_secure', 1);
|
||||||
|
ini_set('session.use_only_cookies', 1);
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
|
||||||
|
require_once __DIR__ . "/../vendor/autoloader.php";
|
||||||
|
Headers::html();
|
||||||
|
|
||||||
|
require_once __DIR__ . "/../routes/routes.php";
|
||||||
3
exam/config/.htaccess
Normal file
3
exam/config/.htaccess
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Order deny,allow
|
||||||
|
Deny from all
|
||||||
|
Allow from 127.0.0.1
|
||||||
5
exam/config/app.php
Normal file
5
exam/config/app.php
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
"basePath" => "phpCourse/exam/",
|
||||||
|
];
|
||||||
3
exam/index.php
Normal file
3
exam/index.php
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once "./app/app.php";
|
||||||
3
exam/pages/.htaccess
Normal file
3
exam/pages/.htaccess
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Order deny,allow
|
||||||
|
Deny from all
|
||||||
|
Allow from 127.0.0.1
|
||||||
23
exam/pages/404.php
Normal file
23
exam/pages/404.php
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="de">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
|
||||||
|
|
||||||
|
<title>
|
||||||
|
Page not Found
|
||||||
|
</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="site-content" class="site-content">
|
||||||
|
<div class="p-5 mb-4 bg-light rounded-3">
|
||||||
|
<div class="container-fluid py-5">
|
||||||
|
<h1 class="display-5 fw-bold">404 Page not Found</h1>
|
||||||
|
<p class="col-md-8 fs-4">Page does not exist.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
23
exam/pages/500.php
Normal file
23
exam/pages/500.php
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="de">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
|
||||||
|
|
||||||
|
<title>
|
||||||
|
Server Error
|
||||||
|
</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="site-content" class="site-content">
|
||||||
|
<div class="p-5 mb-4 bg-light rounded-3">
|
||||||
|
<div class="container-fluid py-5">
|
||||||
|
<h1 class="display-5 fw-bold">500 Internal Server Error</h1>
|
||||||
|
<pre class="col-md-8 fs-4"><?= $e->getMessage() ?></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
14
exam/pages/index.html
Normal file
14
exam/pages/index.html
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Vite + React + TS</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="root"></div>
|
||||||
|
<script type="module" src="/src/main.tsx"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
3
exam/routes/.htaccess
Normal file
3
exam/routes/.htaccess
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Order deny,allow
|
||||||
|
Deny from all
|
||||||
|
Allow from 127.0.0.1
|
||||||
13
exam/routes/routes.php
Normal file
13
exam/routes/routes.php
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$path = ltrim(str_replace(Config::getBasePath(), "", $_SERVER['REQUEST_URI']), "/");
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (substr($path, 0, 3) === "api") {
|
||||||
|
require_once __DIR__ . "/../api/index.php";
|
||||||
|
} else {
|
||||||
|
require_once __DIR__ . "/../pages/index.html";
|
||||||
|
}
|
||||||
|
} catch (Exception $e) {
|
||||||
|
require_once __DIR__ . "/../pages/500.php";
|
||||||
|
}
|
||||||
3
exam/vendor/.htaccess
vendored
Normal file
3
exam/vendor/.htaccess
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Order deny,allow
|
||||||
|
Deny from all
|
||||||
|
Allow from 127.0.0.1
|
||||||
7
exam/vendor/autoloader.php
vendored
Normal file
7
exam/vendor/autoloader.php
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
spl_autoload_register(function ($name) {
|
||||||
|
$_name = lcfirst($name);
|
||||||
|
|
||||||
|
require_once __DIR__ . "/$_name/$_name.php";
|
||||||
|
});
|
||||||
37
exam/vendor/config/config.php
vendored
Normal file
37
exam/vendor/config/config.php
vendored
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class Config
|
||||||
|
{
|
||||||
|
private static $instances = [];
|
||||||
|
|
||||||
|
private array $app;
|
||||||
|
|
||||||
|
protected function __construct()
|
||||||
|
{
|
||||||
|
$this->app = require_once __DIR__ . "/../../config/app.php";
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function __clone()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __wakeup()
|
||||||
|
{
|
||||||
|
throw new \Exception("Cannot unserialize a singleton.");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function getInstance(): Config
|
||||||
|
{
|
||||||
|
$cls = static::class;
|
||||||
|
if (!isset(self::$instances[$cls])) {
|
||||||
|
self::$instances[$cls] = new static();
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::$instances[$cls];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getBasePath()
|
||||||
|
{
|
||||||
|
return Config::getInstance()->app["basePath"];
|
||||||
|
}
|
||||||
|
}
|
||||||
22
exam/vendor/headers/headers.php
vendored
Normal file
22
exam/vendor/headers/headers.php
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class Headers
|
||||||
|
{
|
||||||
|
static function json()
|
||||||
|
{
|
||||||
|
header('Content-Type: text/html; charset=utf-8');
|
||||||
|
header("Content-Type: text/json");
|
||||||
|
}
|
||||||
|
|
||||||
|
static function html()
|
||||||
|
{
|
||||||
|
header('Content-Type: text/html; charset=utf-8');
|
||||||
|
}
|
||||||
|
|
||||||
|
static function redirect(string $newUrl, bool $permanent = FALSE)
|
||||||
|
{
|
||||||
|
header('Location: ' . $newUrl, true, $permanent ? 301 : 303);
|
||||||
|
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
11
exam/vendor/response/response.php
vendored
Normal file
11
exam/vendor/response/response.php
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class Response
|
||||||
|
{
|
||||||
|
public static function api($content, int $code = 200)
|
||||||
|
{
|
||||||
|
Headers::json();
|
||||||
|
http_response_code($code);
|
||||||
|
echo json_encode($content);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user