Мы используем 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/
Согласно документы:
Вы можете переопределить почти каждый класс в рамках, исключения
Приложение и Настроить классы. Всякий раз, когда вам нравится выполнять такие
переопределить, просто добавьте свой класс в папку app / lib, имитируя
внутренняя структура каркаса
Так что путь должен быть marketplace/Lib/Model/Datasource/DboSource
не marketplace/Model/Datasource/DboSource
Так что, видимо, что-то произошло с моей бродячей машиной. После того, как я перезапустил это, работа, как Бруно Ферриера обрисовал в общих чертах, работает отлично!