我刚开始阅读 cakephp 3 文档(我一直在使用 cake 2.x 开发一段时间)并且想将一些网站从 2.x 迁移到 3。在我的 cake 2 中,我AppModel
有一些回调,特别是beforeFind
和beforeSave
,其中包含一些涉及数据库中几乎所有表的逻辑。
现在在蛋糕 3 中没有AppModel
,我该如何完成同样的事情?我能想到的最好的办法是将该代码放在某些行为的回调中,但我有 30 个模型,我应该一个一个地加载所有模型中的行为吗?
谢谢
我刚开始阅读 cakephp 3 文档(我一直在使用 cake 2.x 开发一段时间)并且想将一些网站从 2.x 迁移到 3。在我的 cake 2 中,我AppModel
有一些回调,特别是beforeFind
和beforeSave
,其中包含一些涉及数据库中几乎所有表的逻辑。
现在在蛋糕 3 中没有AppModel
,我该如何完成同样的事情?我能想到的最好的办法是将该代码放在某些行为的回调中,但我有 30 个模型,我应该一个一个地加载所有模型中的行为吗?
谢谢
您还可以在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
{
}
使用一个监听事件的事件监听器Model.beforeSave
,Model.beforeFind
并Model.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
}
}
并将其附加到全局事件管理器。它现在将监听所有表对象的回调。