320f2f30afbfef69f73ff4346ddf2a9e488062da
Immorechner
Eine moderne Webanwendung zur Immobilienberechnung, entwickelt mit Symfony 7.3, PHP 8.4 und MariaDB.
Features
- REST-API: Vollständige REST-API mit automatischer Dokumentation über API Platform
- Web-Interface: Benutzerfreundliche Weboberfläche mit Twig-Templates
- User Management: Benutzerverwaltung mit Rollenbasierter Zugriffskontrolle (USER, ADMIN, MODERATOR)
- Docker-Setup: Vollständig containerisierte Entwicklungsumgebung
- Datenbank-Migrationen: Versionskontrollierte Datenbankschema-Verwaltung mit Doctrine
- CORS-Unterstützung: Konfigurierbare CORS-Einstellungen für API-Zugriffe
- phpMyAdmin: Integriertes Datenbank-Verwaltungstool
Technologie-Stack
- Backend: PHP 8.4
- Framework: Symfony 7.3
- Datenbank: MariaDB (Latest)
- ORM: Doctrine 3.0
- API: API Platform 4.2
- Template Engine: Twig 3.22
- Webserver: Apache 2.4 mit mod_rewrite
- Container: Docker & Docker Compose
- Datenbank-Tool: phpMyAdmin
Voraussetzungen
- Docker Desktop (Windows/Mac) oder Docker Engine + Docker Compose (Linux)
- Git
Installation
1. Repository klonen
git clone <repository-url>
cd immorechner
2. Docker-Container starten
docker-compose up -d --build
Dieser Befehl:
- Baut das PHP 8.4 Image mit allen benötigten Extensions
- Startet MariaDB
- Startet phpMyAdmin
- Startet den Apache-Webserver
3. Dependencies installieren
docker-compose exec web composer install
4. Datenbank-Schema erstellen
docker-compose exec web php bin/console doctrine:migrations:migrate --no-interaction
5. Cache leeren
docker-compose exec web php bin/console cache:clear
Verwendung
Anwendung aufrufen
- Web-Interface: http://localhost:8080
- API-Dokumentation: http://localhost:8080/api
- phpMyAdmin: http://localhost:8081
- Server:
db - Benutzer:
root - Passwort:
root
- Server:
REST-API Endpoints
User-API
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/users |
Alle User abrufen |
| GET | /api/users/{id} |
Einzelnen User abrufen |
| POST | /api/users |
Neuen User erstellen |
| PUT | /api/users/{id} |
User aktualisieren |
| DELETE | /api/users/{id} |
User löschen |
Beispiel: User erstellen
curl -X POST http://localhost:8080/api/users \
-H "Content-Type: application/json" \
-d '{
"name": "Max Mustermann",
"email": "max@example.com",
"role": "user"
}'
Beispiel: Alle User abrufen
curl http://localhost:8080/api/users
Datenbank-Schema
User-Tabelle
| Feld | Typ | Beschreibung |
|---|---|---|
| id | INT | Primärschlüssel (Auto-Increment) |
| name | VARCHAR(255) | Benutzername |
| VARCHAR(255) | E-Mail-Adresse (Unique) | |
| role | ENUM | Benutzerrolle (user, admin, moderator) |
| created_at | DATETIME | Erstellungsdatum |
Entwicklung
Neue Entity erstellen
docker-compose exec web php bin/console make:entity
Migration erstellen
docker-compose exec web php bin/console doctrine:migrations:diff
Migration ausführen
docker-compose exec web php bin/console doctrine:migrations:migrate
Controller erstellen
docker-compose exec web php bin/console make:controller
Cache leeren
docker-compose exec web php bin/console cache:clear
Symfony Console aufrufen
docker-compose exec web php bin/console
Docker-Befehle
Container starten
docker-compose up -d
Container stoppen
docker-compose down
Container neu bauen
docker-compose up -d --build
Container-Logs anzeigen
# Alle Container
docker-compose logs -f
# Nur Web-Container
docker-compose logs -f web
# Nur Datenbank-Container
docker-compose logs -f db
In Container einloggen
# Web-Container (PHP/Apache)
docker-compose exec web bash
# Datenbank-Container
docker-compose exec db bash
Composer-Befehle ausführen
docker-compose exec web composer require <paket-name>
docker-compose exec web composer update
docker-compose exec web composer dump-autoload
Projekt-Struktur
immorechner/
├── bin/ # Symfony Console und andere Binaries
├── config/ # Symfony Konfigurationsdateien
├── docker/ # Docker-Konfigurationsdateien
│ └── apache/ # Apache VirtualHost Konfiguration
├── migrations/ # Doctrine Datenbank-Migrationen
├── public/ # Web-Root (index.php, Assets)
├── src/ # PHP-Quellcode
│ ├── Controller/ # Controller
│ ├── Entity/ # Doctrine Entities
│ ├── Enum/ # PHP Enums
│ ├── Repository/ # Doctrine Repositories
│ └── Kernel.php # Symfony Kernel
├── templates/ # Twig-Templates
│ ├── base.html.twig # Basis-Template
│ └── home/ # Homepage-Templates
├── var/ # Cache, Logs
├── vendor/ # Composer Dependencies
├── .env # Umgebungsvariablen
├── .env.example # Beispiel-Umgebungsvariablen
├── .gitignore # Git Ignore-Datei
├── composer.json # Composer-Konfiguration
├── docker-compose.yml # Docker Compose-Konfiguration
├── Dockerfile # Docker-Image für PHP/Apache
└── README.md # Diese Datei
Umgebungsvariablen
Die Anwendung verwendet folgende Umgebungsvariablen (definiert in .env):
# Symfony
APP_ENV=dev
APP_SECRET=<generierter-secret-key>
# Datenbank
DATABASE_URL="mysql://immorechner_user:immorechner_pass@db:3306/immorechner?serverVersion=mariadb-11.7.1&charset=utf8mb4"
# CORS
CORS_ALLOW_ORIGIN='^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$'
# Routing
DEFAULT_URI=http://localhost
Konfiguration
CORS anpassen
CORS-Einstellungen können in config/packages/nelmio_cors.yaml angepasst werden.
Datenbank-Verbindung ändern
Datenbank-Verbindung in .env anpassen:
DATABASE_URL="mysql://user:password@host:port/database?serverVersion=mariadb-11.7.1"
Apache-Konfiguration
Apache-VirtualHost-Konfiguration befindet sich in docker/apache/000-default.conf.
Fehlerbehebung
Container starten nicht
# Container-Logs prüfen
docker-compose logs
# Container-Status prüfen
docker ps -a
# Container neu bauen
docker-compose down
docker-compose up -d --build
"Class not found" Fehler
# Autoloader neu generieren
docker-compose exec web composer dump-autoload
# Cache leeren
docker-compose exec web php bin/console cache:clear
# Container neu starten
docker-compose restart web
Datenbank-Verbindungsfehler
# Prüfen ob DB-Container läuft
docker ps | grep db
# DB-Logs prüfen
docker-compose logs db
# In DB-Container einloggen und testen
docker-compose exec db mysql -u root -proot
Port bereits belegt
Wenn Port 8080, 8081 oder 3306 bereits belegt ist, können die Ports in docker-compose.yml angepasst werden:
services:
web:
ports:
- "8090:80" # Statt 8080:80
API-Dokumentation
Die vollständige API-Dokumentation ist verfügbar unter:
- Swagger UI: http://localhost:8080/api
Die API unterstützt mehrere Formate:
- JSON-LD (Standard)
- JSON
- HTML
Beispiel für JSON-Format:
curl -H "Accept: application/json" http://localhost:8080/api/users
Sicherheitshinweise
Wichtig für Produktion:
- Ändern Sie alle Standardpasswörter in
docker-compose.ymlund.env - Generieren Sie einen neuen
APP_SECRETfür.env - Setzen Sie
APP_ENV=prodin der Produktion - Konfigurieren Sie CORS entsprechend Ihrer Domain
- Aktivieren Sie HTTPS
- Verwenden Sie sichere Datenbank-Credentials
- Entfernen Sie phpMyAdmin aus der Produktion
Lizenz
[Lizenz hier einfügen]
Kontakt
[Kontaktinformationen hier einfügen]
Description
Languages
PHP
58.9%
Twig
32%
JavaScript
4.1%
CSS
3.8%
Dockerfile
1.2%