현재 core/modules/member/member.controller.php 에 있는 doLogin() 함수를 보고 있습니다. 근데 여기서

 

   $trigger_obj = new stdClass();
   $trigger_obj->user_id = $user_id;
   $trigger_obj->password = $password;
   $trigger_output = ModuleHandler::triggerCall('member.doLogin', 'before', $trigger_obj);
   if(!$trigger_output->toBool()) return $trigger_output;


triggerCall을 통해서 이 함수를 또 호출해주고 있는데요.. 이게 무슨의미인지 모르겠습니다.

그리고 trigger의 before, after를 넣었을때, 어느 시점에서 trigger가 실행되는지도 잘 모르겠구요..

지식 공유 부탁드립니다!

  • ?
    doLogin을 다시 호출하는 것이 아닌 member.doLogin에서 동작하기로 약속된 트리거를 불러와서 실행하는 것이에요.
  • ?
    이부분은 좀 더 공부해 봐야 될거 같네요ㅠ
    그렇다면 제은일행님 말씀대로 트리거를 불러와서 실행한다면 before와 after는 어떤 용도로 사용되나요?
  • profile
    열심히 분석하시는 군요.. 저도 트리거 관련해서 공부좀 해야 되는데요.. 엄두가 안나네요.
  • profile ?
    이제야 확인했네요..ㅎ 한달정도 분석중인데.. 제대로 하는건지.. 라는 생각이 많이 드네요..ㅠ
  • profile
    보통 before 는 함수 앞부분에 위치해서 전달받은 데이터가 처리되기 전에 호출하도록 선언하고, 전달받은 데이터를 받아갈 수 있게 합니다. after는 반대로 데이터가 처리된 후 결과값을 받아가려고 선언합니다. 꼭 그런 용도로만 쓰이는것은 아닙니다.
  • profile ?
    보통 용도가 정해져 있는 모양이군요.. 지식나눔 감사합니다!ㅎ
  • profile

    before와 after는 그냥 트리거 이름의 일부라고 생각하시면 됩니다. member.doLogin + before 조합으로 등록한 트리거는 동일한 조합으로 호출했을 때만 실행됩니다.

     

    doLogin() 함수를 자세히 보시면 로그인 처리 전에 before 트리거를 호출하고, 처리 후에 after 트리거를 호출하는 것을 볼 수 있습니다. 로그인 과정에서 언제 끼어들기를 원하는지에 따라 용도에 맞게 사용하시면 됩니다. 예를 들어 특정 유저의 로그인을 금지하는 모듈을 개발하신다면 로그인 전에 막아야 하니까 before에서 끼어들어야겠고, 로그인 기록을 남기는 모듈을 개발하신다면 로그인에 성공한 후 통보만 받으면 되니까 after에서 끼어드는 것이 더 효율적입니다.

     

    대부분의 트리거는 before, after가 모두 있지만, 가끔 둘 중 하나만 있는 경우도 있습니다.

  • profile ?
    명확하게 이해가 가네요! 다시 한번 들춰봐야겠습니다. 지식 공유 감사합니다!