
# Хуки

Rudel запускает действия WordPress и фильтры при событиях жизненного цикла песочницы. В каталоге ниже перечислено то, что возвращает `Rudel::hooks()`: 28 действий и 5 фильтров.

## Пример

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

Большинство действий `before` и `failed` получают массив `$context`. Для хуков жизненного цикла песочницы он содержит `environment` (или `name`, `options` и `environments_dir` при создании); действия `failed` также получают перехваченную `Throwable` как `$error`.

## Действия жизненного цикла песочницы

| Действие | Аргументы |
|--------|-----------|
| `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` |

Три действия `replace_state` относятся к `EnvironmentManager::replace_environment_state()`, которое не вызывается ни одной командой Rudel.

## Действия со снимками

| Действие | Аргументы |
|--------|-----------|
| `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` содержит `environment`, `kind` (`snapshot`), `name` и `path`. Каждое из них также запускается под псевдонимом `snapshot`, например `rudel_after_snapshot_create`, а при сбоях запускаются `rudel_failed_recovery_point_{create|restore|delete}` и `rudel_failed_snapshot_{create|restore|delete}` с `$context` и ошибкой. Эти псевдонимы отсутствуют в каталоге.

## Действия очистки

| Действие | Аргументы |
|--------|-----------|
| `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` содержит `removed`, `skipped`, `errors` и `reasons`.

## Действия отправки изменений Git

| Действие | Аргументы |
|--------|-----------|
| `rudel_before_environment_push` | `$context` |
| `rudel_after_environment_push` | `$sha`, `$context` |
| `rudel_environment_push_failed` | `$context`, `$error` |

Они запускаются для `Rudel::push()`. `$context` содержит `environment`, `remote`, `message` и `subdir`. Команда `wp rudel push` отправляет изменения напрямую и не запускает эти действия.

## Действия автоматизации

| Действие | Аргументы |
|--------|-----------|
| `rudel_before_automation_cleanup` | `$config` |
| `rudel_after_automation_cleanup` | `$result`, `$config` |
| `rudel_after_automation_expiring_environments` | `$result`, `$config` |

`$config` — это полный массив `rudel_config`. См. раздел [Автоматизация](https://rudel.inline0.dev/ru/docs/features/automation).

## Фильтры

| Фильтр | Аргументы |
|--------|-----------|
| `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` может изменять параметры любого вызова создания до того, как Rudel применит их. `rudel_environment_clone_source` фильтрует метаданные клона, хранящиеся в песочнице, созданной на основе хоста. `rudel_environment_db_dropin_contents` применяется только к подмене `db.php`, используемой в средах с подсайтами мультисайта; песочницы с наложением, единственный тип, создаваемый текущими версиями, ее никогда не генерируют.

Фильтры предназначены для настройки политик, а не для замены модели хранения Rudel. Идентификатор среды выполнения, префиксы таблиц и метаданные рабочего дерева остаются состоянием Rudel, хранящимся в базе данных.
