Das Repository ist privat und wird über Packeton bereitgestellt (
https://packeton.markus-michalski.net). Die Zugangsdaten bekommst du nach dem Lizenzkauf bzw. der Freigabe.
{ "repositories": [{ "type": "composer", "url": "https://packeton.markus-michalski.net" }] }
composer require mmd/sylius-altcha-plugin
Bundle in config/bundles.php registrieren:
Mmd\SyliusAltchaPlugin\MmdSyliusAltchaPlugin::class => ['all' => true],
Routen importieren, zum Beispiel in config/routes/mmd_sylius_altcha.yaml:
mmd_sylius_altcha_admin:
resource: "@MmdSyliusAltchaPlugin/config/routes/admin.yaml"
mmd_sylius_altcha_shop:
resource: "@MmdSyliusAltchaPlugin/config/routes/shop.yaml"
Setup-Befehl ausführen und die Widget-Assets veröffentlichen:
bin/console mmd:altcha:setup
bin/console assets:install
mmd:altcha:setupführt ausschließlich die Migrationen dieses Plugins aus, nie die deiner Anwendung oder anderer Plugins. Der Befehl ist idempotent: Gibt es keine neue Migration, passiert nichts, auch nicht nach einemcomposer update. Sind noch Sylius-eigene Migrationen offen, bricht er ab und weist dich an, zuerstdoctrine:migrations:migrateauszuführen. Außerdem prüft er, ob die Routen aus Schritt 2 importiert sind, und gibt andernfalls den passenden Snippet aus. In deinconfig/-Verzeichnis schreibt er nie selbst. Das herkömmlichedoctrine:migrations:migratefunktioniert weiterhin als Alternative. Führe den Befehl mit demselben Benutzer aus wie deine übrigen Konsolenbefehle; in Skripten ergänzt du--no-interaction.
Die Widget-Scripts werden immer aus <base path>/bundles/mmdsyliusaltchaplugin/ ausgeliefert, nie über Symfony-Asset-Packages oder Sylius-Themes. assets:install genügt, sylius:theme:assets:install ist nicht nötig, und Einstellungen wie base_urls (CDN) oder version_strategy greifen hier nicht. Bei einer Content-Security-Policy musst du 'self' in script-src erlauben.
Cronjobs einrichten (siehe Cronjobs): Das Plugin speichert kurzlebige Einträge für Replay-Schutz und Rate-Limiting, die sonst nichts wieder löscht.
Solange du im Admin keinen Channel aktivierst, ist nichts geschützt (siehe Konfiguration). Die Storefront-Hooks und Admin-Grids registrieren sich selbst; darüber hinaus musst du nichts importieren.
composer update mmd/sylius-altcha-plugin
bin/console mmd:altcha:setup --no-interaction
bin/console cache:clear
Den Setup-Befehl nach jedem Update erneut auszuführen ist immer unbedenklich: Ohne neue Migration passiert nichts.
Das Plugin speichert kurzlebige Einträge für Replay-Schutz und Rate-Limiting. Sie werden ausschließlich vom Purge-Cronjob gelöscht, er gehört deshalb zur Grundinstallation.
| Befehl | Empfohlenes Intervall | Beschreibung |
|---|---|---|
bin/console mmd:altcha:purge |
täglich | Löscht abgelaufene Rate-Limit-Einträge (--rate-limit-retention, Standard 48 Stunden) und Gibberish-Log-Einträge, die älter als 30 Tage sind (--gibberish-log-retention) |
bin/console mmd:altcha:update-disposable-domains |
wöchentlich | Aktualisiert die Wegwerf-Domain-Liste aus der Upstream-Quelle; nur nötig, wenn die Wegwerf-E-Mail-Prüfung aktiv ist. Bei einem Netzwerkfehler oder einer leeren Antwort bleibt die bisherige Datei unverändert erhalten. |
Beispiel für die Crontab des Benutzers, unter dem auch deine übrigen Konsolenbefehle laufen (Pfad anpassen):
# täglich um 03:15 Uhr: abgelaufene Rate-Limit-Einträge und Gibberish-Log-Einträge löschen
15 3 * * * cd /var/www/shop && bin/console mmd:altcha:purge --no-interaction
# sonntags um 03:30 Uhr: Wegwerf-Domain-Liste aktualisieren (nur bei aktivierter Wegwerf-E-Mail-Prüfung)
30 3 * * 0 cd /var/www/shop && bin/console mmd:altcha:update-disposable-domains --no-interaction
--rate-limit-retention=<Sekunden>muss größer sein als das längste Rate-Limit-Zeitfenster, das du konfigurierst (höchstens 24 Stunden). Sonst werden Einträge gelöscht, die noch mitgezählt werden müssten.
Der Setup-Befehl (mmd:altcha:setup) ist kein Cronjob, sondern ein einmaliger, idempotenter Schritt bei Installation und Update.
Die Reihenfolge ist wichtig, weil Doctrine die Migrationen nur kennt, solange das Bundle noch registriert ist:
Alle mmd_altcha_widget()-Aufrufe und mmd_altcha.widget*-Hooks aus deinen Templates entfernen, ebenso die Cronjobs für mmd:altcha:purge und mmd:altcha:update-disposable-domains.
Bei noch registriertem Bundle die sechs Migrationen zurückrollen, die neueste zuerst:
bin/console doctrine:migrations:execute --down 'Mmd\SyliusAltchaPlugin\Migrations\Version20261003090000'
bin/console doctrine:migrations:execute --down 'Mmd\SyliusAltchaPlugin\Migrations\Version20261002090000'
bin/console doctrine:migrations:execute --down 'Mmd\SyliusAltchaPlugin\Migrations\Version20261001090000'
bin/console doctrine:migrations:execute --down 'Mmd\SyliusAltchaPlugin\Migrations\Version20260930140000'
bin/console doctrine:migrations:execute --down 'Mmd\SyliusAltchaPlugin\Migrations\Version20260930120000'
bin/console doctrine:migrations:execute --down 'Mmd\SyliusAltchaPlugin\Migrations\Version20260930100000'
Routen-Imports und Bundle-Eintrag aus config/bundles.php entfernen, danach composer remove mmd/sylius-altcha-plugin ausführen.
Du kannst die sechs Tabellen
mmd_sylius_altcha_*auch von Hand löschen, statt die Migrationen zurückzurollen. Dann musst du aber zusätzlich die sechs passenden ZeilenMmd\SyliusAltchaPlugin\Migrations\...aus der Tabelledoctrine_migration_versionsentfernen.