You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
첫번째로는 `my_before_saving` 라는 커스텀 Tag (Hook)를 지정하고 `run_event`를 호출했다. 이것은 `my_before_saving`에 등록된 핸들러(함수)들을 실행시키겠다는 의미이며 실행될 각각의 해들러에 `$context` 를 전달한다.
75
+
76
+
77
+
커스텀 Hook의 정의와 실행은 이것으로 끝난다. 이렇게 `run_event`가 호출될 때 Tag에 등록된 핸들러가 없다면 아무일도 일어나지 않는다.
78
+
79
+
`run_event('my_before_saving', $context);`는 결국 아래
80
+
81
+
```수도코드
82
+
my_before_saving($context);
83
+
```
84
+
85
+
처럼 여겨지고 `my_before_saving`는 함수를 담는 변수로, 등록된 모든 핸들러에 매개변수로 `$context`를 전달해 실행`()` 하는 것이다. 핸들러에 전할 인자가 여럿이라면 `my_after_saving` 의 경우처럼 매개변수를 추가하면된다.
86
+
87
+
88
+
### 커스텀 Hook에 핸들러 등록
89
+
90
+
위에 정의한 `run_event`가 `my_before_saving` Tag를 실행시킬 때 실제로 실행될 핸들러 함수는 `add_`로 등록한다.
91
+
92
+
```php
93
+
`add_event(`my_before_saving`, `your_func`);
94
+
95
+
function your_func($your_context) {
96
+
//do something
97
+
}
98
+
```
99
+
이것은 아래와 같은 의미로 생각하면된다.
100
+
101
+
```수도코드
102
+
$my_before_saving += your_func;
103
+
```
104
+
105
+
`$your_func`는 Hook을 사용하려는 자의 커스텀 핸들러 함수이다. 앞서 `my_before_saving` 태그를 정의한 예제에서 `run_even`가 실행될 때 `$context`가 `your_func`의 매개변수 `$your_context`에 전달되므로 보통은 매개변수 이름을 같게 짓는다. 그리고 위 예제상 전달받은 데이터는 다음배열이 되겠다:
106
+
107
+
~~~
108
+
[
109
+
'data' => $data,
110
+
'user_id' => $user_id,
111
+
];
112
+
~~~
113
+
114
+
위의 `add_event`와 `your_func` 핸들러 함수를 다시 작성 해보았다:
115
+
116
+
~~~php
117
+
add_event('my_before_saving', 'your_func');
118
+
119
+
function your_func($context) {
120
+
$context['data'] = strtoupper($context['data']);
121
+
}
122
+
~~~
123
+
124
+
이렇게 `run_event`로 Tag를 실행할때 실행될 핸들러로 `your_func` 함수를를 등록했다.
125
+
126
+
이렇게 실행될 핸들러는 반드시 함수 구현체가 있어야하는 것은 아니다. 간단한 동작이라면 `add_event`의 매개변수를 익명함수로 직접 작성해도된다.
127
+
128
+
```php
129
+
add_event('my_before_saving',
130
+
function($context) {
131
+
$context['data'] = strtoupper($context['data']);
132
+
}
133
+
);
134
+
```
135
+
136
+
137
+
26
138
## Hook 사용하기 (리스너 등록)
27
139
28
140
Hook이 동작할 때 실행될 함수(콜백, Listener)를 등록해두면 해당 이벤트가 발생할 때 등록한 함수를 호출하여 실행한다.
0 commit comments