it-swarm-ko.tech

후크의 다른 유형은 무엇입니까?

구 블로그 게시물 에서 Larry Garfield는 "레지스트리 스타일"후크 및 hook_nodeapi 유형 후크를 나타냅니다.

다른 유형의 후크를 분류 할 때 문서가없는 것 같습니다. 큰 후크 목록 이 있고 Tim Plunkett는 후크를 다루는 두 개의 defgroup을 찾았지만 다른 유형의 후크는 공식적으로 분류되지 않은 것 같습니다.

그러한 고장은 어떻게 생겼습니까?

7
linclark

나는 그것들을 3, 4 그룹으로 묶을 것이지만, 그들 사이에는 기술적/내적 차이가 없습니다. 이름 지정 규칙 때문에 모두 호출되는 함수일뿐입니다.

  1. 정보 후크. 무언가에 대한 정보를 제공하는 후크, 일반적인 예는 hook_entity_info () , hook_field_info () , hook_hook_info () 뿐만 아니라 hook_permission ( ) , hook_menu () , hook_theme () 등.이 중 많은 부분에는 _info 접미사가 있지만 꼭 그럴 필요는 없습니다. 이러한 후크는 언제든지 호출 할 수 있으며 반환 된 정보는 종종 캐시 (정적 캐시 또는 영구 캐시)되거나 특정 테이블 (예 : hook_menu())에 저장됩니다.

  2. 반응성/액션 후크. 방금 그 이름을 발명했지만 이것들은 hook_init () , hook_node_save(), hook_user_save(), hook_node_view와 같은 특정 일이 발생할 때 호출되는 후크입니다. () 등등.

  3. 후크를 변경하십시오. 다른 모듈에서 제공하는 것을 변경하는 데 사용할 수있는 후크는 거의 모든 정보 후크 (예 : hook_menu_alter () 또는 hook_entity_info_alter () ) 및 일부 작업 후크 (예 : hook_node_view_alter () ).

네 번째 그룹도 있지만 실제로는 후크가 아니며 후크에 대한 일반적인 혼란의 주된 이유 중 하나입니다. 이들은 종종 "콜백"이라고합니다. 이것은 "후크 (Hooks)"로, 하나의 모듈에 대해서만 호출되며 무언가를 소유합니다. 일반적인 예에는 노드 유형 콜백 (hook_submit, hook_view, hook_form, ...), 많은 필드 후크 (예 : hook_field_load () )뿐만 아니라 hook_block_view () 도 포함됩니다. 이것을 제거하고 다른 것으로 대체하거나 (oop 기반) 다른 것으로 이름을 바꾸려는 계획이 있습니다.

나는이 그룹 중 하나에 올바르게 넣을 수 없거나 그 그룹이 혼합 된 후크도 있다고 가정합니다. 그렇다면 다시 디자인해야한다는 신호일 수 있습니다. 누군가가 예를 알고 있다면 여기에 추가 할 수 있습니다.

면책 조항 : 이것은 공식적인 것이 아니라 내가 보는 방법입니다. 주의해서 사용하십시오. ;)

7
Berdir

그것들을 분리하는 한 가지 방법은 입력 및 출력 측면에서 1) 입력 전용, 2) 출력 전용, 3) 입력 출력 및 4) 입력 없음, 출력 없음입니다.

거의 모든 일이 어떤 종류의 반응을 일으킬 수 있기 때문에 # 1은 많지 않습니다. 내가 생각할 수있는 유일한 예는 삭제 후크입니다. hook_file_delete (), hook_comment_delete (), 여기서 후크는 삭제 된 객체를 가져 오지만 해당 객체는 이미 삭제되었으므로 응답 할 이유가 없습니다.

"레지스트리 스타일"후크는 출력 # 2입니다. 그들은 단지 중앙 레지스트리에 데이터를 공급하고 아무런 입력도받지 않습니다. hook_menu () 및 hook_help ()는 예입니다.

hook_nodeapi ()는 # 3 이었지만 이제는 hook_node_presave ()-여전히 # 3 및 hook_node_delete ()와 같은 다른 함수로 나뉘어졌으며 이제는 # 1입니다. 가장 일반적인 그룹입니다. 많은 예제들은 후크 이름에 단어 "alter"를 명시 적으로 가지고 있습니다. hook_form_alter ().

Hook_init ()와 같은 것은 # 4입니다. 이벤트에 대한 일반적인 알림 외에도 입력이나 출력이 없습니다.

그것은 꽤 임의적 인 고장입니다. 출력이 입력과 동일한 구조 (변경)와 출력이 완전히 다른 구조 (호출 응답)를 갖는 후크와 # 3을 후크로 쉽게 분리 할 수 ​​있습니다. 또는 함수 호출 자체는 입력 유형이므로 차이는 세부 수준에 있기 때문에 # 1과 # 4를 결합 할 수 있습니다.

0
Scott Reynen

Larry의 블로그 게시물을 읽으면서 두 가지 종류의 후크 (레지스트리 스타일과 nodeapi 스타일) 만 있다고 말하지는 않았습니다. 내가 아는 한 공식적인 유형의 후크는 정의되어 있지 않습니다. 기본적으로 모든 후크는 기술적으로 유사하지만 후크와 작업 시간에 차이가 있습니다.

초기 http 요청과 출력 리턴 사이의 위치에서 후크를 호출 할 수 있습니다. 대부분의 훅은 hook_init 와 같이 (일반적으로 html) 출력에 영향을 주거나 다른 방식으로 (원하는 경우 '정상 훅'이라고 부릅니다) 영향을 미칩니다.

일부 후크는 not 출력에 직접 영향을 주지만 데이터베이스에 저장되는 레지스트리를 추가하거나 변경합니다. 이것이 Larry가 레지스트리 스타일 후크라고합니다. 자주 호출되지는 않지만 계속해서 사용할 수있는 지속적인 값 목록을 작성합니다. 데이터베이스에 레지스트리로 저장하면 성능이 향상됩니다. 이것은 hook_menhook_theme 무엇을 하는가입니다.

블로그에 언급 된 'nodeapi-style'은 단일 후크 구현에서 많은 서브 루틴을 묶는 후크를 나타냅니다. D6에서 hook_nodeapi의 구현은 노드 저장, 노드보기 및 노드 삭제와 같은 여러 이벤트에 응답 할 수 있습니다. 이 유형의 후크 더 이상 D7에 존재하지 않음 ; 예를 들어 단일 hook_nodeapi는 hook_node_insert, hook_node_view, hook_node_delete 및 유사한 후크로 대체되었습니다.

0
marcvangend