documentationによれば、implementEventsを私のメーラーに直接追加して、自分のコードからすべてのメールロジックを分離することができます。CakePHPのimplementEvents()はメールでは発生しません
しかし、私はドキュメントの正確な例に従ってください。実装されたイベント関数が動作しないのがわかります。 (電子メールを送信しない&は何もログに記録しません)
どこかで私のemailerクラスを実装する必要がありますか?もしそうなら、私はどのように私のemailerクラスを登録すべきですか?
これは私のメーラークラスです:
<?php
namespace App\Mailer;
use Cake\Mailer\Mailer;
use Cake\Log\Log;
/**
* Purchase mailer.
*/
class PurchaseMailer extends Mailer
{
/**
* Mailer's name.
*
* @var string
*/
static public $name = 'Purchase';
public function implementedEvents()
{
return [
'Model.afterSave' => 'onStatusChange'
];
}
public function onStatusChange(Event $event, EntityInterface $entity, ArrayObject $options)
{
Log::write(
'info',
'd1'
);
//if ($entity->isNew()) {
$this->send('sendStatusChangeMails', [$entity]);
//}
}
/**
* @param EntityInterface $entity
* @return [type]
*/
public function sendStatusChangeMails($entity)
{
Log::write(
'info',
'd2'
);
//if($entity->status_id == 1) {
//@todo email???
$this
->template('purchase')
->layout('default')
->emailFormat('html')
->from(['[email protected]' => 'TEST'])
->to('[email protected]')
->subject('test')
->set(['content' => 'this is a purhcase testing mail.']);
//}
}
}
あなたはより多くのコンテキストを追加する必要があり、あなたのメーラーコードは、問題を再現するのに十分ではありません。メーラー/リスナーを登録するコードは特に重要です。 – ndm
まあ、それは質問です。私はどうしたらいいですか?ドキュメントでは、メール論理を他のコードと区別するために、これと何もしないことが記載されています。私のメーラーをどのように登録すればよいですか? –
その時点で、ドキュメントはすでにあなたが** [イベントシステムの仕組み]を読んでいると期待しているようです(http://book.cakephp.org/3.0/en/core-libraries/events.html#registering -listeners)**イベントセクションへのリンクが参考になるかもしれません.GitHub(https://github.com/cakephp/docs/issues)で**をお勧めしたいかもしれません。 – ndm