
# 훅

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`). 실패하면 `$context` 및 오류와 함께 `rudel_failed_recovery_point_{create|restore|delete}` 및 `rudel_failed_snapshot_{create|restore|delete}`가 실행됩니다. 이 별칭은 카탈로그에 포함되지 않습니다.

## 정리 액션

| 액션 | 인수 |
|--------|-----------|
| `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/ko/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의 저장소 모델을 대체하기 위한 것이 아닙니다. 런타임 ID, 테이블 접두사 및 작업 트리 메타데이터는 DB에 저장되는 Rudel 상태로 유지됩니다.
