CAKEPHP3数据源开关

CAKEPHP3数据源开关,php,cakephp,cakephp-3.0,Php,Cakephp,Cakephp 3.0,我目前正试图让我的应用程序切换数据源,这取决于它是从数据库写入还是从数据库读取。不幸的是,我就是不能让它工作。我猜我只是错过了一些小东西。我创建了一个EventListener来捕获beforeSave事件,以便在编写时切换数据源。但令人遗憾的是,实际的开关并不起作用 我不知道在CakePHP2中它像一个符咒一样起作用:-D 以下是我当前的听众: <?php namespace MasterSlaveManager; use Cake\Event\EventListenerInterfa

我目前正试图让我的应用程序切换数据源,这取决于它是从数据库写入还是从数据库读取。不幸的是,我就是不能让它工作。我猜我只是错过了一些小东西。我创建了一个EventListener来捕获beforeSave事件,以便在编写时切换数据源。但令人遗憾的是,实际的开关并不起作用

我不知道在CakePHP2中它像一个符咒一样起作用:-D

以下是我当前的听众:

<?php
namespace MasterSlaveManager;

use Cake\Event\EventListenerInterface;
use Cake\Event\Event;
use Cake\Datasource\ConnectionManager;
use Cake\Database\Query;


class MasterSlaveManager implements EventListenerInterface {

    public function implementedEvents() {
        return [
            'Model.beforeSave' => 'beforeSave',
            'Model.afterSave' => 'afterSave',
        ];
    }

    public function beforeSave(&$event) {   
        $event->subject()->connection(ConnectionManager::get('master'));
    }

    public function afterSave() {

    }

}

“不工作”不是正确的问题描述!即使这个问题对于了解CakePHP内部结构的人来说是显而易见的,但请始终尽可能具体地说明到底发生了什么,以及您希望发生什么。显示您正在处理的数据、上下文(您在何处/何时/如何订阅侦听器并调用saving?)、重现问题所需的代码、调试尝试以及可能的错误。收集这些信息时,问题往往会自行解决。哦,对不起,我以为我在帖子中暗示了这个问题。我希望它写入另一个数据源(master)。不幸的是,它写入默认数据源。侦听器被调用。我已经通过返回事件对象来测试了这一点。返回事件对象如何表示正在调用侦听器?请您知道,您在那里做的是什么,即在
模型上更改连接。在保存之前,在这里可以正常工作。@ndm很抱歉没有返回,而是输出它。这样我知道它进入了beforeSave方法。“不工作”不是正确的问题描述!即使这个问题对于了解CakePHP内部结构的人来说是显而易见的,但请始终尽可能具体地说明到底发生了什么,以及您希望发生什么。显示您正在处理的数据、上下文(您在何处/何时/如何订阅侦听器并调用saving?)、重现问题所需的代码、调试尝试以及可能的错误。收集这些信息时,问题往往会自行解决。哦,对不起,我以为我在帖子中暗示了这个问题。我希望它写入另一个数据源(master)。不幸的是,它写入默认数据源。侦听器被调用。我已经通过返回事件对象来测试了这一点。返回事件对象如何表示正在调用侦听器?请您知道,您在那里做的是什么,即在
模型上更改连接。在保存之前,在这里可以正常工作。@ndm很抱歉没有返回,而是输出它。这样我就知道它进入了beforeSave方法。