first version

This commit is contained in:
torsten 2026-04-03 18:21:51 +02:00
parent c30aa60694
commit 9b48a1a73f
9 changed files with 2777 additions and 1 deletions

1
.gitignore vendored
View file

@ -1 +1,2 @@
.DS_Store
vendor

View file

@ -0,0 +1 @@
colima start --vm-type=vz --vz-rosetta --cpu 2 --memory 4

View file

@ -0,0 +1,14 @@
composer require illuminate/database
composer require slim/slim
composer require tuupola/slim-jwt-auth
composer require respect/validation
composer require php-di/php-di
composer require --dev phpstan/phpstan
Descriptions:
- illuminate/database: The database component of the Laravel framework, providing an expressive Query Builder and Eloquent ORM. https://github.com/illuminate/database
- slim/slim: A PHP micro framework that helps you quickly write simple yet powerful web applications and APIs. https://www.slimframework.com/
- tuupola/slim-jwt-auth: PSR-7 and PSR-15 JWT Authentication Middleware for Slim framework. https://github.com/tuupola/slim-jwt-auth
- respect/validation: The most engine-powered validation engine ever created for PHP. https://respect-validation.readthedocs.io/
- php-di/php-di: The dependency injection container for humans. https://php-di.org/
- phpstan/phpstan: PHP Static Analysis Tool - discover bugs in your code without writing tests. https://phpstan.org/

View file

@ -0,0 +1,42 @@
<?php
use DI\ContainerBuilder;
use Illuminate\Database\Capsule\Manager as Capsule;
use Slim\App;
use Slim\Factory\AppFactory;
use Psr\Container\ContainerInterface;
require __DIR__ . "/../vendor/autoload.php";
$containerBuilder = new ContainerBuilder();
// Load settings
$settings = require __DIR__ . "/../config/settings.php";
$containerBuilder->addDefinitions([
"settings" => $settings,
Capsule::class => function (ContainerInterface $c) {
$capsule = new Capsule;
$capsule->addConnection($c->get("settings")["db"]);
$capsule->setAsGlobal();
$capsule->bootEloquent();
return $capsule;
},
]);
$container = $containerBuilder->build();
// Trigger Eloquent initialization
$container->get(Capsule::class);
AppFactory::setContainer($container);
$app = AppFactory::create();
$app->addRoutingMiddleware();
$app->addErrorMiddleware(
$settings["settings"]["displayErrorDetails"],
$settings["settings"]["logErrors"],
$settings["settings"]["logErrorDetails"]
);
return $app;

23
tippspiel2/composer.json Normal file
View file

@ -0,0 +1,23 @@
{
"name": "tippspiel2/tippspiel2",
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"require": {
"illuminate/database": "^13.3",
"slim/slim": "^4.15",
"respect/validation": "^2.4",
"php-di/php-di": "^7.1",
"jimtools/jwt-auth": "^3.0",
"slim/psr7": "^1.8"
},
"require-dev": {
"phpstan/phpstan": "^2.1"
},
"config": {
"audit": {
}
}
}

2650
tippspiel2/composer.lock generated Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,19 @@
<?php
return [
'db' => [
'driver' => 'mysql',
'host' => 'db',
'database' => 'pf2_db',
'username' => 'pf2_user',
'password' => 'pf2_password',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
],
'settings' => [
'displayErrorDetails' => true,
'logErrorDetails' => true,
'logErrors' => true,
]
];

View file

@ -1 +1,27 @@
<?php phpinfo();
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Illuminate\Database\Capsule\Manager as Capsule;
/** @var \Slim\App $app */
$app = require __DIR__ . "/../bootstrap/app.php";
$app->get("/", function (Request $request, Response $response) {
$response->getBody()->write("Tippspiel 2 API is running with PHP-DI and Eloquent!");
return $response;
});
$app->get("/test-db", function (Request $request, Response $response) {
try {
/** @var Capsule $capsule */
$capsule = $this->get(Capsule::class);
$tables = $capsule->getConnection()->select("SHOW TABLES");
$response->getBody()->write("Database Connection Successful! Tables found: " . count($tables));
} catch (\Exception $e) {
$response->getBody()->write("Database Connection Failed: " . $e->getMessage());
}
return $response;
});
$app->run();