CI 묻고 답하기

제목 이벤트 (EVENTS) 사용관련 문의
카테고리 CI 4 관련
글쓴이 호해주까 작성시각 2022/08/10 17:34:00
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 6188   RSS

안녕하세요. 

CI4의 공식 패키지 Shield 를 테스트 중입니다.

로그인 성공시 login 이벤트를 구독하게 되는데요.

Shield 에서 User 엔티티를 보내줌으로써 아래와같이 이벤트 구독이 가능합니다.

 

Events::on('login', function ($user) {
    dd($user);
});

 

Config폴더의 Events 에서는 수신만 정리하고 실제 처리는 다른 라이브러리나 , 타 컨트롤러에서 DB 처리를 하고싶습니다.

login 이벤트 발생시 User 엔티티를 타 컨트롤러 메소드나,

라이브러리로 바로 넘겨 별도 처리하는 방법이 궁금합니다 ^^

 

가르침 주시면 감사하겠습니다 ^^;

 

-------------- 추가 ----------

Vender 의 Shield 안건드는게 애초 목적이였기땜에 ..

1번. 

컨트롤러에서 Shield 처리부분을 오버라이딩해서 한 방법은 아래와 같습니다.

 

<?php

namespace App\Controllers;

use CodeIgniter\Shield\Controllers\LoginController as AuthController;

use CodeIgniter\Shield\Models\UserModel;
use CodeIgniter\HTTP\RedirectResponse;
class Auth extends AuthController

{

    public function __construct()

    {

        helper('auth');

    }

   public function loginAction(): RedirectResponse

    {
        로그인처리 재작성

    }


2번.

한대승님 댓글보구 Event 에서 서비스 호출하여 처리로 변경했습니다.

더 간단하네요 ^^

 

Events::on('login', function ($user) {

    $loginAfter = service('loginAfter');

    $loginAfter->save( $user->email );
});

 

 다음글 ci4 pager에서 한번에 보여줄 페이지 수 설정 문... (1)
 이전글 하이브리드앱 속도 관련 이슈 (3)

댓글

한대승(불의회상) / 2022/08/11 12:16:37 / 추천 0
JSON 으로 변환하여 넘겨주세요.
호해주까 / 2022/08/11 13:03:40 / 추천 0

아 질문이 잘못됏나요 그런뜻은 아니고...

Events.php 에서 위와 같이 수신은 가능한데

저기다 DB처리라던가 하긴 그렇고 이벤트를 수신해서 바로 다른곳으로 처리를 넘기고 싶습니다.

 

물론 쉴드 처리쪽에서 수정가능하지만.. 쉴드는 쉴드 소스 건들지 않고 그대로 두구 별도로 처리하고 함입니다.

한대승(불의회상) / 2022/08/11 13:34:32 / 추천 1

서비스로 등록한 후 로드하여 넘기시면 됩니다.

모델로 만들어 로드하여 처리하셔도 되구요.

엔티티니까 모델로 처리하는게 더 자연스러울수도..

호해주까 / 2022/08/11 14:19:05 / 추천 0

아직 서비스 등록은 안해봐서 메뉴얼 좀보구 다시 테스트해보겠습니다.

 

감사합니다 ^_^

테러보이 / 2022/08/11 19:02:15 / 추천 0

@호해주까 님 후기 기대 하겠습니다.

전 생으로 만들어서 사용해서 궁금하긴 했습니다 ㅎㅎ

한대승(불의회상) / 2022/08/12 12:17:57 / 추천 0

@호해주까 서비스 정의 방법 관련 메뉴얼입니다.

http://ci4doc.cikorea.net/concepts/services.html#id11

호해주까 / 2022/08/12 13:28:11 / 추천 0

아하 간단햇네요. 

괜히 컨트롤러 오버라이드를..... ^^

머리나쁜 고생이쥬 ^^