我想覆盖 CakePHP 3 核心中存在的一个函数(更具体地说Cake\Database\ValueBinder
)。
我怎样才能做到这一点?我尝试将类复制到src/Database/
并将命名空间从 Cake 更改为 App。我在 中使用了课程AppController
,但没有运气。
提前致谢
阿德里安
我想覆盖 CakePHP 3 核心中存在的一个函数(更具体地说Cake\Database\ValueBinder
)。
我怎样才能做到这一点?我尝试将类复制到src/Database/
并将命名空间从 Cake 更改为 App。我在 中使用了课程AppController
,但没有运气。
提前致谢
阿德里安
ndm 在这方面帮助了我很多(请参阅对我的问题的评论),但由于他没有发布答案,我现在正在这样做。
ValueBinder
可以通过在我的查询中设置来使用自己的: $this->Table->find()->valueBinder(myOwnValueBinder)
.
为了在我自己的代码中使其成为默认的 ValueBinder(在大多数情况下就足够了),可以使用例如AppTable
CakePHP 2 中已知的扩展到Table
并使所有其他*Table
类扩展 的类AppTable
。现在只需要创建以下方法:
public function query() {
return parent::query()->valueBinder(myOwnValueBinder);
}
如果需要所有代码都使用 custom ValueBinder
,则必须创建(并使用)扩展的数据源 Connection 类。在这个类Connection::newQuery()
中必须被覆盖。