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.phprequire_once APP . 'Config' . DS . 'events.php';
이제 사용자를 등록하면 자동으로 등록 완료 메일이 gmail로 전송됩니다.
Reference
이 문제에 관하여(CakePHP-Observer 패턴 사용법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/HavenSpring/items/056caa8981b53bbd8bee
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
if($this->User->save($this->data)) {
$this->Email->send('saved');
}
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.phprequire_once APP . 'Config' . DS . 'events.php';
이제 사용자를 등록하면 자동으로 등록 완료 메일이 gmail로 전송됩니다.
Reference
이 문제에 관하여(CakePHP-Observer 패턴 사용법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/HavenSpring/items/056caa8981b53bbd8bee
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<?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;
}
}
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.phprequire_once APP . 'Config' . DS . 'events.php';
이제 사용자를 등록하면 자동으로 등록 완료 메일이 gmail로 전송됩니다.
Reference
이 문제에 관하여(CakePHP-Observer 패턴 사용법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/HavenSpring/items/056caa8981b53bbd8bee
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<?php
App::uses('CakeEventManager', 'Event');
App::uses('UserListener', 'Lib/Event');
CakeEventManager::instance()->attach(new UserListener());
bootstrap.php
require_once APP . 'Config' . DS . 'events.php';
이제 사용자를 등록하면 자동으로 등록 완료 메일이 gmail로 전송됩니다.
Reference
이 문제에 관하여(CakePHP-Observer 패턴 사용법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/HavenSpring/items/056caa8981b53bbd8bee텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)