Cakephp 3回调,所有模型的行为

时间:2015-10-19 20:53:20

标签: cakephp cakephp-3.0 cakephp-3.1

我刚刚开始阅读cakephp 3 docs(我一直在使用cake 2.x进行一段时间的开发)并希望将一些网站从2.x迁移到3.在我AppModel的蛋糕2中我有一些回调,特别是beforeFindbeforeSave,包含一些关于数据库中几乎所有表的逻辑。

现在在蛋糕3中没有AppModel,我怎么做同样的事情呢?我能想到的最好的方法是将代码放在某些行为的回调中,但我有30个模型,我应该逐个加载所有模型中的行为吗?

谢谢

2 个答案:

答案 0 :(得分:3)

您还可以在 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
{

}

答案 1 :(得分:1)

使用侦听事件Model.beforeSaveModel.beforeFindModel.initialize的事件侦听器,并应用您想要执行的操作。 Read the chapter about eventsthe documentation for table callbacks

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
    }
}

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