1

我刚开始阅读 cakephp 3 文档(我一直在使用 cake 2.x 开发一段时间)并且想将一些网站从 2.x 迁移到 3。在我的 cake 2 中,我AppModel有一些回调,特别是beforeFindbeforeSave,其中包含一些涉及数据库中几乎所有表的逻辑。

现在在蛋糕 3 中没有AppModel,我该如何完成同样的事情?我能想到的最好的办法是将该代码放在某些行为的回调中,但我有 30 个模型,我应该一个一个地加载所有模型中的行为吗?

谢谢

4

2 回答 2

4

您还可以在src/Model/Table 文件夹中创建 AppTable :

namespace App\Model\Table;

use Cake\ORM\Table;

class AppTable extends Table
{
    public function initialize(array $config)
    {
        parent::initialize($config);

        $this->addBehavior('myBehavior');
        $this->addBehavior('myBehavior2');
        $this->addBehavior('myBehavior3');
    }
}

然后通过AppTable扩展您的 Table 类:

namespace App\Model\Table;

use App\Model\Table\AppTable;

class ArticlesTable extends AppTable
{

}
于 2016-11-16T13:49:51.187 回答
2

使用一个监听事件的事件监听器Model.beforeSaveModel.beforeFindModel.initialize应用你想做的任何事情。阅读有关事件的章节表回调的文档

use Cake\Event\EventListenerInterface;
use Cake\Event\Event;

class SomeListener implements EventListenerInterface
{

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

    public function beforeFind(Event $event, Query $query, ArrayObject $options, boolean $primary)
    {
        // Your code here
    }
}

并将其附加到全局事件管理器。它现在将监听所有表对象的回调。

于 2015-10-19T21:20:34.070 回答