Standard-Verzeichnisstruktur für PHP-Projekte

Wenn du Code für Magento 2, TYPO3, WordPress, Laravel, Symfony und co schreibst, ist die Sache eigentlich klar. Hier gibt es Standard-Verzeichnisse und Strukturen, an denen man sich orientieren kann.

Aber was machst du, wenn du dein ganz eigenes Projekt schreibst?

Beispiel mit vielen Best Practices: php-pds/skeleton

Screeenshot einer Verzeichnisstruktur für ein PHP-Projekt. Es gibt die Verzeichnisse bin, config, docs, public, resources, src und tests. Es gibt die Dateien .gitignore, CHANGELOG.md, composer.json, CONTRIBUTING.md, LICENSE.md und README.md
Beispiel einer Standard-Verzeichnisstruktur für PHP-Projekte

Gleich vorweg: du kannst machen, was du willst. Es gibt in PHP keine fixen Regeln und keinen fixen Standard, wie ein Projekt aussehen muss.

Trotzdem orientiere ich mich gerne an Quasi-Standards. Also einem Standard, der nicht offiziell ist, der aber dem entspricht, was die Mehrheit der ProgrammiererInnen und Projekte tun.

Mein Favorit für PHP-Projektstrukturen ist der Vorschlag von php-pds/skeleton. Er setzt um, was man aus vielen Projekten kennt, und ermöglicht es die gängigen Best Practices umzusetzen.

So eine Vorlage wie diese Projektstruktur nennt man übrigens auch „Template“ oder „Skeleton“. Deswegen der Name des GitHub-Repositories.

Verzeichnisstruktur von php-pds/skeleton

Die README.md des Projekts erklärt die Details für jedes vorgeschlagene Verzeichnis und jede Datei.

Die Struktur ist schlank gehalten, enthält aber alles was man für den Start braucht:

.
├── bin
├── config
├── docs
├── public
├── resources
├── src
│   └── YourName
├── tests
│   └── YourName
├── CHANGELOG.md
├── composer.json
├── CONTRIBUTING.md
├── .gitignore
├── LICENSE.md
└── README.md

Von dort aus kann man seine eigenen Tools wie PHPUnit, PHPStan usw. hinzufügen.

Falls du dich wunderst: das vendor/ Verzeichnis kommt direkt in den Root-Level. Also auf die gleiche Ebene wie src/ oder tests/. Es wird nicht erwähnt, weil das vendor/-Verzeichnis nie versioniert werden sollte.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.