Добавление (или переопределение) метода базового класса в cakePHP

Мы используем cakePHP 2.7.x.

Вопрос, который у меня возникает, заключается в переопределении базового класса или в конкретном добавлении функциональности в метод без изменения базового кода.

Мне нужно добавить некоторые функции в метод:cake/lib/Cake/Model/Datasource/DboSource->BuildColumn()

В документах говорится, что весь класс должен находиться в одном и том же месте приложения, а затем загрузчик приложения загрузит его. Поэтому я скопировал класс вmarketplace/Model/Datasource/DboSourceи добавил мой фрагмент кода. К сожалению, ничего не изменилось.

Если я добавлю свое изменение непосредственно в исходный метод, все будет работать нормально.

Контекст: внутри этого метода все значения по умолчанию заключаются в кавычки без разбора. Поэтому что-то вроде DEFAULT CURRENT_TIMESTAMP интерпретируется и работает как DEFAULT 'CURRENT_TIMESTAMP' что, очевидно, не работает, как задумано. В частности, это дает мне ошибку "Syntax error or access violation: 1067 Invalid default value for 'created'" при попытке испечь пирог.

Я был направлен на причину проблемы и предлагаем исправление для cakePHP 1.2.6, здесь: http://mamchenkov.net/wordpress/2010/04/21/unit-tests-with-cakephp/

2 ответа

Решение

Согласно документам:

Вы можете переопределить почти каждый класс в рамках, за исключением классов App и Configure. Всякий раз, когда вы хотите выполнить такое переопределение, просто добавьте свой класс в папку app/Lib, имитирующую внутреннюю структуру фреймворка.

Так что путь должен быть marketplace/Lib/Model/Datasource/DboSourceне marketplace/Model/Datasource/DboSource

Так что, видимо, что-то произошло с моей бродячей машиной. После того, как я перезапустил это, работа, как Бруно Ферриера обрисовал в общих чертах, работает отлично!

Другие вопросы по тегам