我刚刚开始阅读cakephp 3 docs(我一直在使用cake 2.x进行一段时间的开发)并希望将一些网站从2.x迁移到3.在我AppModel
的蛋糕2中我有一些回调,特别是beforeFind
和beforeSave
,包含一些关于数据库中几乎所有表的逻辑。
现在在蛋糕3中没有AppModel
,我怎么做同样的事情呢?我能想到的最好的方法是将代码放在某些行为的回调中,但我有30个模型,我应该逐个加载所有模型中的行为吗?
谢谢
答案 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.beforeSave
,Model.beforeFind
和Model.initialize
的事件侦听器,并应用您想要执行的操作。 Read the chapter about events和the 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 事件管理器。它现在将侦听所有表对象的回调。