
# Hooks

Rudel löst WordPress-Aktionen und Filter bei Sandbox-Lifecycle-Ereignissen aus. Der folgende Katalog zeigt, was `Rudel::hooks()` zurückgibt: 28 Aktionen und 5 Filter.

## Beispiel

```php
add_action(
    'rudel_after_environment_create',
    function ( \Rudel\Environment $environment, array $context ): void {
        error_log( 'Created Rudel environment ' . $environment->id );
    },
    10,
    2
);
```

Die meisten Aktionen `before` und `failed` erhalten ein Array `$context`. Bei Sandbox-Lifecycle-Hooks enthält es die `environment` (oder beim Erstellen die `name`, `options` und `environments_dir`); Aktionen `failed` erhalten außerdem den abgefangenen `Throwable` als `$error`.

## Sandbox-Lifecycle-Aktionen

| Aktion | Argumente |
|--------|-----------|
| `rudel_before_environment_create` | `$context` |
| `rudel_after_environment_create` | `$environment`, `$context` |
| `rudel_environment_create_failed` | `$context`, `$error` |
| `rudel_before_environment_update` | `$context` |
| `rudel_after_environment_update` | `$environment`, `$context` |
| `rudel_environment_update_failed` | `$context`, `$error` |
| `rudel_before_environment_destroy` | `$context` |
| `rudel_after_environment_destroy` | `$context` |
| `rudel_environment_destroy_failed` | `$context`, `$error` |
| `rudel_before_environment_replace_state` | `$context` |
| `rudel_after_environment_replace_state` | `$result`, `$context` |
| `rudel_environment_replace_state_failed` | `$context`, `$error` |

Die drei `replace_state`-Aktionen gehören zu `EnvironmentManager::replace_environment_state()`, das von keinem Rudel-Befehl aufgerufen wird.

## Snapshot-Aktionen

| Aktion | Argumente |
|--------|-----------|
| `rudel_before_recovery_point_create` | `$context` |
| `rudel_after_recovery_point_create` | `$context`, `$meta` |
| `rudel_before_recovery_point_restore` | `$context` |
| `rudel_after_recovery_point_restore` | `$context` |
| `rudel_before_recovery_point_delete` | `$context` |
| `rudel_after_recovery_point_delete` | `$context` |

`$context` umfasst `environment`, `kind` (`snapshot`), `name` und `path`. Jede davon wird auch unter einem `snapshot`-Alias ausgelöst, zum Beispiel `rudel_after_snapshot_create`. Bei Fehlern werden außerdem `rudel_failed_recovery_point_{create|restore|delete}` und `rudel_failed_snapshot_{create|restore|delete}` mit `$context` und dem Fehler ausgelöst. Diese Aliase sind nicht im Katalog aufgeführt.

## Bereinigungsaktionen

| Aktion | Argumente |
|--------|-----------|
| `rudel_before_environment_cleanup` | `$options` |
| `rudel_after_environment_cleanup` | `$result`, `$options` |
| `rudel_before_environment_cleanup_merged` | `$options` |
| `rudel_after_environment_cleanup_merged` | `$result`, `$options` |

`$result` umfasst `removed`, `skipped`, `errors` und `reasons`.

## Git-Push-Aktionen

| Aktion | Argumente |
|--------|-----------|
| `rudel_before_environment_push` | `$context` |
| `rudel_after_environment_push` | `$sha`, `$context` |
| `rudel_environment_push_failed` | `$context`, `$error` |

Diese werden für `Rudel::push()` ausgelöst. `$context` umfasst `environment`, `remote`, `message` und `subdir`. Der Befehl `wp rudel push` pusht direkt und löst sie nicht aus.

## Automatisierungsaktionen

| Aktion | Argumente |
|--------|-----------|
| `rudel_before_automation_cleanup` | `$config` |
| `rudel_after_automation_cleanup` | `$result`, `$config` |
| `rudel_after_automation_expiring_environments` | `$result`, `$config` |

`$config` ist das vollständige Array `rudel_config`. Siehe [Automatisierung](https://rudel.inline0.dev/de/docs/features/automation).

## Filter

| Filter | Argumente |
|--------|-----------|
| `rudel_environment_create_options` | `$options`, `$name`, `$manager` |
| `rudel_environment_clone_source` | `$clone_source`, `$host_url`, `$db_cloned`, `$themes_cloned`, `$plugins_cloned`, `$uploads_cloned`, `$extra` |
| `rudel_environment_cleanup_options` | `$options`, `$repository` |
| `rudel_environment_cleanup_merged_options` | `$options`, `$repository` |
| `rudel_environment_db_dropin_contents` | `$contents`, `$context` |

`rudel_environment_create_options` kann die Optionen jedes Erstellungsaufrufs ändern, bevor Rudel sie verarbeitet. `rudel_environment_clone_source` filtert die Klon-Metadaten, die bei einer vom Host erstellten Sandbox gespeichert werden. `rudel_environment_db_dropin_contents` gilt nur für das `db.php`-Drop-in, das Multisite-Subsite-Umgebungen verwenden; Overlay-Sandboxes, die einzige Art, die aktuelle Versionen erstellen, erzeugen keines.

Filter dienen der Anpassung von Richtlinien, nicht dem Ersetzen des Speichermodells von Rudel. Laufzeitidentität, Tabellenpräfixe und Worktree-Metadaten bleiben DB-gestützter Zustand in Rudel.
