CakePHP-Observer 패턴 사용법

4297 단어 CakePHP

Observer 패턴이란?



간단히 설명하면 프로그램 내의 객체의 상태를 관찰하는 프로그램에서 사용되는 Design 패턴.

이하의 이미지와 같이, 이벤트를 발생시키는 부분, 그 이벤트를 관찰해 이벤트에 대해서 처리를 실시하는 청취자로 구성됩니다.



자세한 내용은 아래를 참조하십시오.
htps : // 그럼.ぃきぺぢ아. 오 rg/우우키/오bse rゔぇr_%에3%83%91%에3%82%BF%에3%83%BC%에3%83%B3

이번에는 CakeEvent를 이용한 Observer 패턴 구현해 보겠습니다.
참고:
h tp // 앙 dy-r r. 이 m / b ぉ g / 에 ょ ㄴ ㅇ ㅇ

아래 코드를 살펴 보겠습니다.



사용자 정보를 저장하고 성공하면 메일을 보내는 코드입니다.
if($this->User->save($this->data)) {
  $this->Email->send('saved');
}

이 코드를 간단하게 Controller로 로직을 구현해, EmailUtility를 만들어 구현하는 코드입니다만 이것을
Observer 패턴으로 구현해 보겠습니다.

①Raise Event : 모델에 이벤트를 발생시키는 코드를 추가합니다.



App-Model-User.php

User.php

<?php
App::uses('AppModel', 'Model');
App::uses('CakeEvent', 'Event');

class User extends AppModel {

    public function afterSave($created, $options = array()) {
        parent::afterSave($created, $options);
        if ($created === true) {
            // アカウントが追加されるとEvent発生
            $Event = new CakeEvent('Model.User.created', $this, array(
                'title' => 'アカウント追加',       //メールタイトル設定
                'content' => 'アカウントが追加されました。' //メール内容設定
            ));
            $this->getEventManager()->dispatch($Event);
        }
    }
}

② 이벤트 리스너 추가



app/Lib/UserListener.php 추가

UserListener.php
<?php

App::uses('CakeEventListener', 'Event');
App::uses('CakeEmail', 'Network/Email');

class UserListener implements CakeEventListener {

    public function implementedEvents() {
        return array(
            'Model.User.created' => 'sendConfirmationEmail',
        );
    }

    public function sendConfirmationEmail(CakeEvent $Event) {
        $email = new CakeEmail('gmail');                             // gmail設定
        $email->from( array( '送信メールアドレス' => 'Sender'));     // 送信元
        $email->to( '相手のメールアドレス');                           // 送信先
        $email->subject( $Event->data['title']);                  // メールタイトル
        $email->send($Event->data['content']);           // メール内容
        return;
    }
}

※gmail로 메일을 보내고 싶은 경우, 이하의 설정이 필요



app/Config/email.php

email.php
    public $gmail = array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => 465,
        'username' => 'gmailアカウント', // ユーザ名
        'password' => 'パスワード',           // パスワード
        'transport' => 'Smtp',

    );

이 경우 오류가 발생합니다.
SMTP 오류: 534 5.7.14 htps : // 꼬리 rt. 오, ぇ. 코 m/마이 l/병/안수 r. py? 안수 r = 78754 ~~ - gsmtp
gmail 쪽 설정에서 안전하지 않은 앱이 계정에 액세스할 수 있도록 허용하는 설정을 사용하도록 설정해야 합니다.
설정 방법은 이하
htps : // 꼬리 rt. 오, ぇ. 코 m/아코응 ts/안수ぇr/6010255? hl = 그럼

③ 리스너 설정



app/Config/events.php 추가

events.php
<?php
App::uses('CakeEventManager', 'Event');
App::uses('UserListener', 'Lib/Event');
CakeEventManager::instance()->attach(new UserListener());

④bootstrap.php에 다음 내용 추가



bootstrap.php
require_once APP . 'Config' . DS . 'events.php';

이제 사용자를 등록하면 자동으로 등록 완료 메일이 gmail로 전송됩니다.

좋은 웹페이지 즐겨찾기