Переопределить базовый класс Cakephp 3
Я хотел бы переопределить функцию, которая существует в ядре CakePHP 3 (чтобы быть более конкретным Cake\Database\ValueBinder
).
Как мне этого добиться? Я пытался скопировать класс в src/Database/
и изменил пространство имен с Cake на App. Я использовал бы класс в AppController
, но не повезло.
заранее спасибо
Адриан
1 ответ
ndm очень помог мне в этом (см. комментарии к моему вопросу), но так как он не опубликовал ответ, я делаю это сейчас.
Можно использовать собственный ValueBinder
установив его на мой запрос: $this->Table->find()->valueBinder(myOwnValueBinder)
,
Чтобы сделать это ValueBinder по умолчанию в моем собственном коде (в большинстве случаев достаточно), можно использовать, например, AppTable
как известно из CakePHP 2, который распространяется на Table
и сделать все остальное *Table
классы расширяются AppTable
, Теперь нужно только создать следующий метод:
public function query() {
return parent::query()->valueBinder(myOwnValueBinder);
}
В случае, если необходимо, чтобы весь код использовал ValueBinder
, расширенный класс Соединения источника данных должен быть создан (и использован). В этом классе Connection::newQuery()
должен быть переопределен.