Vendor-Module kann man oft im Local-Pool des Frameworks erweitern (z.B. Magento Plugins). Manchmal gibt es aber Situationen, wo das nicht möglich ist. Die Gründe können dabei vielfältig sein. Aus diesem Grund muss man manchmal Patches schreiben und diese auf Vendor-Module anwenden lassen. Damit diese bei einer Neuinstallation nicht vergessen werden, zeigen wir euch in diesem Türchen ein Composer-Patches Modul, was dafür sorgt, dass all eure Patches nach einem „composer install“ automatisch angewendet werden.
Installation
Das Composer-Patches Modul können wir ganz normal auch über Composer installieren:
$ composer require vaimo/composer-patches
Patch-Listen einbinden
Gerade wenn man mit Module arbeitet, um Dinge thematisch voneinander zu trennen, ist es schlau Patch-Listen pro Modul einzubinden. Das sind einfache JSON-Dateien, die in der composer.json unter dem Knoten „extra“ wie folgt angegeben werden:
"patches-file": [
"app/patch/composer.patches.json"
]
In diesen JSON-Dateien werden dann die thematischen Patches für dieses Modul und pro Vendor-Modul, welches sie patchen sollen, aufgelistet:
{
"patches": {
"vendor/module-name": {
"PatchName": "app/patch/PatchName.patch"
}
}
}
Patch Aufbau & Erstellung
Eine normale Patch-Datei hat folgenden Aufbau und zeigt einfach nur in einer bestimmten Formatierung welche Zeilen gelöscht und welche hinzugefügt werden. Das Ganze natürlich mit exakt passender Angabe von Zeile und Zeichen.
--- Model/Name.php 2023-07-21 08:45:08 +0000
+++ Model/Name.php 2023-09-23 08:52:16 +0000
@@ -15,7 +15,7 @@
*/
class Name extends Validator
{
- private const PATTERN = '/(?:[\p{L}\p{M}/u';
+ private const PATTERN = '/(?:[\p.*/u';
/**
* Validate name fields.
Solche Dateien wirklich zeichengenau und inhaltlich korrekt zu schreiben ist selber fast unmöglich. Genau aus diesem Grund gibt es einen Terminal-Command, den wir nutzen können. Hierbei brauchen wir die Original-Datei und einmal eine modifizierte Kopie, wie sie nach dem Anwenden des Patches sein sollte.
$ diff -u Name.php Name_modified.php > PatchName.patch
Wenn ihr all diese Schritte durchgeführt habt, sollte beim nächsten „composer install“ euer Patch automatisch angewendet werden. Happy Coding!