Как заставить события работать в cakephp 3.4

Я пытаюсь заставить функциональность событий cakephp работать в cakephp 3.4, и мне потребовались столетия, чтобы понять это. Буду признателен за всю помощь, которую я могу получить. Я хочу, чтобы электронное письмо с подтверждением было отправлено пользователям после сохранения их информации. В контроллере пользователей >> метод регистрации

public function register()
    {
       // $this->viewBuilder()->getLayout('logo-only');
        $user = $this->Users->newEntity();
        if ($this->request->is('post')) {
            $user = $this->Users->patchEntity($user, $this->request->getData());
            if($this->Users->processRegistration($user)) {

            }else {
                $this->Flash->error(__('Your account was not created, check highlighted form fields to correct errors'));
            }
        }        
        $this->set(compact('user'));
        $this->set('_serialize', ['user']);
    }

В моей пользовательской таблице

public function initialize()
{
   parent::intialize();
   $event = new UserListener();
   $this->eventManager()->on($event);
}

public function processRegistration ($entity)
    {
        if ($this->save($entity)) {
            $event = new Event('Model.Users.afterRegister', $this, ['user' => $entity]);
        $this->eventManager()->dispatch($event);
        return true;            
        }
        return false;
    }

В моем src/Event/UserListener.php

<?php
namespace App\Event;

use Cake\Log\Log;
use Cake\Event\EventListenerInterface;
use Cake\Mailer\Email;

class UserListener implements EventListenerInterface {

    public function implementedEvents () {
        return [
            'Model.User.afterRegister' => 'afterRegister'
        ];
    }

    public function afterRegister ($event, $user)
    {
        $email = new Email('default');
        $email->setFrom(['[email protected]' => 'Example Site'])
            ->setTo('[email protected]')
            ->setSubject('New User Registration - ' . $user['username'])
            ->send('User has registered in your application');
    }
}
?>

Надеюсь, я смог понять, что можно предложить помощь. Спасибо за помощь


person medhybrid    schedule 25.06.2017    source источник


Ответы (1)


Теперь работает нормально; Я реализовал «Model.User.afterRegister» в моем прослушивателе, но был занят вызовом «Model.Users.afterRegister» в моей таблице UserTable. Надеюсь, вы тоже чему-то научились из этого #smilinWithEyesCovered

person medhybrid    schedule 25.06.2017